diff --git a/.editorconfig b/.editorconfig
index 743272b9b8202e867fb3053d3a2813467c8027a3..d4eb1a005b791c8d66f9c0b2514e65d79a0bfa1b 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,6 +10,9 @@ indent_style = space
 insert_final_newline = true
 trim_trailing_whitespace = true
 
+[*.{yml,yaml,json}]
+indent_size = 2
+
 [*.md]
 trim_trailing_whitespace = false
 
diff --git a/.eslintrc.yaml b/.eslintrc.yaml
index 25a8daf965b4f17cdd2db282a325e57e6e15fbd3..083be93dbb5da9ec45642c65412921b87d0cb122 100644
--- a/.eslintrc.yaml
+++ b/.eslintrc.yaml
@@ -1,4 +1,6 @@
-extends: eslint:recommended
+extends:
+  - eslint:recommended
+  - prettier
 env:
   browser: true
   commonjs: true
@@ -7,50 +9,39 @@ globals:
   jQuery: true
 rules:
   array-bracket-spacing:
-  - "error"
-  - never
+    - "error"
+    - never
   block-scoped-var: "error"
-  brace-style:
-  - "error"
-  - stroustrup
-  - allowSingleLine: true
-  comma-dangle:
-  - "error"
-  - never
   comma-spacing: "error"
   comma-style:
-  - "error"
-  - last
+    - "error"
+    - last
   computed-property-spacing:
-  - "error"
-  - never
+    - "error"
+    - never
   curly:
-  - "error"
-  - all
+    - "error"
+    - all
   eol-last: "error"
   eqeqeq:
-  - "error"
-  - smart
+    - "error"
+    - smart
   guard-for-in: "error"
-  indent:
-  - "error"
-  - 4
-  - SwitchCase: 1
   key-spacing:
-  - "error"
-  - beforeColon: false
-    afterColon: true
+    - "error"
+    - beforeColon: false
+      afterColon: true
   keyword-spacing:
-  - "error"
-  - before: true
-    after: true
+    - "error"
+    - before: true
+      after: true
   linebreak-style:
-  - "error"
-  - unix
+    - "error"
+    - unix
   lines-around-comment:
-  - "error"
-  - beforeBlockComment: true
-    afterBlockComment: false
+    - "error"
+    - beforeBlockComment: true
+      afterBlockComment: false
   new-parens: "error"
   no-array-constructor: "error"
   no-caller: "error"
@@ -59,8 +50,8 @@ rules:
   no-extend-native: "error"
   no-extra-bind: "error"
   no-extra-parens:
-  - "error"
-  - functions
+    - "error"
+    - functions
   no-implied-eval: "error"
   no-iterator: "error"
   no-label-var: "error"
@@ -87,60 +78,50 @@ rules:
   no-undefined: "error"
   no-unused-expressions: "error"
   no-unused-vars:
-  - "error"
-  - vars: all
-    args: none
+    - "error"
+    - vars: all
+      args: none
   no-with: "error"
-  object-curly-spacing:
-  - "error"
-  - never
   one-var:
-  - "error"
-  - never
-  quote-props:
-  - "error"
-  - consistent-as-needed
-  quotes:
-  - "error"
-  - single
-  - avoid-escape
+    - "error"
+    - never
   semi:
-  - "error"
-  - always
+    - "error"
+    - always
   semi-spacing:
-  - "error"
-  - before: false
-    after: true
+    - "error"
+    - before: false
+      after: true
   space-before-blocks:
-  - "error"
-  - always
+    - "error"
+    - always
   space-before-function-paren:
-  - "error"
-  - anonymous: always
-    named: never
+    - "error"
+    - anonymous: always
+      named: never
   space-in-parens:
-  - "error"
-  - never
+    - "error"
+    - never
   space-infix-ops: "error"
   space-unary-ops:
-  - "error"
-  - words: true
-    nonwords: false
+    - "error"
+    - words: true
+      nonwords: false
   spaced-comment:
-  - "error"
-  - always
+    - "error"
+    - always
   strict:
-  - "error"
-  - function
+    - "error"
+    - function
   yoda:
-  - "error"
-  - never
+    - "error"
+    - never
   max-nested-callbacks:
-  - "warn"
-  - 3
+    - "warn"
+    - 3
   valid-jsdoc:
-  - "warn"
-  - prefer:
-      returns: return
-      property: prop
-    requireReturn: false
+    - "warn"
+    - prefer:
+        returns: return
+        property: prop
+      requireReturn: false
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
index 02bfa91d01724ad003d5381f5b1b2641f0473838..6db2c3b2e8e8700cbc4f1327a0eee1cef6feada6 100644
--- a/.github/release-drafter.yml
+++ b/.github/release-drafter.yml
@@ -1,44 +1,44 @@
-name-template: '$RESOLVED_VERSION'
-tag-template: 'v$RESOLVED_VERSION'
+name-template: "$RESOLVED_VERSION"
+tag-template: "v$RESOLVED_VERSION"
 version-resolver:
   major:
     labels:
-      - 'Type: Major'
-      - 'major'
+      - "Type: Major"
+      - "major"
   minor:
     labels:
-      - 'Type: Minor'
-      - 'minor'
+      - "Type: Minor"
+      - "minor"
   patch:
     labels:
-      - 'Type: Patch'
-      - 'patch'
+      - "Type: Patch"
+      - "patch"
   default: patch
 categories:
-  - title: '🚀 Features'
-    labels:
-      - 'Type: Feature'
-      - 'feature'
-  - title: '⚙️ Enhancements'
-    labels:
-      - 'Type: Enhancement'
-      - 'enhancement'
-  - title: '🐛 Bug Fixes'
-    labels:
-      - 'Type: Bug'
-      - 'fix'
-      - 'bugfix'
-      - 'bug'
-  - title: '🔧 Maintenance'
-    labels:
-      - 'Type: Maintenance'
-      - 'Type: Dependencies'
-      - 'dependencies'
-      - 'maintenance'
-  - title: '📜 Documentation'
-    labels:
-      - 'Type: Documentation'
-      - 'documentation'
+  - title: "🚀 Features"
+    labels:
+      - "Type: Feature"
+      - "feature"
+  - title: "⚙️ Enhancements"
+    labels:
+      - "Type: Enhancement"
+      - "enhancement"
+  - title: "🐛 Bug Fixes"
+    labels:
+      - "Type: Bug"
+      - "fix"
+      - "bugfix"
+      - "bug"
+  - title: "🔧 Maintenance"
+    labels:
+      - "Type: Maintenance"
+      - "Type: Dependencies"
+      - "dependencies"
+      - "maintenance"
+  - title: "📜 Documentation"
+    labels:
+      - "Type: Documentation"
+      - "documentation"
 template: |
   ## Changes
 
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 05c1c7ede3d4c1bb233f98fa557bbdd91700a25d..914ecbbdfa8d2746b5b896f9a01d974abb6089e8 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -14,10 +14,10 @@ name: "CodeQL"
 
 on:
   push:
-    branches: [ main, test ]
+    branches: [main, test]
   pull_request:
     # The branches below must be a subset of the branches above
-    branches: [ main ]
+    branches: [main]
 
 jobs:
   analyze:
@@ -25,14 +25,14 @@ jobs:
     runs-on: ubuntu-latest
 
     steps:
-    - name: Checkout repository
-      uses: actions/checkout@v3
+      - name: Checkout repository
+        uses: actions/checkout@v3
 
-    # Initializes the CodeQL tools for scanning.
-    - name: Initialize CodeQL
-      uses: github/codeql-action/init@v2
-      with:
-        languages: javascript, python
+      # Initializes the CodeQL tools for scanning.
+      - name: Initialize CodeQL
+        uses: github/codeql-action/init@v2
+        with:
+          languages: javascript, python
 
-    - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze@v2
+      - name: Perform CodeQL Analysis
+        uses: github/codeql-action/analyze@v2
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
index cddd4eebec2c1153091680c7747128c1c68e662b..fc0e89bc604c2a0adc1c76f2dc897a2397011149 100644
--- a/.github/workflows/deploy-docs.yml
+++ b/.github/workflows/deploy-docs.yml
@@ -5,8 +5,8 @@ on:
     branches:
       - main
     paths:
-      - 'docs/**'
-      - 'mkdocs.yml'
+      - "docs/**"
+      - "mkdocs.yml"
 
 concurrency:
   group: deploy
diff --git a/.github/workflows/hypha-ci.yml b/.github/workflows/hypha-ci.yml
index be7b3c820ac2966bebf4d2a1515fc8deb4e1305b..9ae9181e507adf0d87cb332a9071a57ee56c2c5f 100644
--- a/.github/workflows/hypha-ci.yml
+++ b/.github/workflows/hypha-ci.yml
@@ -1,4 +1,3 @@
-
 name: Hypha CI
 
 on:
@@ -16,7 +15,7 @@ concurrency:
 
 env:
   NODE_VERSION: 18
-  PYTHON_VERSION: '3.11'
+  PYTHON_VERSION: "3.11"
 
 jobs:
   build-fe:
@@ -26,7 +25,7 @@ jobs:
       - uses: actions/setup-node@v3
         with:
           node-version: ${{ env.NODE_VERSION }}
-          cache: 'npm'
+          cache: "npm"
       - name: install node dependencies
         run: npm install --quiet
       - name: builds static assets
@@ -41,8 +40,8 @@ jobs:
       - uses: actions/setup-python@v4
         with:
           python-version: ${{ env.PYTHON_VERSION }}
-          cache: 'pip'
-          cache-dependency-path: '**/requirements*.txt'
+          cache: "pip"
+          cache-dependency-path: "**/requirements*.txt"
       - name: install python dependencies
         run: |
           python3 -m venv venv
@@ -58,7 +57,7 @@ jobs:
       - uses: actions/setup-node@v3
         with:
           node-version: ${{ env.NODE_VERSION }}
-          cache: 'npm'
+          cache: "npm"
       - name: install node dependencies
         run: npm install --quiet
       - name: run scss and js linting
@@ -72,9 +71,13 @@ jobs:
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Install python dependencies
-        run: pip install `grep "ruff" requirements-dev.txt`
-      - name: Run python linting
+        run: pip install `grep -E "ruff|djhtml|black" requirements-dev.txt`
+      - name: Run ruff
         run: ruff --format github .
+      - name: Run black
+        run: black . --check
+      - name: Run djhtml
+        run: djhtml hypha/ --check
 
   test-be:
     runs-on: ubuntu-latest
@@ -100,8 +103,8 @@ jobs:
       - uses: actions/setup-python@v4
         with:
           python-version: ${{ env.PYTHON_VERSION }}
-          cache: 'pip'
-          cache-dependency-path: '**/requirements*.txt'
+          cache: "pip"
+          cache-dependency-path: "**/requirements*.txt"
       - uses: codecov/codecov-action@v3
       - name: install python dependencies
         run: |
diff --git a/.jscsrc b/.jscsrc
index eaa85c0fa5b79a4d1dbe3c177ff5120a10a372c3..1830e1e278d871f775386b2f0cde13046226e40b 100644
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,14 +1,10 @@
 {
     "validateIndentation": 4,
-    "requireSpaceBeforeKeywords": [
-        "else",
-        "while",
-        "catch"
-    ],
+    "requireSpaceBeforeKeywords": ["else", "while", "catch"],
     "disallowMultipleVarDecl": {
         "allExcept": ["undefined"]
     },
     "fileExtensions": [".js"],
-    "preset":"airbnb",
+    "preset": "airbnb",
     "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties"
-}
\ No newline at end of file
+}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..bae644a7a23de9f059891b70a198054b537bad8c
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,24 @@
+repos:
+  - repo: https://github.com/astral-sh/ruff-pre-commit
+    rev: v0.0.280
+    hooks:
+      - id: ruff
+        args: [--fix, --exit-non-zero-on-fix]
+  - repo: https://github.com/psf/black
+    rev: 23.7.0
+    hooks:
+      - id: black
+        # It is recommended to specify the latest version of Python
+        # supported by your project here, or alternatively use
+        # pre-commit's default_language_version, see
+        # https://pre-commit.com/#top_level-default_language_version
+        language_version: python3.11
+  - repo: https://github.com/rtts/djhtml
+    rev: "3.0.6"
+    hooks:
+      - id: djhtml
+        files: .*/templates/.*\.html$
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: v3.0.0 # Use the sha or tag you want to point at
+    hooks:
+      - id: prettier
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000000000000000000000000000000000..ddc6779e198b24ff29a16d9e2cb751bebae81364
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,27 @@
+# Ignore all HTML files, use djHtml instead.
+**/*.html
+
+# Ignore markdown files, prettier is not great with them
+**/*.md
+
+# Minified JavaScript files shouldn't be changed
+**/**.min.js
+**/javascript/esm/**
+
+# Ignore all files in the static & media directory.
+static_compiled/**
+media/**
+
+# Ignore all files in the virtualenv directory.
+.venv/**
+venv/**
+
+# Ignore node files
+node_modules/**
+
+# Ignore htmlcov files
+htmlcov/**
+
+# Ignore Sublime Text files.
+*.sublime-project
+*.sublime-workspace
diff --git a/.stylelintrc.yaml b/.stylelintrc.yaml
index ad9c7c9bd74f143ed4af0533900452a2c1a04f61..60f9853d68a4aa92223c9b8de76f803cfbac2418 100644
--- a/.stylelintrc.yaml
+++ b/.stylelintrc.yaml
@@ -1,6 +1,5 @@
-plugins:
-  - stylelint-scss
 extends:
+  - stylelint-config-standard
   - stylelint-config-standard-scss
 rules:
   at-rule-disallowed-list:
@@ -8,21 +7,11 @@ rules:
   at-rule-no-unknown: null
   at-rule-no-vendor-prefix: true
   block-no-empty: null
-  block-opening-brace-space-before: always
-  color-hex-case: lower
   color-hex-length: short
   color-named: never
-  color-no-hex: true
   color-no-invalid-hex: true
-  declaration-bang-space-after: never
-  declaration-bang-space-before: always
   declaration-block-no-redundant-longhand-properties: null
-  declaration-block-semicolon-newline-after: always
-  declaration-block-semicolon-space-before: never
   declaration-block-single-line-max-declarations: 1
-  declaration-block-trailing-semicolon: always
-  declaration-colon-space-after: always-single-line
-  declaration-colon-space-before: never
   declaration-empty-line-before: null
   declaration-no-important: true
   declaration-property-value-disallowed-list:
@@ -37,37 +26,31 @@ rules:
     border-left:
       - none
   font-family-name-quotes: null
-  function-comma-space-after: always-single-line
-  function-parentheses-space-inside: never
   function-url-quotes: always
-  indentation: 4
   length-zero-no-unit: true
   max-nesting-depth:
     - 4
     - ignoreAtRules:
-      - each
-      - media
-      - supports
-      - include
+        - each
+        - media
+        - supports
+        - include
   media-feature-name-no-vendor-prefix: true
-  media-feature-parentheses-space-inside: never
+  media-feature-range-notation: prefix
   no-descending-specificity: null
-  no-missing-end-of-source-newline: true
-  number-leading-zero: never
-  number-no-trailing-zeros: true
   property-no-unknown: true
   property-no-vendor-prefix: true
   rule-empty-line-before:
     - always-multi-line
     - except:
-      - first-nested
+        - first-nested
       ignore:
-      - after-comment
+        - after-comment
   scss/at-extend-no-missing-placeholder: true
   scss/at-function-pattern: "^[a-z]+([a-z0-9-]+[a-z0-9]+)?$"
   scss/at-import-no-partial-leading-underscore: true
   scss/at-import-partial-extension-blacklist:
-  - scss
+    - scss
   scss/at-mixin-pattern: "^[a-z]+([a-z0-9-]+[a-z0-9]+)?$"
   scss/at-rule-no-unknown: true
   scss/comment-no-empty: null
@@ -80,7 +63,6 @@ rules:
   selector-class-pattern:
     - "^[a-z0-9\\-]+$"
     - message: Selector should be written in lowercase with hyphens (selector-class-pattern)
-  selector-list-comma-newline-after: always
   selector-max-compound-selectors: 3
   selector-max-id: 0
   #selector-no-qualifying-type: true
@@ -88,5 +70,4 @@ rules:
   selector-pseudo-element-colon-notation: double
   selector-pseudo-element-no-unknown: true
   shorthand-property-no-redundant-values: true
-  string-quotes: single
   value-no-vendor-prefix: true
diff --git a/.test_durations b/.test_durations
index a299e867cf465859c062b0dca25ecf9601f4b7a8..6373c77837a6172e34e4f2e6470676fc98baab30 100644
--- a/.test_durations
+++ b/.test_durations
@@ -1,668 +1,669 @@
 {
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_activity_created": 0.13923389400588349,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_handle_transition_public_to_public": 0.0975325049366802,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_handle_transition_to_private_to_public": 0.0998588150832802,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_handle_transition_to_public_to_private": 0.0966299080173485,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_internal_transition_kwarg_for_invisible_transition": 0.10000397003022954,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_activity_created": 0.15622116602025926,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_handle_transition_public_to_public": 0.11254104098770767,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_handle_transition_to_private_to_public": 0.1516230000415817,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_handle_transition_to_public_to_private": 0.12896395893767476,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_internal_transition_kwarg_for_invisible_transition": 0.11071612499654293,
     "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_lead_not_saved_on_activity": 0.10346592601854354,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_lead_saved_on_activity": 0.09956661192700267,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_public_transition_kwargs": 0.09382621996337548,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_review_saved_on_activity": 0.10702213802142069,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_message_both": 0.20677164796506986,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_message_no_added": 0.12180721893673763,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_message_no_removed": 0.10071150300791487,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_with_and_without_role": 0.22371718601789325,
-    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_with_role": 0.10208105796482414,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_activity_created": 0.15843972202856094,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_activity_lead_change": 0.12387258501257747,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_activity_lead_change_from_none": 0.1167199540650472,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_email_staff_update_invoice": 0.17147235799347982,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_applicant_update_invoice": 0.1348883000900969,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_created": 0.16774546302622184,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_lead_change": 0.1346082619857043,
-    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_staff_update_invoice": 0.1402124089654535,
-    "hypha/apply/activity/tests/test_messaging.py::TestAnyMailBehaviour::test_email_new_submission": 0.1736614530091174,
-    "hypha/apply/activity/tests/test_messaging.py::TestAnyMailBehaviour::test_webhook_adds_reject_reason": 0.1919343660119921,
-    "hypha/apply/activity/tests/test_messaging.py::TestAnyMailBehaviour::test_webhook_updates_status": 0.47743448696564883,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_calls_method_if_avaliable": 0.15408125903923064,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_can_include_extra_kwargs": 0.44904455507639796,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_can_send_a_message": 0.10856661398429424,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_django_messages_used": 0.10395863995654508,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_doesnt_send_a_message_if_not_configured": 0.10312711703591049,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_that_kwargs_passed_to_send_message": 0.13073015300324187,
-    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_that_message_is_formatted": 0.10193982702912763,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_email_failed": 0.3662510940339416,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_email_new_submission": 0.13467378698987886,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_email_sent": 0.11793994694016874,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_no_email_own_comment": 0.1012696279794909,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_no_email_private_comment": 0.10801724501652643,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_reviewer_update_email": 0.14964556001359597,
-    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_reviewers_email": 0.16172805201495066,
-    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendApplication::test_event_created": 0.15458149096230045,
-    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendApplication::test_message_sent_to_adapter": 0.09942477301228791,
-    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendApplication::test_message_sent_to_all_adapter": 0.10089295502984896,
-    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendProject::test_event_created": 0.14339867100352421,
-    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendProject::test_message_sent_to_adapter": 0.12180897407233715,
-    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendProject::test_message_sent_to_all_adapter": 0.11576615792000666,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_400_bad_request": 73.359034072957,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_cant_send_with_no_room": 0.09554070397280157,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_cant_send_with_no_token": 0.09352795698214322,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_correct_payload": 0.09531988593516871,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_fund_custom_slack_channel": 0.10110829398036003,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_fund_multiple_custom_slack_channel": 0.10309995501302183,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_gets_blank_if_slack_not_set": 0.08976396097568795,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_gets_lead_if_slack_set": 0.11956502997782081,
-    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_message_with_good_response": 0.2098812719923444,
-    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_related_invoice": 0.30823155597317964,
-    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_related_report": 0.2383774450281635,
-    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_source_application": 0.09927816304843873,
-    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_source_project": 0.11868420196697116,
-    "hypha/apply/activity/tests/test_models.py::TestActivityOnlyIncludesCurrent::test_doesnt_include_non_current": 0.2449097569915466,
-    "hypha/apply/activity/tests/test_tasks.py::TestSendEmail::test_args_passed_to_django": 0.273071707051713,
-    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_reviewer_cant_list_screening_statuses": 76.00340654002503,
-    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_staff_can_list_screening_statuses": 0.09735163697041571,
-    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_staff_can_view_screening_statuses_detail": 0.07077038905117661,
-    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_user_cant_list_screening_statuses": 0.07559514098102227,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_add_screening_status": 0.3395533389993943,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_add_screening_status_without_setting_default": 0.1898199199931696,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_add_two_types_of_screening_status": 0.17611324496101588,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_change_default_screening_status": 0.23064006096683443,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_remove_not_set_screening_status": 0.1927025590557605,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_remove_submission_default_screening_status": 0.17138534499099478,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_change_default_screening_status": 0.2068267660215497,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_remove_submission_screening_status": 0.21688704297412187,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_reviewer_cant_list_screening_statuses": 0.16002461401512846,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_set_default_screening_status": 0.19036203803261742,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_staff_can_list_submission_screening_statuses": 0.20910874602850527,
-    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_user_cant_list_screening_statuses": 0.19140606198925525,
-    "hypha/apply/api/v1/tests/test_serializers.py::TestDeliverableSerializer::test_id_is_required": 0.006284377945121378,
-    "hypha/apply/api/v1/tests/test_serializers.py::TestDeliverableSerializer::test_quantity_not_required": 0.1669172280235216,
-    "hypha/apply/api/v1/tests/test_serializers.py::TestDeliverableSerializer::test_validate_id": 0.12631829106248915,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_lead_saved_on_activity": 0.10993020900059491,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_public_transition_kwargs": 0.10942875000182539,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_review_saved_on_activity": 0.14057566702831537,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_message_both": 0.23541791702155024,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_message_no_added": 0.1198202099185437,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_message_no_removed": 0.13272458396386355,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_with_and_without_role": 0.19799787388183177,
+    "hypha/apply/activity/tests/test_messaging.py::TestActivityAdapter::test_reviewers_with_role": 58.13467112497892,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_activity_created": 0.13486366695724428,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_activity_lead_change": 0.1162876250455156,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_activity_lead_change_from_none": 0.11584366695024073,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_email_staff_update_invoice": 0.21926733397413045,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_applicant_update_invoice": 0.13566949998494238,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_created": 54.16529204195831,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_lead_change": 0.1296427499037236,
+    "hypha/apply/activity/tests/test_messaging.py::TestAdaptersForProject::test_slack_staff_update_invoice": 0.1271418749820441,
+    "hypha/apply/activity/tests/test_messaging.py::TestAnyMailBehaviour::test_email_new_submission": 0.1355100410291925,
+    "hypha/apply/activity/tests/test_messaging.py::TestAnyMailBehaviour::test_webhook_adds_reject_reason": 0.12718500010669231,
+    "hypha/apply/activity/tests/test_messaging.py::TestAnyMailBehaviour::test_webhook_updates_status": 0.1375391249312088,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_calls_method_if_avaliable": 53.299532873905264,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_can_include_extra_kwargs": 0.11929216794669628,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_can_send_a_message": 0.0824252919992432,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_django_messages_used": 0.07164995896164328,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_doesnt_send_a_message_if_not_configured": 0.09355312504339963,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_that_kwargs_passed_to_send_message": 0.20675625011790544,
+    "hypha/apply/activity/tests/test_messaging.py::TestBaseAdapter::test_that_message_is_formatted": 0.15560216596350074,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_email_failed": 0.39270045806188136,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_email_new_submission": 0.09615187509916723,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_email_sent": 0.11342545901425183,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_no_email_own_comment": 0.11332941707223654,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_no_email_private_comment": 0.11486445926129818,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_reviewer_update_email": 0.15956100111361593,
+    "hypha/apply/activity/tests/test_messaging.py::TestEmailAdapter::test_reviewers_email": 0.15471450006589293,
+    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendApplication::test_event_created": 0.2171912919729948,
+    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendApplication::test_message_sent_to_adapter": 0.1030887080123648,
+    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendApplication::test_message_sent_to_all_adapter": 0.09288750018458813,
+    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendProject::test_event_created": 0.1586895000655204,
+    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendProject::test_message_sent_to_adapter": 0.11586466699372977,
+    "hypha/apply/activity/tests/test_messaging.py::TestMessageBackendProject::test_message_sent_to_all_adapter": 0.11438579205423594,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_400_bad_request": 0.13000170898158103,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_cant_send_with_no_room": 0.08840891683939844,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_cant_send_with_no_token": 0.08516858296934515,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_correct_payload": 0.08612241595983505,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_fund_custom_slack_channel": 0.13703129114583135,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_fund_multiple_custom_slack_channel": 0.17032066697720438,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_gets_blank_if_slack_not_set": 0.08843441598583013,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_gets_lead_if_slack_set": 0.06989941594656557,
+    "hypha/apply/activity/tests/test_messaging.py::TestSlackAdapter::test_message_with_good_response": 0.21480724995490164,
+    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_related_invoice": 0.25832999881822616,
+    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_related_report": 0.25690624897833914,
+    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_source_application": 0.11774445907212794,
+    "hypha/apply/activity/tests/test_models.py::TestActivityModel::test_can_save_source_project": 0.12374466715846211,
+    "hypha/apply/activity/tests/test_models.py::TestActivityOnlyIncludesCurrent::test_doesnt_include_non_current": 0.27184329100418836,
+    "hypha/apply/activity/tests/test_tasks.py::TestSendEmail::test_args_passed_to_django": 0.3205880840541795,
+    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_reviewer_cant_list_screening_statuses": 0.07995720813050866,
+    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_staff_can_list_screening_statuses": 0.04845495906192809,
+    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_staff_can_view_screening_statuses_detail": 0.03481295891106129,
+    "hypha/apply/api/v1/screening/tests/test_views.py::ScreeningStatusViewSetTests::test_user_cant_list_screening_statuses": 0.04167466703802347,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_add_screening_status": 0.2516370009398088,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_add_screening_status_without_setting_default": 0.14604949986096472,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_add_two_types_of_screening_status": 0.14344608294777572,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_change_default_screening_status": 0.1464127510553226,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_remove_not_set_screening_status": 0.18066850095055997,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_cant_remove_submission_default_screening_status": 0.13743912591598928,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_change_default_screening_status": 0.15612299996428192,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_remove_submission_screening_status": 0.15497579204384238,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_reviewer_cant_list_screening_statuses": 0.12685020896606147,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_set_default_screening_status": 0.14016562490724027,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_staff_can_list_submission_screening_statuses": 0.32360654103104025,
+    "hypha/apply/api/v1/screening/tests/test_views.py::SubmissionScreeningStatusViewSetTests::test_user_cant_list_screening_statuses": 0.1403301249956712,
+    "hypha/apply/api/v1/tests/test_serializers.py::TestDeliverableSerializer::test_id_is_required": 0.011137875029817224,
+    "hypha/apply/api/v1/tests/test_serializers.py::TestDeliverableSerializer::test_quantity_not_required": 0.1423097929218784,
+    "hypha/apply/api/v1/tests/test_serializers.py::TestDeliverableSerializer::test_validate_id": 0.14980237488634884,
     "hypha/apply/api/v1/tests/test_serializers.py::TestInvoiceRequiredChecksSerializer::test_valid_checks_link_required": 0.11694603395881131,
     "hypha/apply/api/v1/tests/test_serializers.py::TestInvoiceRequiredChecksSerializer::test_valid_checks_required": 0.052493724040687084,
     "hypha/apply/api/v1/tests/test_serializers.py::TestInvoiceRequiredChecksSerializer::test_validate_valid_checks_and_link": 0.17325492500094697,
-    "hypha/apply/api/v1/tests/test_serializers.py::TestReviewSummarySerializer::test_handles_negative_reviews": 0.2182184910052456,
-    "hypha/apply/api/v1/tests/test_serializers.py::TestReviewSummarySerializer::test_handles_no_reviews": 0.104090433975216,
+    "hypha/apply/api/v1/tests/test_serializers.py::TestReviewSummarySerializer::test_handles_negative_reviews": 53.39089049899485,
+    "hypha/apply/api/v1/tests/test_serializers.py::TestReviewSummarySerializer::test_handles_no_reviews": 0.08726566703990102,
     "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_can_change_visibility": 0.2947400030097924,
-    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_cant_edit_if_not_author": 0.16040760598843917,
-    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_does_nothing_if_same_message_and_visibility": 0.20674867002526298,
-    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_edit_updates_correctly": 0.2107265890808776,
-    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_incorrect_id_denied": 0.2905755069805309,
-    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_out_of_order_does_nothing": 0.21588402800261974,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_applicant_cant_add_deliverables": 0.25553907500579953,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_applicant_cant_remove_deliverables": 0.22109770408133045,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_cant_add_or_remove_wihtout_login": 0.18353169306647032,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverable_already_exists_in_invoice": 0.2015667770174332,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverable_available_gte_quantity": 0.19308103097137064,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverable_dont_exists_in_project_deliverables": 0.31223782495362684,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverables_cant_removed_after_finance2_approval": 73.66194990597432,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance1_can_add_deliverables": 0.19034464604919776,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance1_can_remove_deliverables": 0.18801149795763195,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance1_cant_remove_deliverables_after_finance1_approval": 0.18383844097843394,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance2_can_add_deliverables": 0.19601870502810925,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance2_can_remove_deliverables": 0.191477588028647,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_staff_can_add_deliverables": 0.21423337300075218,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_staff_can_remove_deliverables": 0.23060162598267198,
-    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_staff_cant_remove_deliverables_after_staff_approval": 0.18530093494337052,
+    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_cant_edit_if_not_author": 0.47102075000293553,
+    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_does_nothing_if_same_message_and_visibility": 0.1584784589940682,
+    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_edit_updates_correctly": 0.1365128338802606,
+    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_incorrect_id_denied": 0.03154566593002528,
+    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_out_of_order_does_nothing": 0.1728130830451846,
+    "hypha/apply/api/v1/tests/test_views.py::TestCommentEdit::test_staff_can_change_visibility": 0.1528444179566577,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_applicant_cant_add_deliverables": 0.21287220797967166,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_applicant_cant_remove_deliverables": 0.20939670910593122,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_cant_add_or_remove_wihtout_login": 0.1725520839681849,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverable_already_exists_in_invoice": 0.16973474889528006,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverable_available_gte_quantity": 0.17294012499041855,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverable_dont_exists_in_project_deliverables": 0.3154549158643931,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_deliverables_cant_removed_after_finance2_approval": 0.22893149894662201,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance1_can_add_deliverables": 0.16282691701781005,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance1_can_remove_deliverables": 0.18649645801633596,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance1_cant_remove_deliverables_after_finance1_approval": 0.16996737418230623,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance2_can_add_deliverables": 0.1587066249921918,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_finance2_can_remove_deliverables": 0.19433812622446567,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_staff_can_add_deliverables": 0.1566219999222085,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_staff_can_remove_deliverables": 0.14834729093126953,
+    "hypha/apply/api/v1/tests/test_views.py::TestInvoiceDeliverableViewset::test_staff_cant_remove_deliverables_after_staff_approval": 52.86434658290818,
     "hypha/apply/api/v1/tests/test_views.py::TestInvoiceRequiredChecksViewSet::test_applicant_cant_get_set_required_valid_checks": 0.6144257669802755,
     "hypha/apply/api/v1/tests/test_views.py::TestInvoiceRequiredChecksViewSet::test_cant_get_set_required_checks_without_login": 0.30361390503821895,
     "hypha/apply/api/v1/tests/test_views.py::TestInvoiceRequiredChecksViewSet::test_finance1_can_get_required_valid_checks": 0.32072118495125324,
     "hypha/apply/api/v1/tests/test_views.py::TestInvoiceRequiredChecksViewSet::test_finance1_can_set_required_valid_checks": 0.3616774979745969,
     "hypha/apply/api/v1/tests/test_views.py::TestInvoiceRequiredChecksViewSet::test_finance2_cant_get_set_required_valid_checks": 0.2886283140978776,
     "hypha/apply/api/v1/tests/test_views.py::TestInvoiceRequiredChecksViewSet::test_staff_cant_get_set_required_valid_checks": 0.33830336399842054,
-    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_can_render_if_no_response": 0.05031254002824426,
-    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_field_and_help_default": 0.004318775958381593,
-    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_multi_select_disabled": 0.004234274907503277,
-    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_multi_select_enabled": 0.0046823740703985095,
-    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_options_included_in_choices": 0.006200317991897464,
-    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_supplied_field_and_help": 0.0037205999833531678,
-    "hypha/apply/dashboard/tests/test_views.py::TestAdminDashboard::test_does_show_admin_button_to_admins": 0.5897309659630992,
-    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_can_access_dashboard_with_active": 0.3371410670224577,
-    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_can_have_draft_titles_on_dashboard": 0.8190354949911125,
-    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_can_not_access_other_users_active": 0.272322044998873,
-    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_gets_invite_if_invited_to_proposal": 0.32599640905391425,
-    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_no_edit_if_in_review": 0.30759440100518987,
-    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_no_invite_if_can_edit": 0.25658156105782837,
-    "hypha/apply/dashboard/tests/test_views.py::TestReviewerDashboard::test_no_submissions_waiting_for_review": 0.43909895996330306,
-    "hypha/apply/dashboard/tests/test_views.py::TestReviewerDashboard::test_submission_assigned_but_not_in_external_review_status": 73.86240827501751,
-    "hypha/apply/dashboard/tests/test_views.py::TestReviewerDashboard::test_waiting_for_review_with_count": 0.3970066210604273,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_active_invoices_with_invoices_in_correct_state": 0.6648346379515715,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_active_invoices_with_no_project": 0.2973308189539239,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_cannot_see_submission_in_determination_when_not_lead": 0.40256742003839463,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_doesnt_show_active_invoices_when_not_mine": 0.4466762409429066,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_doesnt_show_active_invoices_with_none": 0.45433463202789426,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_doest_show_active_invoices_when_paid_or_declined": 0.451468849030789,
+    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_can_render_if_no_response": 0.06368333392310888,
+    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_field_and_help_default": 0.011962668155319989,
+    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_multi_select_disabled": 0.003674666048027575,
+    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_multi_select_enabled": 0.004824416828341782,
+    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_options_included_in_choices": 0.009934498928487301,
+    "hypha/apply/categories/tests/test_blocks.py::TestCategoryQuestionBlock::test_supplied_field_and_help": 0.005348333972506225,
+    "hypha/apply/dashboard/tests/test_views.py::TestAdminDashboard::test_does_show_admin_button_to_admins": 0.3197833760641515,
+    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_can_access_dashboard_with_active": 0.28440266591496766,
+    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_can_have_draft_titles_on_dashboard": 0.30938212398905307,
+    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_can_not_access_other_users_active": 0.17553641612175852,
+    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_gets_invite_if_invited_to_proposal": 0.3157209169585258,
+    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_no_edit_if_in_review": 0.23260362388100475,
+    "hypha/apply/dashboard/tests/test_views.py::TestApplicantDashboard::test_no_invite_if_can_edit": 0.17902404197957367,
+    "hypha/apply/dashboard/tests/test_views.py::TestReviewerDashboard::test_no_submissions_waiting_for_review": 0.4732738329330459,
+    "hypha/apply/dashboard/tests/test_views.py::TestReviewerDashboard::test_submission_assigned_but_not_in_external_review_status": 53.82880870893132,
+    "hypha/apply/dashboard/tests/test_views.py::TestReviewerDashboard::test_waiting_for_review_with_count": 0.444339832989499,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_active_invoices_with_invoices_in_correct_state": 0.5380933738779277,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_active_invoices_with_no_project": 0.2517163750017062,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_cannot_see_submission_in_determination_when_not_lead": 0.5979210830992088,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_doesnt_show_active_invoices_when_not_mine": 0.3928689588792622,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_doesnt_show_active_invoices_with_none": 0.40044466592371464,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_doest_show_active_invoices_when_paid_or_declined": 0.39634229301009327,
     "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_staff_can_see_projects_awaiting_review_stats_or_table": 65.42799123498844,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_unassigned_staff_cant_see_projects_awaiting_review_stats_or_table": 0.6706269250134937,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_waiting_for_review_after_agreement_is_empty": 0.42851678596343845,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_waiting_for_review_with_count": 0.4247126739937812,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboardWithWagtailAdminAccess::test_does_show_admin_button_to_staff_with_wagtail_admin_access": 0.40617170702898875,
-    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboardWithoutWagtailAdminAccess::test_doesnt_show_admin_button_to_staff_without_wagtail_admin_access": 0.3622747980407439,
-    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_determination_block_required": 0.3078730760025792,
-    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_field_label_required": 0.1850599959725514,
-    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_form_creation": 0.15655563003383577,
-    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_message_block_required": 0.22737318312283605,
-    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_name_field_required": 0.46364108996931463,
-    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_send_notice_block_required": 0.20745449408423156,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_can_submit_batch_determination": 1.3375536139355972,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_can_submit_batch_determination_more_info_comment": 0.9521197089925408,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_cant_access_without_action": 0.47021572798257694,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_cant_access_without_submissions": 0.32315934204962105,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_message_created_if_determination_exists": 0.6241106340894476,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_sets_next_on_redirect": 75.61075629590778,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_success_if_no_next": 0.017871499992907047,
-    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_success_redirects_if_exists": 0.017641839978750795,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_access_form_if_lead": 0.39879515004577115,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_edit_draft_determination": 0.5159863700973801,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_edit_draft_determination_if_not_lead": 0.5503705519950017,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_edit_draft_determination_if_not_lead_with_projects": 0.8592716490384191,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_progress_stage_via_determination": 0.62373936700169,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_cant_access_wrong_status": 0.5038939819787629,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_cant_edit_submitted_more_info": 0.2733461959869601,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_cant_resubmit_determination": 0.49746408907230943,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_disabling_project_auto_creation_stops_projects_being_created": 0.784882516018115,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_disabling_projects_ignores_auto_creation_setting": 0.507500384002924,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_first_stage_accepted_determination_does_not_create_project": 0.6172532690106891,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_first_stage_rejected_determination_does_not_create_project": 0.5511173770064488,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_second_stage_accepted_determination_creates_project": 0.5456376529764384,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_second_stage_rejected_determination_does_not_create_project": 0.9095215960987844,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_sends_message_if_requires_more_info": 0.5937024049926549,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_single_stage_accepted_determination_creates_project": 0.5429082569899037,
-    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_single_stage_rejected_determination_does_not_create_project": 0.5347569308942184,
-    "hypha/apply/determinations/tests/test_views.py::EditDeterminationFormTestCase::test_can_edit_determination": 0.8770585509482771,
-    "hypha/apply/determinations/tests/test_views.py::StaffDeterminationsTestCase::test_can_access_determination": 0.30806132906582206,
-    "hypha/apply/determinations/tests/test_views.py::StaffDeterminationsTestCase::test_lead_can_access_determination": 0.22472324495902285,
-    "hypha/apply/determinations/tests/test_views.py::UserDeterminationFormTestCase::test_cant_access_form": 0.27854858309729025,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_active": 0.1674713700194843,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_annotated": 0.05541933194035664,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_by_lead": 0.1655380570446141,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_can_get": 0.05682023294502869,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_closed": 0.04879367398098111,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_inactive": 0.1574999470030889,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_new": 0.04458757501561195,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_no_submissions_not_either": 0.14132891996996477,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_open": 0.05893708695657551,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_with_determined": 0.13089227298041806,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_with_progress": 0.09277090296382084,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_active": 0.1616214921232313,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_annotated": 0.0850752400001511,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_by_lead": 0.17077531898394227,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_can_get": 0.08966594800585881,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_closed": 0.08225838502403349,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_inactive": 0.11628020490752533,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_new": 0.07692524697631598,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_no_submissions_not_either": 0.1289918949478306,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_open": 0.09963184100342914,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_with_determined": 0.1594926849938929,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_with_progress": 0.18067635298939422,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestRoundsAndLabsManager::test_cant_get_fund": 0.05565907893469557,
-    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestRoundsAndLabsManager::test_doesnt_confuse_lab_and_round": 0.3358999819611199,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_can_save_multiple_forms_stage_two": 0.06150826392695308,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_can_save_two_forms": 0.04347676003817469,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_does_validates_without_project_approval_form": 0.023983852937817574,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_multiple_external_review_form": 0.03427041001850739,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_multiple_project_approval_form": 0.0739642470725812,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_no_form": 0.028050069056916982,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_two_first_stage_forms_in_two_stage": 0.06427672901190817,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_two_forms_one_stage": 0.04223897896008566,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validate_external_review_form": 0.033674996986519545,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validate_project_approval_form": 0.031969275965821,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validates_with_one_form_one_stage": 0.029649867035914212,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validates_with_one_form_one_stage_with_deleted": 0.039087735989596695,
-    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validates_without_external_review_form": 0.031021350994706154,
-    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_email_block_required": 0.3177242139354348,
-    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_field_label_required": 0.32222847000230104,
-    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_form_creation": 0.15689565311186016,
-    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_full_name_block_required": 0.31594076001783833,
-    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_name_field_required": 0.3348185429931618,
-    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_title_block_required": 0.26576283702161163,
-    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_fund": 0.7075700559653342,
-    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_fund_with_external_review_form": 0.4123875970253721,
-    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_multi_phase_fund": 0.4841945939697325,
-    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_multi_phase_fund_reuse_forms": 0.5185151669429615,
-    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_multiple_forms_second_stage_in_fund": 0.4765631490154192,
-    "hypha/apply/funds/tests/test_admin_views.py::TestRoundIndexView::test_application_links": 0.5358622559579089,
-    "hypha/apply/funds/tests/test_admin_views.py::TestRoundIndexView::test_number_of_rounds": 0.22723846696317196,
-    "hypha/apply/funds/tests/test_admin_views.py::TestRoundIndexView::test_review_form_links": 0.2316912889946252,
-    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_existing_reviews": 0.18783390300814062,
-    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_init_and_render": 0.2363528010318987,
-    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_reviewers_swap": 0.1653718570014462,
-    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_roles_swap": 0.17087780305882916,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_draft_data": 0.12601011100923643,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_ordered_qs": 0.1226060469634831,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_required_block_names": 0.09380540100391954,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_reverse_ordered_qs": 0.12373771896818653,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_choices_added_for_search": 0.09642319509293884,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_correct_file_path_generated": 0.09577085101045668,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_create_revision_on_create": 0.09297496598446742,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_create_revision_on_data_change": 0.10251812601927668,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_dont_create_revision_on_data_same": 0.09526049596024677,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_draft_updated": 0.11158332804916427,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_file_gets_uploaded": 0.19751048303442076,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_in_final_stage": 0.27812278299825266,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_is_draft_property": 0.09416352293919772,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_number_not_in_search": 0.11505354900145903,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_richtext_in_char_is_removed_for_search": 0.10506638704100624,
-    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_richtext_is_removed_for_search": 0.09468674095114693,
-    "hypha/apply/funds/tests/test_models.py::TestAssignedReviewersQuerySet::test_reviewed": 0.1417952259653248,
-    "hypha/apply/funds/tests/test_models.py::TestAssignedReviewersQuerySet::test_reviewed_with_review_order": 0.11841691099107265,
-    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_assigned_but_not_reviewed": 0.16151051205815747,
-    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_disagree_review_is_maybe": 0.1668748459778726,
-    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_dont_double_count_review_and_opinion": 0.1476308029377833,
-    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_opinionated_slash_confused_reviewer": 0.15479905396932736,
-    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_review_outcome": 0.13463830400723964,
-    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_submissions_dont_conflict": 0.30454243696294725,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_associated_if_another_user_exists": 0.42179203499108553,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_associated_if_logged_in": 0.49502495396882296,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_associated_if_not_new": 0.3309707139269449,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_can_submit_if_blank_user_data_even_if_logged_in": 0.17612785595702007,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_can_submit_if_new": 0.21983742795418948,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_doesnt_mess_with_name": 0.4838579149800353,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_email_sent_to_user_on_submission_fund": 0.2629992300644517,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_email_sent_to_user_on_submission_lab": 0.2243690769537352,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_valid_email": 0.416051521897316,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_draft": 0.2088880289811641,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_draft_lab": 0.19549307599663734,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_status_assigned": 0.2223707798984833,
-    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_status_assigned_lab": 0.23182316101156175,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_can_access_workflow_class": 0.04948380799032748,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_can_not_be_open_with_draft_round": 0.09471549600129947,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_closed_round": 0.0815400390420109,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_multiple_open_rounds": 0.11590816697571427,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_no_open_rounds": 0.03183921205345541,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_no_round_exists": 0.030792948906309903,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_normal_round": 0.07587255601538345,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_open_ended_round": 0.07605791406240314,
-    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_round_not_open": 0.08041038695955649,
-    "hypha/apply/funds/tests/test_models.py::TestReminderModel::test_can_save_reminder": 0.11780550901312381,
-    "hypha/apply/funds/tests/test_models.py::TestReminderModel::test_check_default_action": 0.10112939798273146,
-    "hypha/apply/funds/tests/test_models.py::TestReminderModel::test_reminder_action_message": 0.09844532900024205,
-    "hypha/apply/funds/tests/test_models.py::TestRequestForPartners::test_form_when_round": 0.4119444440002553,
-    "hypha/apply/funds/tests/test_models.py::TestRequestForPartners::test_message_when_no_round": 0.08986245404230431,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_create_without_end_date": 0.0879780559334904,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_not_create_with_other_open_end_date": 0.11226700397673994,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_not_overlap_clean": 0.07475288998102769,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_not_overlap_with_normal_round": 0.08413261402165517,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_end_before_start": 0.039544910949189216,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_end_overlaps": 0.0826997910044156,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_inside_overlaps": 0.0938534039305523,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_normal_start_end_doesnt_error": 0.07112716900883242,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_other_fund_not_impacting": 0.13710327295120806,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_start_overlaps": 0.08635661902371794,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelWorkflowAndForms::test_can_change_round_form_not_fund": 0.12151348497718573,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelWorkflowAndForms::test_forms_are_copied_to_new_rounds": 0.07003306201659143,
-    "hypha/apply/funds/tests/test_models.py::TestRoundModelWorkflowAndForms::test_workflow_is_copied_to_new_rounds": 0.06698458699975163,
-    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_file_private_url_included": 0.19421109702670947,
-    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_named_blocks_dont_break_if_no_response": 0.10460103006334975,
-    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_named_blocks_not_included_in_answers": 0.1245025719399564,
-    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_normal_answers_included_in_answers": 0.11988441296853125,
-    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_paragraph_not_rendered_in_answers": 0.12362005800241604,
-    "hypha/apply/funds/tests/test_tags.py::TestTemplateTags::test_markdown_tags": 0.00955552892992273,
-    "hypha/apply/funds/tests/test_tags.py::TestTemplateTags::test_submission_tags": 0.14581840299069881,
-    "hypha/apply/funds/tests/test_views.py::TestAnonSubmissionFileView::test_anonymous_can_not_access": 0.5664488719776273,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_edit_own_submission": 0.6222988070221618,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_see_view_determination_primary_action": 0.9720524610602297,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_submit_submission": 0.5721138449735008,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_view_own_submission": 0.4517067229608074,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_edit_other_submission": 0.4414413139456883,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_edit_submission_incorrect_state": 0.4403954810113646,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_screen_submission": 0.7147663669893518,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_add_determination_primary_action": 1.1288957839715295,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_assign_reviewers_primary_action": 0.5962868969654664,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_assign_reviewers_secondary_action": 0.558321199961938,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_create_review_primary_action": 1.0343759500538,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_screening_status_block": 0.8808337548980489,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_view_determination_primary_action": 1.3496392180095427,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_view_others_submission": 0.469733365054708,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_get_congratulations_draft_proposal": 0.5076785799465142,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_get_edit_link_when_editable": 0.6691780410474166,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_gets_draft_on_edit_submission": 0.8647475370089523,
-    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_sees_latest_draft_if_it_exists": 0.7442232560133561,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_applicant_cannot_access_reviewer_leaderboard": 0.1003944170079194,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_community_reviewer_cannot_access_reviewer_leaderboard": 0.08903012302471325,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_partner_cannot_access_reviewer_leaderboard": 0.06921031000092626,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_reviewer_cannot_access_leader_board": 0.07106266601476818,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_staff_can_access_leaderboard": 0.2459299500915222,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_access_any_submission": 0.4603489020373672,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_accepted_submission": 74.75607905205106,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_assigned_submission": 0.6979169220430776,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_external_review_or_higher_submission": 0.45072474994231015,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_reviewed_submission": 0.3593936349498108,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_see_create_review_primary_action": 0.8126491119619459,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_see_view_determination_primary_action": 0.924912168062292,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_access_dismissed_submission": 0.45411370805231854,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_add_determination_primary_action": 1.047932783025317,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_assign_reviewers_primary_action": 0.7471717370208353,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_assign_reviewers_secondary_action": 0.4298740760423243,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_create_review_primary_action": 1.401749513053801,
-    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_view_determination_primary_action": 1.1026342930272222,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_can_add_external_reviewer_and_review_remains": 1.0853230410139076,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_can_be_made_role_and_not_duplciated": 1.0574015929596499,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_can_remove_external_reviewer_and_review_remains": 0.9803015639772639,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_add_reviewers_for_proposal": 1.0181621729861945,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_add_staff_single": 0.7236802639090456,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_change_role_reviewer_and_review_remains": 0.8061009539524093,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_change_staff_single": 0.8951192779932171,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_remove_reviewers_for_proposal": 1.1267230599769391,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_remove_some_reviewers_for_proposal": 0.748038791003637,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_cant_add_reviewers_single": 0.6667830590158701,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_staff_cant_add_reviewers_proposal": 0.7294229480321519,
-    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_staff_cant_remove_reviewers_proposal": 1.0137556880363263,
-    "hypha/apply/funds/tests/test_views.py::TestRevisionCompare::test_renders_with_all_the_diffs": 0.4573665980133228,
-    "hypha/apply/funds/tests/test_views.py::TestRevisionList::test_get_in_correct_order": 0.6342802709550597,
-    "hypha/apply/funds/tests/test_views.py::TestRevisionList::test_list_doesnt_include_draft": 0.40713704301742837,
-    "hypha/apply/funds/tests/test_views.py::TestRevisionsView::test_create_revisions_on_submit": 0.5120389680378139,
-    "hypha/apply/funds/tests/test_views.py::TestRevisionsView::test_dont_update_live_revision_on_save": 0.8917146279709414,
-    "hypha/apply/funds/tests/test_views.py::TestRevisionsView::test_existing_draft_edit_and_submit": 0.7583810089272447,
-    "hypha/apply/funds/tests/test_views.py::TestStaffReminderDeleteView::test_confirm_message": 0.5777382009546272,
-    "hypha/apply/funds/tests/test_views.py::TestStaffReminderDeleteView::test_has_access": 0.2544263479649089,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_cant_post_to_sealed": 0.41021032095886767,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_non_sealed_redirected_away": 0.8748834480065852,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_non_sealed_unaffected": 0.5030879330006428,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_redirected_to_sealed": 0.2863870389992371,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionFileView::test_staff_can_access": 0.4823894629953429,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_applicant_can_see_application_draft_status": 0.25109164899913594,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_access_edit": 0.42760937596904114,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_access_edit_button": 0.5179498340585269,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_create_project": 0.7136499820044264,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_edit_submission": 0.6777573239523917,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_progress_phase": 0.66208744404139,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_screen_submission": 0.5655663840007037,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_add_determination_primary_action": 1.418010512017645,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_assign_reviewers_primary_action": 2.4105935640400276,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_assign_reviewers_secondary_action": 2.1316777109750547,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_create_review_primary_action": 2.5699805530020967,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_view_determination_primary_action": 1.7203736770898104,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_view_a_lab_submission": 0.6835622909711674,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_view_a_submission": 0.5286808590171859,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_view_submission_screening_block": 0.5746476140338928,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_access_edit_button_when_applicant_editing": 1.0213467279681936,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_progress_stage_if_not_lead": 0.4784257290302776,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_add_determination_primary_action": 2.317082249035593,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_application_draft_status": 0.26289771596202627,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_assign_reviewers_primary_action": 1.1747224769787863,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_create_review_primary_action": 4.077719526016153,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_view_determination_primary_action": 1.830305264040362,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_view_submission_screening_block": 0.46743221493670717,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_new_form_after_progress": 0.2560368809499778,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_not_included_fields_render": 0.6730230530374683,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_not_redirected_if_determination_submitted": 0.6666520969592966,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_not_redirected_if_wrong_determination_selected": 0.6776846970315091,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_previous_and_next_appears_on_page": 1.2436786209582351,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_redirected_to_determination": 0.4277458779979497,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_screen_application_primary_action_is_displayed": 0.5441610289853998,
-    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_screen_application_primary_action_is_not_displayed": 0.5674408100312576,
-    "hypha/apply/funds/tests/test_views.py::TestSubmissionDetailSimplifiedView::test_project_required": 0.14364699996076524,
-    "hypha/apply/funds/tests/test_views.py::TestSubmissionDetailSimplifiedView::test_staff_only": 0.1617248950060457,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_can_post_to_sealed": 0.6643490059650503,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_can_view_multiple_sealed": 1.278873339004349,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_not_asked_again": 0.8946244819671847,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_peeking_is_logged": 0.9443636670475826,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_redirected_to_sealed": 1.00042172789108,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSubmissionView::test_can_screen_applications_in_final_status": 0.7619499649736099,
-    "hypha/apply/funds/tests/test_views.py::TestSuperUserSubmissionView::test_can_screen_submission": 0.6703571169637144,
-    "hypha/apply/funds/tests/test_views.py::TestUpdateReviewersMixin::test_submission_transition_all_reviewer_roles_not_assigned": 0.696338331035804,
-    "hypha/apply/funds/tests/test_views.py::TestUpdateReviewersMixin::test_submission_transition_to_internal_review": 0.6674552069744095,
-    "hypha/apply/funds/tests/test_views.py::TestUpdateReviewersMixin::test_submission_transition_to_proposal_internal_review": 1.0422252279822715,
-    "hypha/apply/funds/tests/test_views.py::TestUserReminderDeleteView::test_doesnt_has_access": 0.27635302499402314,
-    "hypha/apply/funds/tests/test_views.py::TestUserSubmissionFileView::test_owner_can_access": 0.44533802894875407,
-    "hypha/apply/funds/tests/test_views.py::TestUserSubmissionFileView::test_user_can_not_access": 0.21086187596665695,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::ApplicantTestCase::test_cant_access_page_to_page": 0.12128791690338403,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::ReivewersTestCase::test_cant_post_to_page": 0.2307637359481305,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_application": 1.2592542069614865,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_different_states": 0.7347079719766043,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_multiple_applications": 1.0055885769543238,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_one_in_mixed_state": 0.7645907880505547,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_cant_progress_in_incorrect_state": 0.900198650022503,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_determine_redirects": 0.37326250603655353,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_messenger_not_called_with_failed": 0.5597112919786014,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_messenger_with_submission_in_review": 0.5668064329656772,
-    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_mixed_determine_notifies": 0.5168615919537842,
-    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_can_assign_role_reviewers": 1.3203748009982519,
-    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_can_reassign_from_other_role_reviewers": 1.015099682030268,
-    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_can_reassign_role_reviewers": 1.0279144639498554,
-    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_doesnt_remove_if_already_reviewed": 1.0562934660702012,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantRoundPage::test_cant_access_page": 0.268681631074287,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_lab_page": 0.23950354900443926,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_non_existing_page": 0.07580045604845509,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_normal_page": 0.17842986894538626,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_round_page": 0.176218110951595,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestReviewerAllRoundPage::test_cant_access_page": 0.41023279301589355,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffRoundPage::test_can_access_page": 0.3778348019695841,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_can_access_lab_page": 0.5472161570214666,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_can_access_round_page": 0.3317468829918653,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_cant_access_non_existing_page": 0.1674200189881958,
-    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_cant_access_normal_page": 0.29468706401530653,
-    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_already_notified": 0.19412987399846315,
-    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_project_complete": 0.1266413470148109,
-    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_project_not_in_progress": 0.11785022501135245,
-    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_report_due_in_7_days_already_submitted": 0.1442721290513873,
-    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_notify_report_due_in_7_days": 0.17882532090879977,
-    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_no_items": 0.0071574049652554095,
-    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_one_level_of_items": 0.0017976000672206283,
-    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_three_levels_of_items": 0.0014228360378183424,
-    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_two_levels_of_items": 0.0018187930108979344,
-    "hypha/apply/projects/tests/test_files.py::TestGetFiles::test_get_files": 0.13798507500905544,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_approved_by_finance1_status": 0.15466479101451114,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_approved_by_finance1_status_with_extended_flow": 0.22333532496122643,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_approved_by_staff_status": 0.14579194399993867,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_changes_requested_by_finance1_status": 0.14129347307607532,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_changes_requested_by_finance2_status": 0.18195737397763878,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_changes_requested_by_staff_status": 0.1314040920115076,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_resubmitted_status": 0.15750353003386408,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_submitted_status": 0.18912376003572717,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_approved_by_finance1_status": 0.141975003934931,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_approved_by_staff_status": 0.1329905889579095,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_changes_requested_by_finance1_status": 0.17709083802765235,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_changes_requested_by_finance2_status": 0.21831793704768643,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_changes_requested_by_staff_status": 0.1332026370218955,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_resubmitted_status": 0.13602168200304732,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_submitted_status": 0.18857937899883837,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_approved_by_finance1_status": 0.15989825798897073,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_approved_by_staff_status": 0.14130354102235287,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_changes_requested_by_finance1_status": 0.14315992302726954,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_changes_requested_by_finance2_status": 0.14447016693884507,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_changes_requested_by_staff_status": 0.13189518096623942,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_resubmitted_status": 0.13053779705660418,
-    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_submitted_status": 0.14577711903257295,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_unassigned_staff_cant_see_projects_awaiting_review_stats_or_table": 0.3104223320260644,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_waiting_for_review_after_agreement_is_empty": 0.3971507509704679,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboard::test_waiting_for_review_with_count": 0.43167454190552235,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboardWithWagtailAdminAccess::test_does_show_admin_button_to_staff_with_wagtail_admin_access": 0.29581050004344434,
+    "hypha/apply/dashboard/tests/test_views.py::TestStaffDashboardWithoutWagtailAdminAccess::test_doesnt_show_admin_button_to_staff_without_wagtail_admin_access": 0.5396512089064345,
+    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_determination_block_required": 0.20600395905785263,
+    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_field_label_required": 0.11256412602961063,
+    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_form_creation": 0.10376991610974073,
+    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_message_block_required": 0.12822470907121897,
+    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_name_field_required": 0.2929227912100032,
+    "hypha/apply/determinations/tests/test_admin_views.py::TestCreateDeterminationFormView::test_send_notice_block_required": 0.11331733397673815,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_can_submit_batch_determination": 1.1239819169277325,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_can_submit_batch_determination_more_info_comment": 0.8998360839905217,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_cant_access_without_action": 0.29788879211992025,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_cant_access_without_submissions": 0.15192141698207706,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_message_created_if_determination_exists": 0.7004209590377286,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_sets_next_on_redirect": 0.0201142089208588,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_success_if_no_next": 0.028741458081640303,
+    "hypha/apply/determinations/tests/test_views.py::BatchDeterminationTestCase::test_success_redirects_if_exists": 0.0167721250327304,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_access_form_if_lead": 0.2795411248225719,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_edit_draft_determination": 0.39732999983243644,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_edit_draft_determination_if_not_lead": 0.36917637509759516,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_edit_draft_determination_if_not_lead_with_projects": 0.574998957104981,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_can_progress_stage_via_determination": 0.4457102088490501,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_cant_access_wrong_status": 0.3057255418971181,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_cant_edit_submitted_more_info": 0.21533391706179827,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_cant_resubmit_determination": 0.34880262485239655,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_disabling_project_auto_creation_stops_projects_being_created": 0.6254295839462429,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_disabling_projects_ignores_auto_creation_setting": 0.35022420797031373,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_first_stage_accepted_determination_does_not_create_project": 0.3951377071207389,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_first_stage_rejected_determination_does_not_create_project": 0.32274695893283933,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_second_stage_accepted_determination_creates_project": 0.5555361660663038,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_second_stage_rejected_determination_does_not_create_project": 0.3740730411373079,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_sends_message_if_requires_more_info": 53.24500287498813,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_single_stage_accepted_determination_creates_project": 0.36371379101183265,
+    "hypha/apply/determinations/tests/test_views.py::DeterminationFormTestCase::test_single_stage_rejected_determination_does_not_create_project": 0.4497926657786593,
+    "hypha/apply/determinations/tests/test_views.py::EditDeterminationFormTestCase::test_can_edit_determination": 0.4584017499582842,
+    "hypha/apply/determinations/tests/test_views.py::StaffDeterminationsTestCase::test_can_access_determination": 0.2628489169292152,
+    "hypha/apply/determinations/tests/test_views.py::StaffDeterminationsTestCase::test_lead_can_access_determination": 0.2115764160407707,
+    "hypha/apply/determinations/tests/test_views.py::UserDeterminationFormTestCase::test_cant_access_form": 0.192241249140352,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_active": 0.1310934571083635,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_annotated": 0.06212695804424584,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_by_lead": 0.12584670900832862,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_can_get": 0.05352362501434982,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_closed": 0.03731920791324228,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_inactive": 0.07862379110883921,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_new": 0.05332966602873057,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_no_submissions_not_either": 0.08079304208513349,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_open": 0.04613145790062845,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_with_determined": 0.10131074907258153,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForLab::test_with_progress": 0.07140566606540233,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_active": 0.13352654210757464,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_annotated": 0.09856966813094914,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_by_lead": 0.1419911669800058,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_can_get": 0.07361695903819054,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_closed": 0.07386124995537102,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_inactive": 0.09993016696535051,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_new": 0.07018604106269777,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_no_submissions_not_either": 0.0725509988842532,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_open": 0.06527933396864682,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_with_determined": 0.0967254590941593,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestForRound::test_with_progress": 0.14043374999891967,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestRoundsAndLabsManager::test_cant_get_fund": 0.06796033203136176,
+    "hypha/apply/funds/tests/models/test_roundsandlabs.py::TestRoundsAndLabsManager::test_doesnt_confuse_lab_and_round": 0.29577012616209686,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_can_save_multiple_forms_stage_two": 0.04961991612799466,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_can_save_two_forms": 0.04161399987060577,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_does_validates_without_project_approval_form": 0.015870373114012182,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_multiple_external_review_form": 0.021794166998006403,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_multiple_project_approval_form": 0.06363983312621713,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_no_form": 0.010387291200459003,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_two_first_stage_forms_in_two_stage": 0.020232082810252905,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_doesnt_validates_with_two_forms_one_stage": 0.034621958155184984,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validate_external_review_form": 0.02205070899799466,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validate_project_approval_form": 0.02532500005327165,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validates_with_one_form_one_stage": 0.024257375043816864,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validates_with_one_form_one_stage_with_deleted": 0.030707667116075754,
+    "hypha/apply/funds/tests/test_admin_form.py::TestWorkflowFormAdminForm::test_validates_without_external_review_form": 52.34273804188706,
+    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_email_block_required": 0.2088026669807732,
+    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_field_label_required": 0.149365292978473,
+    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_form_creation": 0.11754074995405972,
+    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_full_name_block_required": 0.40467620792333037,
+    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_name_field_required": 0.14645566698163748,
+    "hypha/apply/funds/tests/test_admin_views.py::TestCreateApplicationFormView::test_title_block_required": 0.16521475103218108,
+    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_fund": 0.8218775829300284,
+    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_fund_with_external_review_form": 0.3319704169407487,
+    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_multi_phase_fund": 0.3293084999313578,
+    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_multi_phase_fund_reuse_forms": 0.41299737396184355,
+    "hypha/apply/funds/tests/test_admin_views.py::TestFundCreationView::test_can_create_multiple_forms_second_stage_in_fund": 0.3237355840392411,
+    "hypha/apply/funds/tests/test_admin_views.py::TestRoundIndexView::test_application_links": 0.24900691595394164,
+    "hypha/apply/funds/tests/test_admin_views.py::TestRoundIndexView::test_number_of_rounds": 0.16683674999512732,
+    "hypha/apply/funds/tests/test_admin_views.py::TestRoundIndexView::test_review_form_links": 0.18859074905049056,
+    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_existing_reviews": 0.2270776240620762,
+    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_init_and_render": 0.18790745793376118,
+    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_reviewers_swap": 0.15377212490420789,
+    "hypha/apply/funds/tests/test_forms.py::TestReviewerFormQueries::test_queries_roles_swap": 0.16281391610391438,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_draft_data": 0.1490496238693595,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_ordered_qs": 0.1249092509970069,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_required_block_names": 0.09873220801819116,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_can_get_reverse_ordered_qs": 0.1587739591486752,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_choices_added_for_search": 0.149843375897035,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_correct_file_path_generated": 0.09924179094377905,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_create_revision_on_create": 0.09179875091649592,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_create_revision_on_data_change": 0.0906527501065284,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_dont_create_revision_on_data_same": 0.09052220906596631,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_draft_updated": 0.11173420900013298,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_file_gets_uploaded": 0.11910374986473471,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_in_final_stage": 0.2448779579717666,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_is_draft_property": 0.09119662502780557,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_number_not_in_search": 0.08268812403548509,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_richtext_in_char_is_removed_for_search": 0.0871474581072107,
+    "hypha/apply/funds/tests/test_models.py::TestApplicationSubmission::test_richtext_is_removed_for_search": 0.10898320900741965,
+    "hypha/apply/funds/tests/test_models.py::TestAssignedReviewersQuerySet::test_reviewed": 0.12450108304619789,
+    "hypha/apply/funds/tests/test_models.py::TestAssignedReviewersQuerySet::test_reviewed_with_review_order": 0.10234258486889303,
+    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_assigned_but_not_reviewed": 0.14217170898336917,
+    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_disagree_review_is_maybe": 0.18134895898401737,
+    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_dont_double_count_review_and_opinion": 0.20702958188485354,
+    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_opinionated_slash_confused_reviewer": 0.14794070809148252,
+    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_review_outcome": 0.12835533183533698,
+    "hypha/apply/funds/tests/test_models.py::TestForTableQueryset::test_submissions_dont_conflict": 0.2732012089109048,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_associated_if_another_user_exists": 0.32096395909320563,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_associated_if_logged_in": 0.24763354193419218,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_associated_if_not_new": 0.2929042089963332,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_can_submit_if_blank_user_data_even_if_logged_in": 0.15598979103378952,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_can_submit_if_new": 0.22036704106722027,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_doesnt_mess_with_name": 0.6982206258689985,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_email_sent_to_user_on_submission_fund": 0.20850474992766976,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_email_sent_to_user_on_submission_lab": 0.1665749999228865,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_valid_email": 0.3073821240104735,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_draft": 0.1814717510715127,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_draft_lab": 0.185774251120165,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_status_assigned": 0.16890304209664464,
+    "hypha/apply/funds/tests/test_models.py::TestFormSubmission::test_workflow_and_status_assigned_lab": 0.2379047080175951,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_can_access_workflow_class": 0.042793499887920916,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_can_not_be_open_with_draft_round": 0.09543912496883422,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_closed_round": 0.07514170906506479,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_multiple_open_rounds": 0.11567800003103912,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_no_open_rounds": 0.029080708976835012,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_no_round_exists": 0.032593959011137486,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_normal_round": 0.09945729107130319,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_open_ended_round": 0.06348649994470179,
+    "hypha/apply/funds/tests/test_models.py::TestFundModel::test_round_not_open": 0.06429041584488004,
+    "hypha/apply/funds/tests/test_models.py::TestReminderModel::test_can_save_reminder": 0.14102758304215968,
+    "hypha/apply/funds/tests/test_models.py::TestReminderModel::test_check_default_action": 0.08828612591605633,
+    "hypha/apply/funds/tests/test_models.py::TestReminderModel::test_reminder_action_message": 0.09919620910659432,
+    "hypha/apply/funds/tests/test_models.py::TestRequestForPartners::test_form_when_round": 0.4896917912410572,
+    "hypha/apply/funds/tests/test_models.py::TestRequestForPartners::test_message_when_no_round": 0.05575866706203669,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_create_without_end_date": 0.10089066612999886,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_not_create_with_other_open_end_date": 0.10511479200795293,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_not_overlap_clean": 0.08662924985401332,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_can_not_overlap_with_normal_round": 0.09153591585345566,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_end_before_start": 0.035309332073666155,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_end_overlaps": 0.05701729201246053,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_inside_overlaps": 0.07519704196602106,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_normal_start_end_doesnt_error": 0.06965612503699958,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_other_fund_not_impacting": 0.10615220805630088,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelDates::test_start_overlaps": 0.06443083297926933,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelWorkflowAndForms::test_can_change_round_form_not_fund": 0.12071304197888821,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelWorkflowAndForms::test_forms_are_copied_to_new_rounds": 0.06250629213172942,
+    "hypha/apply/funds/tests/test_models.py::TestRoundModelWorkflowAndForms::test_workflow_is_copied_to_new_rounds": 0.05548808316234499,
+    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_file_private_url_included": 0.2338216241914779,
+    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_named_blocks_dont_break_if_no_response": 0.10130649898201227,
+    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_named_blocks_not_included_in_answers": 0.10962391598150134,
+    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_normal_answers_included_in_answers": 0.10513508401345462,
+    "hypha/apply/funds/tests/test_models.py::TestSubmissionRenderMethods::test_paragraph_not_rendered_in_answers": 0.1062420840607956,
+    "hypha/apply/funds/tests/test_tags.py::TestTemplateTags::test_markdown_tags": 0.006134833907708526,
+    "hypha/apply/funds/tests/test_tags.py::TestTemplateTags::test_submission_tags": 0.12460162513889372,
+    "hypha/apply/funds/tests/test_views.py::TestAnonSubmissionFileView::test_anonymous_can_not_access": 0.22671829094178975,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_edit_own_submission": 0.4169395408825949,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_see_view_determination_primary_action": 0.9132027919404209,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_submit_submission": 0.43798254092689604,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_can_view_own_submission": 0.30635708291083574,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_edit_other_submission": 0.40574666601605713,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_edit_submission_incorrect_state": 0.4315109169110656,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_screen_submission": 0.4150468750158325,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_add_determination_primary_action": 1.126294415909797,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_assign_reviewers_primary_action": 0.4851302499882877,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_assign_reviewers_secondary_action": 0.4752123741200194,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_create_review_primary_action": 0.6179650429403409,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_screening_status_block": 0.295956541900523,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_see_view_determination_primary_action": 0.6678542509907857,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_cant_view_others_submission": 0.35142612585332245,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_get_congratulations_draft_proposal": 0.58507999998983,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_get_edit_link_when_editable": 0.4418560831109062,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_gets_draft_on_edit_submission": 0.5373793760081753,
+    "hypha/apply/funds/tests/test_views.py::TestApplicantSubmissionView::test_sees_latest_draft_if_it_exists": 0.5016270420746878,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_applicant_cannot_access_reviewer_leaderboard": 0.06163133401423693,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_community_reviewer_cannot_access_reviewer_leaderboard": 0.039557207841426134,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_partner_cannot_access_reviewer_leaderboard": 0.07404641690663993,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_reviewer_cannot_access_leader_board": 0.049408251070417464,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerLeaderboard::test_staff_can_access_leaderboard": 0.11858241609297693,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_access_any_submission": 0.3128672499442473,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_accepted_submission": 0.5845487498445436,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_assigned_submission": 0.6517927489476278,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_external_review_or_higher_submission": 0.44838800095021725,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_only_access_reviewed_submission": 0.2901558759622276,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_see_create_review_primary_action": 0.562187749077566,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_can_see_view_determination_primary_action": 0.7028081668540835,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_access_dismissed_submission": 0.34087837510742247,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_add_determination_primary_action": 0.5245875420514494,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_assign_reviewers_primary_action": 0.22818424890283495,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_assign_reviewers_secondary_action": 0.2603712920099497,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_create_review_primary_action": 1.0149275419535115,
+    "hypha/apply/funds/tests/test_views.py::TestReviewerSubmissionView::test_cant_see_view_determination_primary_action": 0.41726491693407297,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_can_add_external_reviewer_and_review_remains": 0.8257489589741454,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_can_be_made_role_and_not_duplciated": 0.45144966698717326,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_can_remove_external_reviewer_and_review_remains": 0.5620815821457654,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_add_reviewers_for_proposal": 0.4873921659309417,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_add_staff_single": 0.6824569570599124,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_change_role_reviewer_and_review_remains": 0.4493671261006966,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_change_staff_single": 0.4770331662148237,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_remove_reviewers_for_proposal": 0.746842457097955,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_can_remove_some_reviewers_for_proposal": 0.5127480837982148,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_lead_cant_add_reviewers_single": 0.4263467499986291,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_staff_cant_add_reviewers_proposal": 0.4620940409367904,
+    "hypha/apply/funds/tests/test_views.py::TestReviewersUpdateView::test_staff_cant_remove_reviewers_proposal": 0.8137773340567946,
+    "hypha/apply/funds/tests/test_views.py::TestRevisionCompare::test_renders_with_all_the_diffs": 0.3248190419981256,
+    "hypha/apply/funds/tests/test_views.py::TestRevisionList::test_get_in_correct_order": 0.497798457974568,
+    "hypha/apply/funds/tests/test_views.py::TestRevisionList::test_list_doesnt_include_draft": 0.34488670888822526,
+    "hypha/apply/funds/tests/test_views.py::TestRevisionsView::test_create_revisions_on_submit": 0.38965708296746016,
+    "hypha/apply/funds/tests/test_views.py::TestRevisionsView::test_dont_update_live_revision_on_save": 0.32660966797266155,
+    "hypha/apply/funds/tests/test_views.py::TestRevisionsView::test_existing_draft_edit_and_submit": 0.7188656670041382,
+    "hypha/apply/funds/tests/test_views.py::TestStaffReminderDeleteView::test_confirm_message": 0.43140212597791106,
+    "hypha/apply/funds/tests/test_views.py::TestStaffReminderDeleteView::test_has_access": 0.1736859999364242,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_cant_post_to_sealed": 0.3140248339623213,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_non_sealed_redirected_away": 0.3367313339840621,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_non_sealed_unaffected": 0.35245737596414983,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSealedView::test_redirected_to_sealed": 0.4905905839987099,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionFileView::test_staff_can_access": 0.1999512080801651,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_applicant_can_see_application_draft_status": 0.27073320804629475,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_access_edit": 0.32954245805740356,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_access_edit_button": 0.37549454101826996,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_create_project": 0.3760909589473158,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_edit_submission": 0.5899402508512139,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_progress_phase": 0.39777112391311675,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_screen_submission": 0.3471504159970209,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_add_determination_primary_action": 0.7420900000724941,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_assign_reviewers_primary_action": 1.4845561670372263,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_assign_reviewers_secondary_action": 1.2371138751041144,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_create_review_primary_action": 1.4618289999198169,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_see_view_determination_primary_action": 1.107450666022487,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_view_a_lab_submission": 0.41783874994143844,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_view_a_submission": 0.3368598339147866,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_can_view_submission_screening_block": 0.344336625887081,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_access_edit_button_when_applicant_editing": 0.4187689999816939,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_progress_stage_if_not_lead": 0.40149033395573497,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_add_determination_primary_action": 1.471973832929507,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_application_draft_status": 0.2396007931092754,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_assign_reviewers_primary_action": 0.9687096660491079,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_create_review_primary_action": 1.8450221660314128,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_see_view_determination_primary_action": 1.101752792019397,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_cant_view_submission_screening_block": 0.3147491249255836,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_new_form_after_progress": 0.24671399989165366,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_not_included_fields_render": 0.4018669999204576,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_not_redirected_if_determination_submitted": 0.42448441800661385,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_not_redirected_if_wrong_determination_selected": 0.49752758303657174,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_previous_and_next_appears_on_page": 0.9396503329044208,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_redirected_to_determination": 0.3322940430371091,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_screen_application_primary_action_is_displayed": 0.315706167020835,
+    "hypha/apply/funds/tests/test_views.py::TestStaffSubmissionView::test_screen_application_primary_action_is_not_displayed": 0.3573770399671048,
+    "hypha/apply/funds/tests/test_views.py::TestSubmissionDetailSimplifiedView::test_project_required": 0.1321598341455683,
+    "hypha/apply/funds/tests/test_views.py::TestSubmissionDetailSimplifiedView::test_staff_only": 0.12134012510068715,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_can_post_to_sealed": 0.4207257080124691,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_can_view_multiple_sealed": 0.9063680830877274,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_not_asked_again": 0.5518010839587077,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_peeking_is_logged": 0.3346030409447849,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSealedView::test_redirected_to_sealed": 0.2140774989966303,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSubmissionView::test_can_screen_applications_in_final_status": 0.7690585830714554,
+    "hypha/apply/funds/tests/test_views.py::TestSuperUserSubmissionView::test_can_screen_submission": 0.38334191718604416,
+    "hypha/apply/funds/tests/test_views.py::TestUpdateReviewersMixin::test_submission_transition_all_reviewer_roles_not_assigned": 0.484276499832049,
+    "hypha/apply/funds/tests/test_views.py::TestUpdateReviewersMixin::test_submission_transition_to_internal_review": 0.5740112499333918,
+    "hypha/apply/funds/tests/test_views.py::TestUpdateReviewersMixin::test_submission_transition_to_proposal_internal_review": 0.4810352091444656,
+    "hypha/apply/funds/tests/test_views.py::TestUserReminderDeleteView::test_doesnt_has_access": 0.23820854211226106,
+    "hypha/apply/funds/tests/test_views.py::TestUserSubmissionFileView::test_owner_can_access": 0.15925191692076623,
+    "hypha/apply/funds/tests/test_views.py::TestUserSubmissionFileView::test_user_can_not_access": 0.14730862504802644,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::ApplicantTestCase::test_cant_access_page_to_page": 0.08610325097106397,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::ReivewersTestCase::test_cant_post_to_page": 0.3608955009840429,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_application": 0.45370379206724465,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_different_states": 0.5506767920451239,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_multiple_applications": 0.9527829589787871,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_can_progress_one_in_mixed_state": 0.49793162394780666,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_cant_progress_in_incorrect_state": 0.3299887500470504,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_determine_redirects": 0.2182419589953497,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_messenger_not_called_with_failed": 0.3004915409255773,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_messenger_with_submission_in_review": 0.3768535410054028,
+    "hypha/apply/funds/tests/views/test_batch_progress.py::StaffTestCase::test_mixed_determine_notifies": 0.37122058297973126,
+    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_can_assign_role_reviewers": 0.9108087500790134,
+    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_can_reassign_from_other_role_reviewers": 0.7777726660715416,
+    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_can_reassign_role_reviewers": 0.7799941239645705,
+    "hypha/apply/funds/tests/views/test_batch_reviewers.py::StaffTestCase::test_doesnt_remove_if_already_reviewed": 1.0364358740625903,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantRoundPage::test_cant_access_page": 0.08234191790688783,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_lab_page": 0.12256012472789735,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_non_existing_page": 0.044570248923264444,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_normal_page": 0.15356200106907636,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestApplicantSubmissionByRound::test_cant_access_round_page": 0.13131941703613847,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestReviewerAllRoundPage::test_cant_access_page": 0.08593399997334927,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffRoundPage::test_can_access_page": 0.14833616698160768,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_can_access_lab_page": 0.2737620830303058,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_can_access_round_page": 0.45550508389715105,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_cant_access_non_existing_page": 0.07584341603796929,
+    "hypha/apply/funds/tests/views/test_rounds.py::TestStaffSubmissionByRound::test_cant_access_normal_page": 0.14374800096265972,
+    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_already_notified": 0.19513545895460993,
+    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_project_complete": 0.13409304106608033,
+    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_project_not_in_progress": 0.12156212504487485,
+    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_dont_notify_report_due_in_7_days_already_submitted": 0.125589668052271,
+    "hypha/apply/projects/tests/test_commands.py::TestNotifyReportDue::test_notify_report_due_in_7_days": 0.1717857918702066,
+    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_no_items": 0.00656904187053442,
+    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_one_level_of_items": 0.0012798751704394817,
+    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_three_levels_of_items": 0.000812293030321598,
+    "hypha/apply/projects/tests/test_files.py::TestFlatten::test_two_levels_of_items": 0.0011532080825418234,
+    "hypha/apply/projects/tests/test_files.py::TestGetFiles::test_get_files": 0.1295463329879567,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_approved_by_finance1_status": 0.14656220795586705,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_approved_by_finance1_status_with_extended_flow": 0.13236879208125174,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_approved_by_staff_status": 0.14808366796933115,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_changes_requested_by_finance1_status": 0.1682244180701673,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_changes_requested_by_finance2_status": 0.1424597919685766,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_changes_requested_by_staff_status": 0.11559129203669727,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_resubmitted_status": 0.12777604104485363,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance1_choices_with_submitted_status": 0.12977958307601511,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_approved_by_finance1_status": 0.13142820808570832,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_approved_by_staff_status": 0.11266949994023889,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_changes_requested_by_finance1_status": 0.14685695804655552,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_changes_requested_by_finance2_status": 0.12137499975506216,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_changes_requested_by_staff_status": 0.17739116703160107,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_resubmitted_status": 0.15250520908739418,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_finance2_choices_with_submitted_status": 0.13672062510158867,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_approved_by_finance1_status": 0.1357324169948697,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_approved_by_staff_status": 0.15583287389017642,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_changes_requested_by_finance1_status": 0.1764742910163477,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_changes_requested_by_finance2_status": 0.1542377930600196,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_changes_requested_by_staff_status": 0.13213195896241814,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_resubmitted_status": 0.16957866703160107,
+    "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_staff_choices_with_submitted_status": 0.1503189168870449,
     "hypha/apply/projects/tests/test_forms.py::TestChangeInvoiceStatusFormForm::test_valid_checks_required_for_approved_by_finance1": 0.14640300802420825,
-    "hypha/apply/projects/tests/test_forms.py::TestChangePAFStatusForm::test_comment_is_not_required": 0.3512216289527714,
-    "hypha/apply/projects/tests/test_forms.py::TestChangePAFStatusForm::test_paf_status_is_required": 0.11376952106365934,
+    "hypha/apply/projects/tests/test_forms.py::TestChangePAFStatusForm::test_comment_is_not_required": 0.19300870806910098,
+    "hypha/apply/projects/tests/test_forms.py::TestChangePAFStatusForm::test_paf_status_is_required": 0.15398145886138082,
     "hypha/apply/projects/tests/test_forms.py::TestChangePAFStatusForm::test_role_is_required": 0.27957526297541335,
-    "hypha/apply/projects/tests/test_forms.py::TestContractUploadForm::test_applicant_can_upload_signed": 0.00807250599609688,
-    "hypha/apply/projects/tests/test_forms.py::TestContractUploadForm::test_applicant_cant_upload_unsigned": 0.0020636700210161507,
-    "hypha/apply/projects/tests/test_forms.py::TestCreateInvoiceForm::test_adding_invoice": 0.15789289103122428,
-    "hypha/apply/projects/tests/test_forms.py::TestCreateInvoiceForm::test_supporting_documents_not_required": 0.12234787701163441,
-    "hypha/apply/projects/tests/test_forms.py::TestEditInvoiceForm::test_add_new_supporting_document": 0.17485436599235982,
-    "hypha/apply/projects/tests/test_forms.py::TestEditInvoiceForm::test_keep_existing_supporting_document": 0.13645511399954557,
-    "hypha/apply/projects/tests/test_forms.py::TestEditInvoiceForm::test_remove_existing_supporting_document": 0.15415351296542212,
+    "hypha/apply/projects/tests/test_forms.py::TestContractUploadForm::test_applicant_can_upload_signed": 0.012523707933723927,
+    "hypha/apply/projects/tests/test_forms.py::TestContractUploadForm::test_applicant_cant_upload_unsigned": 0.0015236668987199664,
+    "hypha/apply/projects/tests/test_forms.py::TestCreateInvoiceForm::test_adding_invoice": 0.20054199907463044,
+    "hypha/apply/projects/tests/test_forms.py::TestCreateInvoiceForm::test_supporting_documents_not_required": 0.13114958407822996,
+    "hypha/apply/projects/tests/test_forms.py::TestEditInvoiceForm::test_add_new_supporting_document": 0.18472599901724607,
+    "hypha/apply/projects/tests/test_forms.py::TestEditInvoiceForm::test_keep_existing_supporting_document": 0.12283229199238122,
+    "hypha/apply/projects/tests/test_forms.py::TestEditInvoiceForm::test_remove_existing_supporting_document": 0.1436553749954328,
     "hypha/apply/projects/tests/test_forms.py::TestFinalApprovalForm::test_comment_is_not_required": 0.13221216498641297,
     "hypha/apply/projects/tests/test_forms.py::TestFinalApprovalForm::test_final_approval_status_is_required": 0.14672052202513441,
-    "hypha/apply/projects/tests/test_forms.py::TestProjectApprovalForm::test_updating_fields_sets_changed_flag": 0.1700844950391911,
-    "hypha/apply/projects/tests/test_forms.py::TestSelectDocumentForm::test_copying_files": 0.21950407099211589,
-    "hypha/apply/projects/tests/test_forms.py::TestStaffContractUploadForm::test_staff_can_upload_signed": 0.032885463966522366,
-    "hypha/apply/projects/tests/test_forms.py::TestStaffContractUploadForm::test_staff_can_upload_unsigned": 0.0052541790646500885,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_can_edit_invoice": 0.4003281129989773,
+    "hypha/apply/projects/tests/test_forms.py::TestProjectApprovalForm::test_updating_fields_sets_changed_flag": 0.18461233307607472,
+    "hypha/apply/projects/tests/test_forms.py::TestSelectDocumentForm::test_copying_files": 0.2475349169690162,
+    "hypha/apply/projects/tests/test_forms.py::TestStaffContractUploadForm::test_staff_can_upload_signed": 0.025492292013950646,
+    "hypha/apply/projects/tests/test_forms.py::TestStaffContractUploadForm::test_staff_can_upload_unsigned": 0.0016959580825641751,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_can_edit_invoice": 0.4677913341438398,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_cant_complete_required_checks": 0.2534002040629275,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_cant_edit_deliverables": 1.3747003779863007,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_cant_edit_invoice": 0.9505983530543745,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_cant_edit_deliverables": 1.3421481680124998,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_cant_edit_invoice": 0.8605386249255389,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_applicant_cant_view_required_checks": 0.15699885797221214,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_can_user_delete_from_submitted": 0.12685565801803023,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_deliverables_total_amount": 0.2732357290806249,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_change_status": 0.45748776401160285,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_change_status_with_extended_flow": 0.2849112910334952,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_can_user_delete_from_submitted": 0.13923558394890279,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_deliverables_total_amount": 0.26896874990779907,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_change_status": 0.2687777921091765,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_change_status_with_extended_flow": 0.2564405840821564,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_complete_required_checks": 0.13558499101782218,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_complete_required_checks_with_extended_flow": 0.262551411986351,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_edit_deliverables": 0.17035378696164116,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_edit_deliverables_with_extended_flow": 0.277386314002797,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_edit_deliverables": 0.15919166698586196,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_edit_deliverables_with_extended_flow": 0.30434783222153783,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_can_view_required_checks": 0.13442321895854548,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_cant_change_status": 0.8365151060279459,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_cant_change_status_with_extended_flow": 1.0589778009452857,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_cant_edit_deliverables": 1.1148731809807941,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_can_change_status_with_extended_flow": 0.4452583640231751,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_can_edit_deliverables": 0.1789748859591782,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_cant_change_status": 0.7777259999420494,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_cant_change_status_with_extended_flow": 1.124960500979796,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance1_cant_edit_deliverables": 1.1772799988975748,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_can_change_status_with_extended_flow": 0.31822366698179394,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_can_edit_deliverables": 0.18257191707380116,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_can_view_required_checks": 0.1515219429275021,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_cant_change_status": 1.1551895070588216,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_cant_change_status": 1.0336496668169275,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_cant_complete_required_checks": 0.2719519470119849,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_cant_edit_deliverables": 1.2446615269873291,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_invoice_status_user_choices": 0.022473018965683877,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_paid_value_overrides_paid_value": 0.2701132840011269,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_paid_value_used_when_no_paid_value": 0.1327935800072737,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_change_status": 0.5553826320101507,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_delete_from_submitted": 0.13175608299206942,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_edit_deliverables": 0.4434414239949547,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_edit_invoice": 0.4355162180145271,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_change_status": 0.8516057960223407,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_finance2_cant_edit_deliverables": 1.2482511668931693,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_invoice_status_user_choices": 0.029556000023148954,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_paid_value_overrides_paid_value": 0.24231670808512717,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_paid_value_used_when_no_paid_value": 0.11380149878095835,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_change_status": 0.5695527079515159,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_delete_from_submitted": 0.13154870888683945,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_edit_deliverables": 0.4835246258880943,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_can_edit_invoice": 0.3677802919410169,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_change_status": 0.827688624849543,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_complete_required_checks": 0.25674830604111776,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_changes_requested": 0.1321088649565354,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_declined": 0.15055897401180118,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_paid": 0.16659367800457403,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_resubmitted": 0.16142301895888522,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_edit_deliverables": 0.9337438590009697,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_edit_invoice": 0.9754061480634846,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_changes_requested": 0.12243487488012761,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_declined": 0.11556737590581179,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_paid": 0.13047170895151794,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_delete_from_resubmitted": 0.14207054185681045,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_edit_deliverables": 0.9022454170044512,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_edit_invoice": 0.9730592080159113,
     "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_staff_cant_view_required_checks": 0.13086751097580418,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_changes_requested": 0.17067070200573653,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_declined": 0.1516783099505119,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_paid": 0.1515556700178422,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_resubmitted": 0.16600474901497364,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_approved_by_finance_1": 0.18218005797825754,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_approved_by_staff": 0.16373437497531995,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_for_finance_1": 0.4254065680433996,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_for_finance_1_with_extended_flow": 0.4326787189929746,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_get_totals": 0.2927584630670026,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_get_totals_no_value": 0.0029803210054524243,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_in_progress": 0.5737843110109679,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_in_progress_with_extended_workflow": 0.5823555560200475,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_not_rejected": 0.3023509450140409,
-    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_rejected": 0.3518702029832639,
-    "hypha/apply/projects/tests/test_models.py::TestProjectModel::test_create_from_submission": 0.1371713529806584,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_changes_requested": 0.13185079209506512,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_declined": 0.13134587497916073,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_paid": 0.11496637493837625,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceModel::test_user_cant_delete_from_resubmitted": 0.11964587401598692,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_approved_by_finance_1": 0.16413887590169907,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_approved_by_staff": 0.1464312489842996,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_for_finance_1": 0.47499566711485386,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_for_finance_1_with_extended_flow": 0.4038207909325138,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_get_totals": 0.29281766701024026,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_get_totals_no_value": 0.009484459063969553,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_in_progress": 0.5261278330581263,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_in_progress_with_extended_workflow": 0.5607747921021655,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_not_rejected": 0.24980391701683402,
+    "hypha/apply/projects/tests/test_models.py::TestInvoiceQueryset::test_rejected": 0.2608390011591837,
+    "hypha/apply/projects/tests/test_models.py::TestProjectModel::test_create_from_submission": 0.13738808303605765,
     "hypha/apply/projects/tests/test_models.py::TestProjectModel::test_get_missing_document_categories_with_enough_documents": 0.11543385393451899,
     "hypha/apply/projects/tests/test_models.py::TestProjectModel::test_get_missing_document_categories_with_no_documents": 0.12154749495675787,
     "hypha/apply/projects/tests/test_models.py::TestProjectModel::test_get_missing_document_categories_with_some_documents": 0.1251538940705359,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_late_if_two_weeks_behind": 0.17123459395952523,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_not_late_if_one_ahead": 0.13036853907397017,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_not_late_if_two_ahead_but_one_in_future": 0.14844446995994076,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_doesnt_includes_draft": 0.14222881000023335,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_doesnt_includes_to_do": 0.13602707296377048,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_includes_skipped": 0.14471476897597313,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_includes_submitted": 0.14825678401393816,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_start_date": 0.2703300910652615,
-    "hypha/apply/projects/tests/test_models.py::TestReport::test_start_date_with_submitted": 0.28415061702253297,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_current_due_report_gets_active_report": 0.38771237595938146,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_last_report_gets_report_in_past": 0.12814618699485436,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_last_report_gets_skipped": 0.13191157398978248,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_last_report_gets_submitted_report_in_past": 0.1522253670846112,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_months_always_relative": 0.1346714999526739,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_next_date_month_from_now": 0.15820943197468296,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_next_date_week_from_now": 0.14988406101474538,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_creates_report": 0.14282274502329528,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_creates_report_if_current_skipped": 0.25014800403732806,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_creates_report_not_in_past": 0.12638417101697996,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_schedule_in_future_creates_report": 0.13327373296488076,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due": 0.1536217929678969,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_has_drafts": 0.26293122093193233,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_no_future": 0.1311070989468135,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_no_skipped": 0.13819944200804457,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_no_submitted": 0.1341565230395645,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_report_creates_report": 0.16617269505513832,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_report_future_schedule_creates_report": 0.1407171460450627,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_submitted_report_unaffected": 0.15785711799981073,
-    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_today_schedule_gets_report_today": 0.15171146602369845,
-    "hypha/apply/projects/tests/test_settings.py::TestProjectFeatureFlag::test_urls_404_when_turned_off": 0.24892026896122843,
-    "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_only_owner_or_contracting_can_upload_contract": 0.6143688840093091,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_late_if_two_weeks_behind": 0.14041937398724258,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_not_late_if_one_ahead": 0.1475888331187889,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_not_late_if_two_ahead_but_one_in_future": 0.13852524990215898,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_doesnt_includes_draft": 0.13393670704681426,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_doesnt_includes_to_do": 0.14236916694790125,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_includes_skipped": 0.11985287489369512,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_queryset_done_includes_submitted": 0.1529380000429228,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_start_date": 0.2827108330093324,
+    "hypha/apply/projects/tests/test_models.py::TestReport::test_start_date_with_submitted": 0.3177187921246514,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_current_due_report_gets_active_report": 0.16657691588625312,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_last_report_gets_report_in_past": 0.13111908407881856,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_last_report_gets_skipped": 0.13035574986133724,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_last_report_gets_submitted_report_in_past": 0.16823266702704132,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_months_always_relative": 0.14021316601429135,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_next_date_month_from_now": 0.1383220818825066,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_next_date_week_from_now": 0.1124104579212144,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_creates_report": 0.13419712509494275,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_creates_report_if_current_skipped": 0.29639283288270235,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_creates_report_not_in_past": 0.18723491800483316,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_no_report_schedule_in_future_creates_report": 0.12775712611619383,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due": 0.1407861680490896,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_has_drafts": 0.1162833331618458,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_no_future": 0.14742004196159542,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_no_skipped": 0.1485892499331385,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_no_submitted": 0.1205546660348773,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_report_creates_report": 0.17780787404626608,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_past_due_report_future_schedule_creates_report": 0.15225604199804366,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_submitted_report_unaffected": 0.12192612502258271,
+    "hypha/apply/projects/tests/test_models.py::TestReportConfig::test_today_schedule_gets_report_today": 0.1461057069245726,
+    "hypha/apply/projects/tests/test_settings.py::TestProjectFeatureFlag::test_urls_404_when_turned_off": 0.13511179306078702,
+    "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_only_owner_or_contracting_can_upload_contract": 0.6426608330802992,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_only_owner_or_staff_or_contracting_can_upload_contract": 0.6099863669951446,
-    "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_owner_can_only_upload_during_contracting": 0.6950896928901784,
+    "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_owner_can_only_upload_during_contracting": 0.7223308749962598,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_staff_can_only_upload_during_contracting": 0.9420862589031458,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_staff_can_upload_after_state_leaves_committed": 0.7649188670911826,
-    "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_staff_cant_upload_contract": 1.225172798964195,
+    "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_staff_cant_upload_contract": 0.6458539160666987,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_user_can_only_upload_during_contracting": 0.6449822820723057,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_user_cannot_upload_first_contract": 0.13075465901056305,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_user_cannot_upload_when_latest_is_approved": 0.13252823700895533,
     "hypha/apply/projects/tests/test_templatetags.py::TestContractTools::test_user_upload_happy_path": 0.2574270899640396,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_can_edit_in_resubmitted": 0.15372100000968203,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_can_edit_in_submitted": 0.13110340398270637,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_cant_edit_in_decline": 0.13486552302492782,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_cant_edit_in_paid": 0.4800416919752024,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_can_edit_in_changes_requested": 0.1541069180238992,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_change_status_from_changes_requested": 0.16565412003546953,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_change_status_from_resubmitted": 0.14650172798428684,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_change_status_from_submitted": 0.16309194097993895,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_delete_from_submitted": 0.13211023499025032,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_change_status_from_declined": 0.13576409395318478,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_change_status_from_paid": 0.15105659392429516,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_changes_requested": 0.16123960609547794,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_declined": 0.1680831880075857,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_paid": 0.16957948898198083,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_resubmitted": 0.13567483896622434,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_edit_in_changes_requested": 0.1348012100206688,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_can_delete_from_changes_requested": 0.13176265102811158,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_can_delete_from_submitted": 0.16813702805666253,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_changes_requested": 0.14786972798174247,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_declined": 0.13850199506850913,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_paid": 0.15584833500906825,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_resubmitted": 0.1457527260063216,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_submitted": 0.2562958520138636,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_delete_from_declined": 0.17454323201673105,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_delete_from_paid": 0.14806092501385137,
-    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_delete_from_resubmitted": 0.1293734639766626,
-    "hypha/apply/projects/tests/test_views.py::ApplicantStaffProjectDetailDownloadView::test_cant_access_docx": 0.4962714510038495,
-    "hypha/apply/projects/tests/test_views.py::ApplicantStaffProjectDetailDownloadView::test_cant_access_pdf": 0.23316087905550376,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_can_edit_in_resubmitted": 0.20081529207527637,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_can_edit_in_submitted": 0.17667258298024535,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_cant_edit_in_decline": 0.16733512608334422,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_and_staff_cant_edit_in_paid": 0.14762791595421731,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_applicant_can_edit_in_changes_requested": 0.1495155009906739,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_change_status_from_changes_requested": 0.1446481669554487,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_change_status_from_resubmitted": 0.11919666698668152,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_change_status_from_submitted": 0.1579036668408662,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_can_delete_from_submitted": 0.143415667116642,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_change_status_from_declined": 0.14673970884177834,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_change_status_from_paid": 0.16521012503653765,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_changes_requested": 0.13709866616409272,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_declined": 0.12764229194726795,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_paid": 0.14702133391983807,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_delete_from_resubmitted": 0.14646908198483288,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_staff_cant_edit_in_changes_requested": 0.14439691707957536,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_can_delete_from_changes_requested": 0.16820387495681643,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_can_delete_from_submitted": 0.11543937399983406,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_changes_requested": 0.14563395793084055,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_declined": 0.1374384588561952,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_paid": 0.11991154309362173,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_resubmitted": 0.11730445898137987,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_change_status_from_submitted": 0.140936418203637,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_delete_from_declined": 0.12267554190475494,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_delete_from_paid": 0.12980916700325906,
+    "hypha/apply/projects/tests/test_templatetags.py::TestInvoiceTools::test_user_cant_delete_from_resubmitted": 0.1432627912145108,
+    "hypha/apply/projects/tests/test_views.py::ApplicantStaffProjectDetailDownloadView::test_cant_access_docx": 0.1966205829521641,
+    "hypha/apply/projects/tests/test_views.py::ApplicantStaffProjectDetailDownloadView::test_cant_access_pdf": 0.15883916686289012,
     "hypha/apply/projects/tests/test_views.py::ApplicantStaffProjectPDFExport::test_cant_access": 0.4367084689438343,
-    "hypha/apply/projects/tests/test_views.py::TestAnonPacketView::test_anonymous_can_not_access": 0.3647125539719127,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantChangeInoviceStatus::test_can": 0.33358714409405366,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantChangeInoviceStatus::test_other_cant": 0.36085706198355183,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantDetailInvoiceStatus::test_can": 0.3367460399749689,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantDetailInvoiceStatus::test_other_cant": 0.24984832503832877,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantEditInvoiceView::test_editing_invoice_remove_supporting_document": 0.41689993697218597,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantEditInvoiceView::test_editing_payment_keeps_receipts": 0.3213078759727068,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantInvoiceDocumentPrivateMedia::test_can_access_own": 0.3062629519845359,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantInvoiceDocumentPrivateMedia::test_cant_access_other": 0.22357299795839936,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_can_access_own_submitted_report": 0.32915400800993666,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_other_draft_report": 0.24073657597182319,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_other_future_report": 0.2563963730353862,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_other_submitted_report": 0.29805332294199616,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_own_draft_report": 0.20886641892138869,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_own_future_report": 0.31565535796107724,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSelectDocumentView::test_can_choose": 0.4203664750093594,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_edit_submitted_report": 0.34937802504282445,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_get_other_report": 0.22335756302345544,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_get_own_report_for_closing_and_complete_project": 0.33247736998600885,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_submit_blank_report": 0.33772525400854647,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_submit_other_report": 0.22836701094638556,
+    "hypha/apply/projects/tests/test_views.py::TestAnonPacketView::test_anonymous_can_not_access": 0.2985005429945886,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantChangeInoviceStatus::test_can": 0.2696548749227077,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantChangeInoviceStatus::test_other_cant": 0.1833043749211356,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantDetailInvoiceStatus::test_can": 0.26966437592636794,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantDetailInvoiceStatus::test_other_cant": 0.21466441499069333,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantEditInvoiceView::test_editing_invoice_remove_supporting_document": 0.5716359990183264,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantEditInvoiceView::test_editing_payment_keeps_receipts": 0.2577328330371529,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantInvoiceDocumentPrivateMedia::test_can_access_own": 0.20194349891971797,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantInvoiceDocumentPrivateMedia::test_cant_access_other": 0.16671270783990622,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_can_access_own_submitted_report": 0.28402716596610844,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_other_draft_report": 0.20395133295096457,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_other_future_report": 0.18712166603654623,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_other_submitted_report": 0.24219274998176843,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_own_draft_report": 0.3841152499662712,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantReportDetail::test_cant_access_own_future_report": 0.16174466698430479,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSelectDocumentView::test_can_choose": 0.33903512405231595,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_edit_submitted_report": 0.2282239181222394,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_get_other_report": 0.2113874590722844,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_get_own_report_for_closing_and_complete_project": 0.2811180839780718,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_submit_blank_report": 0.25066425011027604,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_cant_submit_other_report": 0.1684802919626236,
     "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_get_own_report": 0.2826117270742543,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_get_own_report_for_inprogress_project": 0.28616453701397404,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_save_report_draft": 0.41400659701321274,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_save_report_with_draft": 0.4306135210208595,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_submit_own_report": 0.4428193239727989,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_submit_private_report": 0.4408888259786181,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSupportingDocumentPrivateMedia::test_can_access_own": 0.3084140350110829,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantSupportingDocumentPrivateMedia::test_cant_access_other": 0.27937892102636397,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantUploadContractView::test_non_owner_upload_contract": 0.6119386549689807,
-    "hypha/apply/projects/tests/test_views.py::TestApplicantUploadContractView::test_owner_upload_contract": 0.41327863006154075,
-    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_approve_already_approved_contract": 0.647454542980995,
-    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_approve_unapproved_contract": 0.8929309820523486,
-    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_approve_unsigned_contract": 0.4283807199681178,
-    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_attempt_to_approve_non_latest": 0.41751997399842367,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_get_own_report_for_inprogress_project": 0.23057825001887977,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_save_report_draft": 0.3780158340232447,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_save_report_with_draft": 0.303628999972716,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_submit_own_report": 0.5435319581301883,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSubmitReport::test_submit_private_report": 0.3683913750573993,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSupportingDocumentPrivateMedia::test_can_access_own": 0.248186418088153,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantSupportingDocumentPrivateMedia::test_cant_access_other": 0.25508024904411286,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantUploadContractView::test_non_owner_upload_contract": 0.4791930830106139,
+    "hypha/apply/projects/tests/test_views.py::TestApplicantUploadContractView::test_owner_upload_contract": 0.28598516690544784,
+    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_approve_already_approved_contract": 0.44596962514333427,
+    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_approve_unapproved_contract": 0.462921499973163,
+    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_approve_unsigned_contract": 0.29319612495601177,
+    "hypha/apply/projects/tests/test_views.py::TestApproveContractView::test_attempt_to_approve_non_latest": 0.2465409169672057,
     "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_applicant_cant_update_paf_status": 0.16629222000483423,
-    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_assigned_approvers_can_approve_paf": 0.6528863020357676,
-    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_assigned_approvers_can_reject_paf": 0.49755277106305584,
+    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_assigned_approvers_can_approve_paf": 0.529611749923788,
+    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_assigned_approvers_can_reject_paf": 0.41536887490656227,
     "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_contracting_can_update_paf_status": 0.12587614404037595,
     "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_finance_can_update_paf_status": 0.1424186519579962,
     "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_reviewer_approve_paf": 0.11959398398175836,
     "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_reviewer_rejects_paf": 0.11641414504265413,
     "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_staff_can_update_paf_status": 0.14335077803116292,
-    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_applicant_cant_update_paf_status": 0.26842688902979717,
-    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_contracting_cant_update_paf_status": 0.2955197850242257,
-    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_finance_cant_update_paf_status": 0.6187185290036723,
-    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_staff_cant_update_paf_status": 0.293700747017283,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_all_signed_and_approved_contracts_appear": 0.14940424199448898,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_all_signed_and_unapproved_returns_latest": 0.12143040704540908,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_all_unsigned_and_unapproved_returns_only_latest": 0.1577407979639247,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_of_both_latest_signed_and_approved": 0.1265651870635338,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_of_both_latest_signed_and_unapproved": 0.12196896999375895,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_of_both_latest_unsigned_and_unapproved": 0.12752755405381322,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_with_latest_signed_returns_no_unsigned": 0.13731461798306555,
-    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_no_contracts_returns_nothing": 0.11599953705444932,
+    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_applicant_cant_update_paf_status": 0.2960075829178095,
+    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_contracting_cant_update_paf_status": 0.257217500009574,
+    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_finance_cant_update_paf_status": 0.2588361669331789,
+    "hypha/apply/projects/tests/test_views.py::TestChangePAFStatusView::test_unassigned_staff_cant_update_paf_status": 0.287305667065084,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_all_signed_and_approved_contracts_appear": 0.16733087494503707,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_all_signed_and_unapproved_returns_latest": 0.14290170895401388,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_all_unsigned_and_unapproved_returns_only_latest": 0.1126612500520423,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_of_both_latest_signed_and_approved": 0.13478079193737358,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_of_both_latest_signed_and_unapproved": 0.1597497520269826,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_of_both_latest_unsigned_and_unapproved": 0.1713441238971427,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_mixture_with_latest_signed_returns_no_unsigned": 0.1869870830560103,
+    "hypha/apply/projects/tests/test_views.py::TestContractsMixin::test_no_contracts_returns_nothing": 0.11318270908668637,
     "hypha/apply/projects/tests/test_views.py::TestFinalApprovalView::test_final_approval": 0.6934734180103987,
     "hypha/apply/projects/tests/test_views.py::TestFinalApprovalView::test_final_approver_cant_be_applicant": 0.1994648210820742,
     "hypha/apply/projects/tests/test_views.py::TestFinalApprovalView::test_final_approver_cant_be_approver": 0.2700507749686949,
@@ -670,182 +671,221 @@
     "hypha/apply/projects/tests/test_views.py::TestFinalApprovalView::test_final_approver_cant_be_finance": 0.24600107705919072,
     "hypha/apply/projects/tests/test_views.py::TestFinalApprovalView::test_final_approver_cant_be_staff": 0.25083705002907664,
     "hypha/apply/projects/tests/test_views.py::TestFinalApprovalView::test_final_rejection": 0.463428097020369,
-    "hypha/apply/projects/tests/test_views.py::TestFinanceDetailInvoiceStatus::test_can": 0.6779221169999801,
-    "hypha/apply/projects/tests/test_views.py::TestFinanceDetailInvoiceStatus::test_wrong_project_cant": 0.4259864690247923,
-    "hypha/apply/projects/tests/test_views.py::TestFinanceProjectDetailView::test_has_access": 0.4960756380460225,
-    "hypha/apply/projects/tests/test_views.py::TestFinanceProjectDetailView::test_lab_project_renders": 0.626958184002433,
-    "hypha/apply/projects/tests/test_views.py::TestProjectDetailApprovalView::test_staff_only": 0.14581771101802588,
+    "hypha/apply/projects/tests/test_views.py::TestFinanceDetailInvoiceStatus::test_can": 0.2918579989345744,
+    "hypha/apply/projects/tests/test_views.py::TestFinanceDetailInvoiceStatus::test_wrong_project_cant": 0.31055020820349455,
+    "hypha/apply/projects/tests/test_views.py::TestFinanceProjectDetailView::test_has_access": 0.5254750840831548,
+    "hypha/apply/projects/tests/test_views.py::TestFinanceProjectDetailView::test_lab_project_renders": 0.24427445698529482,
+    "hypha/apply/projects/tests/test_views.py::TestProjectDetailApprovalView::test_staff_only": 0.21805266686715186,
     "hypha/apply/projects/tests/test_views.py::TestProjectDetailSimplifiedView::test_staff_only": 0.15704163699410856,
-    "hypha/apply/projects/tests/test_views.py::TestProjectListView::test_applicants_cannot_access_project_list_page": 0.40898869006196037,
-    "hypha/apply/projects/tests/test_views.py::TestProjectListView::test_staff_can_access_project_list_page": 0.7046236019814387,
-    "hypha/apply/projects/tests/test_views.py::TestProjectOverviewView::test_applicants_cannot_access": 0.3895466060494073,
-    "hypha/apply/projects/tests/test_views.py::TestProjectOverviewView::test_staff_can_access": 0.4321621179115027,
-    "hypha/apply/projects/tests/test_views.py::TestRemoveDocumentView::test_remove_document": 0.6746491370140575,
-    "hypha/apply/projects/tests/test_views.py::TestRemoveDocumentView::test_remove_non_existent_document": 0.43578543805051595,
-    "hypha/apply/projects/tests/test_views.py::TestReviewerUserProjectDetailView::test_doesnt_have_access": 0.25382392504252493,
-    "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_fails_when_project_is_locked": 0.16655642807018012,
+    "hypha/apply/projects/tests/test_views.py::TestProjectListView::test_applicants_cannot_access_project_list_page": 0.35646595794241875,
+    "hypha/apply/projects/tests/test_views.py::TestProjectListView::test_staff_can_access_project_list_page": 0.4130909158848226,
+    "hypha/apply/projects/tests/test_views.py::TestProjectOverviewView::test_applicants_cannot_access": 0.3156660831300542,
+    "hypha/apply/projects/tests/test_views.py::TestProjectOverviewView::test_staff_can_access": 0.3794998340308666,
+    "hypha/apply/projects/tests/test_views.py::TestRemoveDocumentView::test_remove_document": 0.6011455829720944,
+    "hypha/apply/projects/tests/test_views.py::TestRemoveDocumentView::test_remove_non_existent_document": 0.4119464160175994,
+    "hypha/apply/projects/tests/test_views.py::TestReviewerUserProjectDetailView::test_doesnt_have_access": 0.2568367099156603,
+    "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_fails_when_project_is_locked": 0.21470729308202863,
     "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_fails_when_project_is_not_in_committed_state": 0.11484798201126978,
-    "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_fails_when_project_is_not_in_draft_state": 0.13355279003735632,
-    "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_happy_path": 0.5479208839242347,
-    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_can_skip_draft_report": 1.1730759499478154,
-    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_can_skip_report": 0.6075876889517531,
-    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_can_unskip_report": 0.5367938639828935,
-    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_cant_skip_current_report": 0.5777440299862064,
-    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_cant_skip_submitted_report": 0.5583063070080243,
-    "hypha/apply/projects/tests/test_views.py::TestStaffChangeInvoiceStatus::test_can": 0.38297691801562905,
-    "hypha/apply/projects/tests/test_views.py::TestStaffDetailInvoiceStatus::test_can": 0.3763580619706772,
-    "hypha/apply/projects/tests/test_views.py::TestStaffDetailInvoiceStatus::test_wrong_project_cant": 0.4380866029532626,
-    "hypha/apply/projects/tests/test_views.py::TestStaffEditInvoiceView::test_editing_invoice_keeps_supprting_document": 0.44760341296205297,
-    "hypha/apply/projects/tests/test_views.py::TestStaffEditInvoiceView::test_editing_invoice_remove_supporting_document": 0.37973447202239186,
-    "hypha/apply/projects/tests/test_views.py::TestStaffInoviceDocumentPrivateMedia::test_can_access": 0.2936964560649358,
-    "hypha/apply/projects/tests/test_views.py::TestStaffInoviceDocumentPrivateMedia::test_cant_access_if_project_wrong": 0.43175165401771665,
-    "hypha/apply/projects/tests/test_views.py::TestStaffInvoiceSupportingDocumentPrivateMedia::test_can_access": 0.3190608119475655,
-    "hypha/apply/projects/tests/test_views.py::TestStaffPacketView::test_staff_can_access": 0.27138501399895176,
-    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_can_access_docx": 0.3504460300318897,
-    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_can_access_pdf": 0.7786996809300035,
-    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_response_object_is_docx": 0.30062760994769633,
-    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_response_object_is_pdf": 0.7193821760592982,
-    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailView::test_has_access": 0.4823414050042629,
-    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailView::test_lab_project_renders": 0.31785375997424126,
+    "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_fails_when_project_is_not_in_draft_state": 0.14769441704265773,
+    "hypha/apply/projects/tests/test_views.py::TestSendForApprovalView::test_send_for_approval_happy_path": 0.6986223750282079,
+    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_can_skip_draft_report": 0.45594166696537286,
+    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_can_skip_report": 0.4073158329119906,
+    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_can_unskip_report": 0.33946179191116244,
+    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_cant_skip_current_report": 0.38838975108228624,
+    "hypha/apply/projects/tests/test_views.py::TestSkipReport::test_cant_skip_submitted_report": 0.48223537614103407,
+    "hypha/apply/projects/tests/test_views.py::TestStaffChangeInvoiceStatus::test_can": 0.6096435419749469,
+    "hypha/apply/projects/tests/test_views.py::TestStaffDetailInvoiceStatus::test_can": 0.27719737589359283,
+    "hypha/apply/projects/tests/test_views.py::TestStaffDetailInvoiceStatus::test_wrong_project_cant": 0.3097846240270883,
+    "hypha/apply/projects/tests/test_views.py::TestStaffEditInvoiceView::test_editing_invoice_keeps_supprting_document": 0.3054182920604944,
+    "hypha/apply/projects/tests/test_views.py::TestStaffEditInvoiceView::test_editing_invoice_remove_supporting_document": 0.33160770789254457,
+    "hypha/apply/projects/tests/test_views.py::TestStaffInoviceDocumentPrivateMedia::test_can_access": 0.23991429095622152,
+    "hypha/apply/projects/tests/test_views.py::TestStaffInoviceDocumentPrivateMedia::test_cant_access_if_project_wrong": 0.34424449992366135,
+    "hypha/apply/projects/tests/test_views.py::TestStaffInvoiceSupportingDocumentPrivateMedia::test_can_access": 0.26419045904185623,
+    "hypha/apply/projects/tests/test_views.py::TestStaffPacketView::test_staff_can_access": 0.542893375037238,
+    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_can_access_docx": 0.2526711248792708,
+    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_can_access_pdf": 0.22196891601197422,
+    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_response_object_is_docx": 0.18210512504447252,
+    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailDownloadView::test_response_object_is_pdf": 0.423069374053739,
+    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailView::test_has_access": 0.39090833195950836,
+    "hypha/apply/projects/tests/test_views.py::TestStaffProjectDetailView::test_lab_project_renders": 0.2163510420359671,
     "hypha/apply/projects/tests/test_views.py::TestStaffProjectPDFExport::test_can_access": 0.62907274288591,
     "hypha/apply/projects/tests/test_views.py::TestStaffProjectPDFExport::test_reponse_object_is_pdf": 0.49607601994648576,
-    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_can_access_submitted_report": 0.7769584879279137,
-    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_cant_access_draft_report": 0.19840293598826975,
-    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_cant_access_future_report": 0.255192051990889,
-    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_cant_access_skipped_report": 0.23269819596316665,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSelectDocumentView::test_can_choose": 0.5738112489925697,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_get_page_for_closing_and_complete_project": 0.4495489129330963,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_submit_blank_report": 0.37235652992967516,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_submit_future_report": 0.21137031202670187,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_submit_report_for_closing_and_complete_project": 0.3537826429819688,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_edit_submitted_report": 0.8520211829454638,
+    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_can_access_submitted_report": 0.633369543007575,
+    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_cant_access_draft_report": 0.2028960419120267,
+    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_cant_access_future_report": 0.18843545811250806,
+    "hypha/apply/projects/tests/test_views.py::TestStaffReportDetail::test_cant_access_skipped_report": 0.15538466710131615,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSelectDocumentView::test_can_choose": 0.3985551248770207,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_get_page_for_closing_and_complete_project": 0.36881350108888,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_submit_blank_report": 0.2565447079250589,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_submit_future_report": 0.18748716602567583,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_cant_submit_report_for_closing_and_complete_project": 0.35878841613885015,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_edit_submitted_report": 0.616601207992062,
     "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_get_page": 0.2761989119462669,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_get_page_for_inprogress_project": 0.30920768302166834,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_resubmit_submitted_report": 0.5456070500076748,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_save_report_draft": 0.593715847004205,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_save_report_with_draft": 0.5695443929871544,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_submit_private_report": 0.915130560984835,
-    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_submit_report": 0.6197395659401082,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_get_page_for_inprogress_project": 0.21260137599892914,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_resubmit_submitted_report": 0.38562366797123104,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_save_report_draft": 0.45716437499504536,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_save_report_with_draft": 0.4391555840848014,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_submit_private_report": 0.3835993749089539,
+    "hypha/apply/projects/tests/test_views.py::TestStaffSubmitReport::test_submit_report": 0.5758337920997292,
     "hypha/apply/projects/tests/test_views.py::TestStaffUploadContractView::test_upload_contract": 0.6011504890047945,
     "hypha/apply/projects/tests/test_views.py::TestStaffUploadContractView::test_upload_contract_with_signed_set_to_true": 0.7100242809974588,
-    "hypha/apply/projects/tests/test_views.py::TestSuperUserProjectDetailView::test_has_access": 0.5484025139594451,
-    "hypha/apply/projects/tests/test_views.py::TestUpdateLeadView::test_update_lead": 0.8866756599745713,
-    "hypha/apply/projects/tests/test_views.py::TestUpdateLeadView::test_update_lead_from_none": 0.47700507001718506,
-    "hypha/apply/projects/tests/test_views.py::TestUploadDocumentView::test_upload_document": 0.515808342024684,
-    "hypha/apply/projects/tests/test_views.py::TestUserPacketView::test_owner_can_access": 0.2992278220481239,
-    "hypha/apply/projects/tests/test_views.py::TestUserPacketView::test_user_can_not_access": 0.26117740594781935,
-    "hypha/apply/projects/tests/test_views.py::TestUserProjectDetailView::test_doesnt_have_access": 0.3254027860821225,
-    "hypha/apply/projects/tests/test_views.py::TestUserProjectDetailView::test_owner_has_access": 0.3259011080372147,
-    "hypha/apply/review/tests/test_admin.py::TestReviewFormAdminForm::test_can_create_review_form": 0.009657869988586754,
-    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_comments_block_required": 0.2945974399917759,
-    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_field_label_required": 0.25520775094628334,
-    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_form_creation": 0.1455338349333033,
-    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_name_field_required": 0.2329644819837995,
-    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_recommendation_block_required": 0.7747021200484596,
-    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_visibility_block_required": 0.21067975705955178,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_no_opinion_agree": 0.19246186001691967,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_no_opinion_disagree": 0.10884612600784749,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_not_all_opinion": 0.11614537891000509,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_yes_mixed_opinion": 0.11575934698339552,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_yes_opinion_agree": 0.11971300502773374,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_yes_opinion_disagree": 0.11030994902830571,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_maybe": 0.12379919993691146,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_mixed": 0.14906822703778744,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_no": 0.12176472396822646,
-    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_yes": 0.11144661402795464,
-    "hypha/apply/review/tests/test_views.py::NonStaffReviewOpinionCase::test_nonstaff_cant_post_opinion_to_review": 0.310864329978358,
-    "hypha/apply/review/tests/test_views.py::ReviewDetailTestCase::test_review_detail_opinion": 0.357831519911997,
-    "hypha/apply/review/tests/test_views.py::ReviewDetailTestCase::test_review_detail_recommendation": 0.3013642670121044,
-    "hypha/apply/review/tests/test_views.py::ReviewDetailVisibilityTestCase::test_review_detail_visibility_private": 0.2970685259788297,
-    "hypha/apply/review/tests/test_views.py::ReviewDetailVisibilityTestCase::test_review_detail_visibility_reviewer": 0.34202167904004455,
-    "hypha/apply/review/tests/test_views.py::ReviewListTestCase::test_review_list_opinion": 0.36609676893567666,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_com_external_review_to_ready_for_discussion": 0.5061104790074751,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_ext_external_review_to_ready_for_discussion": 0.5181134380400181,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_external_review_to_ready_for_discussion": 0.4711367250420153,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_initial_state_transition_to_internal_review": 0.5790193770080805,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_internal_review_to_ready_for_discussion": 0.604543466004543,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_proposal_discussion_to_proposal_internal_review": 0.9853507220395841,
-    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_submission_did_not_transition": 0.5740734160062857,
-    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_can_access_form": 0.39152242394629866,
-    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_can_edit_draft_review": 0.4348890779656358,
-    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_can_submit_draft_review": 0.6107410990516655,
-    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_cant_access_wrong_status": 0.3136146839824505,
-    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_cant_resubmit_review": 0.37837116298032925,
-    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_revision_captured_on_review": 0.5985685009509325,
-    "hypha/apply/review/tests/test_views.py::StaffReviewListingTestCase::test_can_access_review_listing": 0.7846224370296113,
-    "hypha/apply/review/tests/test_views.py::StaffReviewListingTestCase::test_draft_reviews_dont_appear": 0.26937482407083735,
-    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_can_add_opinion_to_others_review": 0.48912307200953364,
-    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_can_see_opinion_buttons_on_others_review": 0.3439394780434668,
-    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_cant_see_opinion_buttons_on_self_review": 0.30952121794689447,
-    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_disagree_opinion_redirects_to_review_form": 0.41533110302407295,
-    "hypha/apply/review/tests/test_views.py::StaffReviewsTestCase::test_can_access_other_review": 0.400905784976203,
-    "hypha/apply/review/tests/test_views.py::StaffReviewsTestCase::test_can_access_review": 0.30113394802901894,
-    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_average_score_calculated": 1.075729565054644,
-    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_na_included_in_review_average": 0.6395119820372202,
-    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_na_included_multiple_reviews_average": 1.0374369799974374,
-    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_na_included_reviews_average": 0.5727359459851868,
-    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_no_score_is_NA": 1.0300088659860194,
-    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_score_calculated": 0.6533219820121303,
-    "hypha/apply/review/tests/test_views.py::UserReviewFormTestCase::test_cant_access_form": 0.25336177804274485,
-    "hypha/apply/stream_forms/tests.py::TestBlocks::test_blocks_decode_none": 0.007228136004414409,
-    "hypha/apply/users/tests/test_forms.py::TestEmailChangePasswordForm::test_can_update_slack": 0.013200326007790864,
-    "hypha/apply/users/tests/test_forms.py::TestEmailChangePasswordForm::test_doesnt_error_on_null_slack_field": 0.0055195390013977885,
-    "hypha/apply/users/tests/test_forms.py::TestProfileForm::test_can_change_email": 0.01779464294668287,
-    "hypha/apply/users/tests/test_forms.py::TestProfileForm::test_cant_set_slack_name": 0.01748100999975577,
-    "hypha/apply/users/tests/test_forms.py::TestProfileForm::test_email_unique": 0.012802540964912623,
-    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_auto_prepend_at": 0.015035980031825602,
-    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_can_clear_slack_name": 0.017468615085817873,
-    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_can_set_slack_name": 0.008312862948514521,
-    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_can_set_slack_name_with_trailing_space": 0.009421469003427774,
-    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_cant_change_email": 0.007066971040330827,
-    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_cant_set_slack_name_with_space": 0.007306012965273112,
-    "hypha/apply/users/tests/test_middleware.py::TestTwoFactorAuthenticationMiddleware::test_unverified_user_can_access_allowed_urls": 0.4019151129759848,
-    "hypha/apply/users/tests/test_middleware.py::TestTwoFactorAuthenticationMiddleware::test_unverified_user_redirect": 0.17597110400674865,
-    "hypha/apply/users/tests/test_middleware.py::TestTwoFactorAuthenticationMiddleware::test_verified_user_redirect": 0.26224807498510927,
-    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_not_set_up": 0.13595177192473784,
-    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_page_requires_login": 0.20823094196384773,
-    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_user_email_not_whitelisted": 0.08958898007404059,
-    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_whitelisted_user_can_access_oauth_settings_page": 0.2175020209979266,
-    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_whitelisted_user_can_see_link_to_oauth_settings_page": 0.15973760897759348,
-    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_duplicate_registration_fails": 0.3093521310365759,
-    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_force_login": 0.05383333907229826,
-    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_registration": 0.44261717703193426,
-    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_registration_enabled_has_link": 0.16670985298696905,
-    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_registration_enabled_has_no_link": 0.22098016599193215,
-    "hypha/apply/users/tests/test_utils.py::TestActivationEmail::test_activation_email_includes_link": 0.0479221569839865,
-    "hypha/apply/users/tests/test_utils.py::TestGetUserByEmail::test_multiple_accounts_same_email": 0.01949632097966969,
-    "hypha/apply/users/tests/test_utils.py::TestGetUserByEmail::test_no_account": 0.011489522003103048,
-    "hypha/apply/users/tests/test_utils.py::TestGetUserByEmail::test_single_same_email": 0.02149914304027334,
-    "hypha/apply/users/tests/test_utils.py::TestUserAlreadyRegistered::test_case_sensitive_email": 0.016422334942035377,
-    "hypha/apply/users/tests/test_utils.py::TestUserAlreadyRegistered::test_no_account": 0.003419513057451695,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_staff_cannot_become_superuser": 0.9912864909274504,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_staff_cannot_become_user": 0.11542070895666257,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_superuser_can_become_staff": 0.41650928696617484,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_superuser_cannot_become_superuser": 0.09103467699605972,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_user_cannot_become_other_user": 0.43713872495573014,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_user_cannot_become_staff": 0.9582770059350878,
-    "hypha/apply/users/tests/test_views.py::TestBecome::test_user_cannot_become_superuser": 0.08433592895744368,
-    "hypha/apply/users/tests/test_views.py::TestPasswordReset::test_recieves_email": 0.20671114197466522,
-    "hypha/apply/users/tests/test_views.py::TestProfileView::test_cant_acces_if_not_logged_in": 0.20559451094595715,
-    "hypha/apply/users/tests/test_views.py::TestProfileView::test_cant_set_slack_name": 0.41862104408210143,
-    "hypha/apply/users/tests/test_views.py::TestProfileView::test_doesnt_includes_change_password_for_oauth": 0.4477114590117708,
-    "hypha/apply/users/tests/test_views.py::TestProfileView::test_includes_change_password": 0.17001131200231612,
-    "hypha/apply/users/tests/test_views.py::TestStaffProfileView::test_can_set_slack_name": 0.19539947400335222,
+    "hypha/apply/projects/tests/test_views.py::TestSuperUserProjectDetailView::test_has_access": 0.3404494160786271,
+    "hypha/apply/projects/tests/test_views.py::TestUpdateLeadView::test_update_lead": 0.6488694158615544,
+    "hypha/apply/projects/tests/test_views.py::TestUpdateLeadView::test_update_lead_from_none": 0.353453041985631,
+    "hypha/apply/projects/tests/test_views.py::TestUploadDocumentView::test_upload_document": 0.3495344161055982,
+    "hypha/apply/projects/tests/test_views.py::TestUserPacketView::test_owner_can_access": 0.33545812394004315,
+    "hypha/apply/projects/tests/test_views.py::TestUserPacketView::test_user_can_not_access": 0.20576012507081032,
+    "hypha/apply/projects/tests/test_views.py::TestUserProjectDetailView::test_doesnt_have_access": 0.18093812407460064,
+    "hypha/apply/projects/tests/test_views.py::TestUserProjectDetailView::test_owner_has_access": 0.26805891608819366,
+    "hypha/apply/review/tests/test_admin.py::TestReviewFormAdminForm::test_can_create_review_form": 0.011869458016008139,
+    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_comments_block_required": 0.20544070890173316,
+    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_field_label_required": 0.14705174998380244,
+    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_form_creation": 0.09497791691683233,
+    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_name_field_required": 0.10215525003150105,
+    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_recommendation_block_required": 0.10985474998597056,
+    "hypha/apply/review/tests/test_admin_views.py::TestCreateReviewFormView::test_visibility_block_required": 0.11987654096446931,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_no_opinion_agree": 0.13917420711368322,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_no_opinion_disagree": 0.3636568750953302,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_not_all_opinion": 0.16282629093620926,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_yes_mixed_opinion": 0.14262116607278585,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_yes_opinion_agree": 0.11128175002522767,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_review_yes_opinion_disagree": 0.12608304212335497,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_maybe": 0.10440991690848023,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_mixed": 0.1266885829390958,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_no": 0.1545254159718752,
+    "hypha/apply/review/tests/test_models.py::TestReviewQueryset::test_reviews_yes": 0.11492637603078038,
+    "hypha/apply/review/tests/test_views.py::NonStaffReviewOpinionCase::test_nonstaff_cant_post_opinion_to_review": 0.25852475001011044,
+    "hypha/apply/review/tests/test_views.py::ReviewDetailTestCase::test_review_detail_opinion": 0.3494584161089733,
+    "hypha/apply/review/tests/test_views.py::ReviewDetailTestCase::test_review_detail_recommendation": 0.24479608400724828,
+    "hypha/apply/review/tests/test_views.py::ReviewDetailVisibilityTestCase::test_review_detail_visibility_private": 0.21798725111875683,
+    "hypha/apply/review/tests/test_views.py::ReviewDetailVisibilityTestCase::test_review_detail_visibility_reviewer": 0.2873614178970456,
+    "hypha/apply/review/tests/test_views.py::ReviewListTestCase::test_review_list_opinion": 0.296927543124184,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_com_external_review_to_ready_for_discussion": 0.3388680829666555,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_ext_external_review_to_ready_for_discussion": 0.3326782069634646,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_external_review_to_ready_for_discussion": 0.34529587405268103,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_initial_state_transition_to_internal_review": 0.6244569580303505,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_internal_review_to_ready_for_discussion": 0.36454141791909933,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_proposal_discussion_to_proposal_internal_review": 0.4163980430457741,
+    "hypha/apply/review/tests/test_views.py::ReviewWorkFlowActionTestCase::test_submission_did_not_transition": 0.24663300102110952,
+    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_can_access_form": 0.274870999972336,
+    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_can_edit_draft_review": 0.23591608414426446,
+    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_can_submit_draft_review": 0.44210195809137076,
+    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_cant_access_wrong_status": 0.26254008314572275,
+    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_cant_resubmit_review": 0.1984747510869056,
+    "hypha/apply/review/tests/test_views.py::StaffReviewFormTestCase::test_revision_captured_on_review": 0.38767075003124774,
+    "hypha/apply/review/tests/test_views.py::StaffReviewListingTestCase::test_can_access_review_listing": 0.3263881659368053,
+    "hypha/apply/review/tests/test_views.py::StaffReviewListingTestCase::test_draft_reviews_dont_appear": 0.2494624579558149,
+    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_can_add_opinion_to_others_review": 0.49202100094407797,
+    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_can_see_opinion_buttons_on_others_review": 0.18765587511006743,
+    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_cant_see_opinion_buttons_on_self_review": 0.2060839991318062,
+    "hypha/apply/review/tests/test_views.py::StaffReviewOpinionCase::test_disagree_opinion_redirects_to_review_form": 0.2845542909344658,
+    "hypha/apply/review/tests/test_views.py::StaffReviewsTestCase::test_can_access_other_review": 0.2563229991355911,
+    "hypha/apply/review/tests/test_views.py::StaffReviewsTestCase::test_can_access_review": 0.2578002088703215,
+    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_average_score_calculated": 0.6326144568156451,
+    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_na_included_in_review_average": 0.4118264999706298,
+    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_na_included_multiple_reviews_average": 0.8284147089580074,
+    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_na_included_reviews_average": 0.4461417091079056,
+    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_no_score_is_NA": 0.37893874989822507,
+    "hypha/apply/review/tests/test_views.py::TestReviewScore::test_score_calculated": 0.5917663330910727,
+    "hypha/apply/review/tests/test_views.py::UserReviewFormTestCase::test_cant_access_form": 0.11791095905937254,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens0-date_field-expected0]": 0.0008633758407086134,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens1-date_field-expected1]": 0.2487529581412673,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens10-date_field-expected10]": 0.00032166705932468176,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens11-date_field-expected11]": 0.0003079997841268778,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens2-date_field-expected2]": 0.0010131660383194685,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens3-date_field-expected3]": 0.00038766697980463505,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens4-date_field-expected4]": 0.0005627501523122191,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens5-date_field-expected5]": 0.00032462505623698235,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens6-date_field-expected6]": 0.000332833849824965,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens7-date_field-expected7]": 0.00042587402276694775,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens8-date_field-expected8]": 0.0003458750434219837,
+    "hypha/apply/search/tests/test_filters.py::test_date_filter_tokens_to_q_obj[tokens9-date_field-expected9]": 0.0003647500416263938,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[\"hello world\"-expected8]": 0.000824082875624299,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[#12 #13-expected1]": 0.0006767080631107092,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[#12 text after-expected3]": 0.00036995799746364355,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[-expected0]": 0.0003527089720591903,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[hello-expected4]": 0.0004931669682264328,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[submitted:\"hello world\"-expected7]": 0.0003858740674331784,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[submitted:2023-12-02 hello-expected5]": 0.0007135840132832527,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[submitted:>2023-12-02 submitted:<2023-12-01 hello-expected6]": 0.0004955840995535254,
+    "hypha/apply/search/tests/test_query_parser.py::test_parse_search_query[text before #12-expected2]": 0.0004830829566344619,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[1111-12-89-expected7]": 0.0003257909556850791,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[2023-12-expected5]": 0.0004110001027584076,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[2023-24-expected6]": 0.0003435820108279586,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[2023-expected8]": 0.00032008392736315727,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[<2023-12-01-expected1]": 0.0005006259307265282,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[<=2023-12-01-expected2]": 0.0008225421188399196,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[>2023-12-02-expected0]": 0.0006244999822229147,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[>2023-expected9]": 0.00032824999652802944,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[>=2023-12-01-expected3]": 0.00035345798823982477,
+    "hypha/apply/search/tests/test_query_parser.py::test_tokenize_date_filter_value[>=2023-12-expected4]": 0.0005740410415455699,
+    "hypha/apply/stream_forms/tests.py::TestBlocks::test_blocks_decode_none": 0.007605333114042878,
+    "hypha/apply/users/tests/test_forms.py::TestEmailChangePasswordForm::test_can_update_slack": 0.02227200078777969,
+    "hypha/apply/users/tests/test_forms.py::TestEmailChangePasswordForm::test_doesnt_error_on_null_slack_field": 0.009237498976290226,
+    "hypha/apply/users/tests/test_forms.py::TestProfileForm::test_can_change_email": 0.01382191595621407,
+    "hypha/apply/users/tests/test_forms.py::TestProfileForm::test_cant_set_slack_name": 0.013793665915727615,
+    "hypha/apply/users/tests/test_forms.py::TestProfileForm::test_email_unique": 0.032328416127711535,
+    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_auto_prepend_at": 0.017780249007046223,
+    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_can_clear_slack_name": 0.02372016606386751,
+    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_can_set_slack_name": 0.005592416040599346,
+    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_can_set_slack_name_with_trailing_space": 0.011761041940189898,
+    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_cant_change_email": 0.008614414953626692,
+    "hypha/apply/users/tests/test_forms.py::TestStaffProfileForm::test_cant_set_slack_name_with_space": 0.016710375086404383,
+    "hypha/apply/users/tests/test_middleware.py::TestTwoFactorAuthenticationMiddleware::test_unverified_user_can_access_allowed_urls": 0.283555917092599,
+    "hypha/apply/users/tests/test_middleware.py::TestTwoFactorAuthenticationMiddleware::test_unverified_user_redirect": 0.11384358303621411,
+    "hypha/apply/users/tests/test_middleware.py::TestTwoFactorAuthenticationMiddleware::test_verified_user_redirect": 0.11694704205729067,
+    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_not_set_up": 0.0737853329628706,
+    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_page_requires_login": 0.059891041833907366,
+    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_user_email_not_whitelisted": 0.2785152919823304,
+    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_whitelisted_user_can_access_oauth_settings_page": 0.07490591693203896,
+    "hypha/apply/users/tests/test_oauth_access.py::TestOAuthAccess::test_oauth_whitelisted_user_can_see_link_to_oauth_settings_page": 0.08536875003483146,
+    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_duplicate_registration_fails": 1.1095537910005078,
+    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_force_login": 0.07362799998372793,
+    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_registration": 0.05405937402974814,
+    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_registration_enabled_has_link": 0.11622841598000377,
+    "hypha/apply/users/tests/test_registration.py::TestRegistration::test_registration_enabled_has_no_link": 0.07047733408398926,
+    "hypha/apply/users/tests/test_utils.py::TestActivationEmail::test_activation_email_includes_link": 0.018656583968549967,
+    "hypha/apply/users/tests/test_utils.py::TestGetUserByEmail::test_multiple_accounts_same_email": 0.264990124036558,
+    "hypha/apply/users/tests/test_utils.py::TestGetUserByEmail::test_no_account": 0.006179541000165045,
+    "hypha/apply/users/tests/test_utils.py::TestGetUserByEmail::test_single_same_email": 0.007662498974241316,
+    "hypha/apply/users/tests/test_utils.py::TestUserAlreadyRegistered::test_case_sensitive_email": 0.013083998928777874,
+    "hypha/apply/users/tests/test_utils.py::TestUserAlreadyRegistered::test_no_account": 0.00882116798311472,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_staff_cannot_become_superuser": 0.3818438759772107,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_staff_cannot_become_user": 0.07258499995805323,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_superuser_can_become_staff": 0.3476316658779979,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_superuser_cannot_become_superuser": 0.2632557920878753,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_user_cannot_become_other_user": 0.06921558303292841,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_user_cannot_become_staff": 0.09651295910589397,
+    "hypha/apply/users/tests/test_views.py::TestBecome::test_user_cannot_become_superuser": 0.05581383407115936,
+    "hypha/apply/users/tests/test_views.py::TestPasswordReset::test_recieves_email": 0.546951541909948,
+    "hypha/apply/users/tests/test_views.py::TestProfileView::test_cant_acces_if_not_logged_in": 0.10695858299732208,
+    "hypha/apply/users/tests/test_views.py::TestProfileView::test_cant_set_slack_name": 0.07533599890302867,
+    "hypha/apply/users/tests/test_views.py::TestProfileView::test_doesnt_includes_change_password_for_oauth": 0.12171199999283999,
+    "hypha/apply/users/tests/test_views.py::TestProfileView::test_includes_change_password": 0.0876262920210138,
+    "hypha/apply/users/tests/test_views.py::TestStaffProfileView::test_can_set_slack_name": 0.10759624990168959,
     "hypha/apply/utils/tests/test_templatetags.py::WebpackTagsTestCase::test_render_bundle_calls_webpack_loader_when_enabled": 0.002394415088929236,
     "hypha/apply/utils/tests/test_templatetags.py::WebpackTagsTestCase::test_render_bundle_does_not_call_webpack_loader_when_disabled": 0.002298294915817678,
-    "hypha/apply/utils/tests/test_views.py::TestDelegatedViewMixin::test__access_if_no_object": 0.006868094962555915,
-    "hypha/apply/utils/tests/test_views.py::TestDelegatedViewMixin::test_parent_access_if_no_object": 0.005700918030925095,
-    "hypha/core/tests/test_utils.py::test_markdown_to_html[**bold**-<p><strong>bold</strong></p>]": 0.003791889001149684,
-    "hypha/core/tests/test_utils.py::test_markdown_to_html[Header1 | Header2\\n------ | ------\\nCell1  | Cell2-<table><thead><tr><th>Header1</th><th>Header2</th></tr></thead><tbody><tr><td>Cell1</td><td>Cell2</td></tr></tbody></table>]": 0.9974266679491848,
-    "hypha/core/tests/test_utils.py::test_markdown_to_html[~~strike~~-<p><del>strike</del></p>]": 1.009369443927426,
-    "hypha/public/mailchimp/tests/test_views.py::TestNewsletterView::test_can_subscribe": 0.7270944690681063,
-    "hypha/public/mailchimp/tests/test_views.py::TestNewsletterView::test_error_in_form": 0.22638205403927714,
-    "hypha/public/mailchimp/tests/test_views.py::TestNewsletterView::test_redirected_home_if_get": 0.8732037750305608,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_access_categories_and_options": 0.013570434995926917,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_decompress_data": 0.005014302907511592,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_decompress_multiple_data": 0.0060909989988431334,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_get_data_from_form": 0.004624290042556822,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_get_multiple_categories": 0.005849763983860612,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_get_multiple_data_from_form": 0.0072616980178281665,
-    "hypha/public/projects/tests.py::TestCategoriesWidget::test_init_has_no_queries": 0.003984658978879452
+    "hypha/apply/utils/tests/test_views.py::TestDelegatedViewMixin::test__access_if_no_object": 0.005382082890719175,
+    "hypha/apply/utils/tests/test_views.py::TestDelegatedViewMixin::test_parent_access_if_no_object": 0.0018752510659396648,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_add_to_query": 0.0028106679674237967,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_add_to_query_only_query_string": 0.42328820808324963,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_construct_query_string": 0.018966666888445616,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_construct_query_string_only_query_string": 0.0007347071077674627,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_modify_query": 0.0037198332138359547,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_modify_query_only_query_string": 0.002193792024627328,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_remove_from_query": 0.0020272919209674,
+    "hypha/core/templatetags/tests/test_query_params.py::QueryParamsTemplateTagTests::test_remove_from_query_only_query_string": 0.002454749890603125,
+    "hypha/core/tests/test_utils.py::test_markdown_to_html[**bold**-<p><strong>bold</strong></p>]": 0.001456082914955914,
+    "hypha/core/tests/test_utils.py::test_markdown_to_html[Header1 | Header2\\n------ | ------\\nCell1  | Cell2-<table><thead><tr><th>Header1</th><th>Header2</th></tr></thead><tbody><tr><td>Cell1</td><td>Cell2</td></tr></tbody></table>]": 0.46120237396098673,
+    "hypha/core/tests/test_utils.py::test_markdown_to_html[~~strike~~-<p><del>strike</del></p>]": 0.4606062079546973,
+    "hypha/public/mailchimp/tests/test_views.py::TestNewsletterView::test_can_subscribe": 0.2957030009711161,
+    "hypha/public/mailchimp/tests/test_views.py::TestNewsletterView::test_error_in_form": 0.14298324997071177,
+    "hypha/public/mailchimp/tests/test_views.py::TestNewsletterView::test_redirected_home_if_get": 0.39467079006135464,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_access_categories_and_options": 0.012230750056914985,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_decompress_data": 0.019092082977294922,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_decompress_multiple_data": 0.00521787500474602,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_get_data_from_form": 0.004270416800864041,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_get_multiple_categories": 0.007622041855938733,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_can_get_multiple_data_from_form": 0.006844124058261514,
+    "hypha/public/projects/tests.py::TestCategoriesWidget::test_init_has_no_queries": 0.002373542985878885
 }
\ No newline at end of file
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index ebdcaab8c5c83454aaca4a37604b8e52bbf566f7..b09131edc2177c8ad5b34da2c406632a96d4ef7d 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,5 +1,3 @@
 {
-    "recommendations": [
-        "njpwerner.autodocstring"
-    ]
+  "recommendations": ["njpwerner.autodocstring"]
 }
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 1a82eb43a23ff0981e2615f3758494bcb8dd72f9..8fadbd175bd52af6b453317292e03050dbdc0a74 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -1,19 +1,16 @@
 {
-    // Use IntelliSense to learn about possible attributes.
-    // Hover to view descriptions of existing attributes.
-    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "name": "Python: Django",
-            "type": "python",
-            "request": "launch",
-            "program": "${workspaceFolder}/manage.py",
-            "args": [
-                "runserver",
-                "0.0.0.0:9001"
-            ],
-            "django": true
-        }
-    ]
+  // Use IntelliSense to learn about possible attributes.
+  // Hover to view descriptions of existing attributes.
+  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "name": "Python: Django",
+      "type": "python",
+      "request": "launch",
+      "program": "${workspaceFolder}/manage.py",
+      "args": ["runserver", "0.0.0.0:9001"],
+      "django": true
+    }
+  ]
 }
diff --git a/.vscode/settings.json b/.vscode/settings.json
index f24ba4be3c2a54053b5604d4e6319fcffea50629..06d6178f35b640c810350cb1f0d275b2b416e854 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,11 +1,11 @@
 {
-    "makefile.extensionOutputFolder": "./.vscode",
-    "cSpell.words": [
-        "Anymail",
-        "coreutils",
-        "modelcluster",
-        "pagedown",
-        "WAGTAILADMIN",
-        "wagtailcore"
-    ]
+  "makefile.extensionOutputFolder": "./.vscode",
+  "cSpell.words": [
+    "Anymail",
+    "coreutils",
+    "modelcluster",
+    "pagedown",
+    "WAGTAILADMIN",
+    "wagtailcore"
+  ]
 }
diff --git a/Makefile b/Makefile
index 190d8390fb09ecd4de6cafc4be6d9330401bfe61..0f28276fb3ea563061eed8e4f33408c7f6b9bdac 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,7 @@ help:
 	@echo "  make build              build js and css resources for development"
 	@echo "  make cov-html           generate html coverage report"
 	@echo "  make lint               run css, js and python linting."
+	@echo "  make fmt                run code formatters on all code."
 	@echo "  make lint-fix           try fixing plausible python linting issues."
 	@echo "  make py-test            run all python tests and display coverage"
 	@echo "  make test               run linting and test and generate html coverage report"
@@ -28,6 +29,14 @@ build:
 	@echo "Build js and css resources for development."
 	npm run dev:build
 
+.PHONY: fmt
+fmt:
+	@echo "run code formatters on all code."
+	python -m ruff --fix .
+	python -m black .
+	npx prettier . --write
+	djhtml hypha/
+
 .PHONY: cov-html
 cov-html:
 ifneq ("$(wildcard .coverage)","")
@@ -43,9 +52,13 @@ endif
 lint:
 	@echo "Checking python code style with ruff"
 	ruff .
+	black . --check
+	@echo "Checking html file indendation."
+	djhtml hypha/ --check
 	@echo "Checking js and css code style."
 	npm run lint
 
+
 .PHONY: lint-fix
 lint-fix:
 	@echo "Try fixing plausible python linting issues."
diff --git a/addressfield/fields.py b/addressfield/fields.py
index 052bd49b01b2e309c0a5c73e7f642cfa528b213b..5c872c90bf86902acc38a511cada799eb7676bf5 100644
--- a/addressfield/fields.py
+++ b/addressfield/fields.py
@@ -8,13 +8,18 @@ from .widgets import AddressWidget
 
 basepath = path.dirname(__file__)
 filepath = path.abspath(path.join(basepath, "static", "addressfield.min.json"))
-with open(filepath, encoding='utf8') as address_data:
-    countries = json.load(address_data)['options']
+with open(filepath, encoding="utf8") as address_data:
+    countries = json.load(address_data)["options"]
 
-VALIDATION_DATA = {country['iso']: country for country in countries}
+VALIDATION_DATA = {country["iso"]: country for country in countries}
 
 ADDRESS_FIELDS_ORDER = [
-    'thoroughfare', 'premise', 'localityname', 'administrativearea', 'postalcode', 'country'
+    "thoroughfare",
+    "premise",
+    "localityname",
+    "administrativearea",
+    "postalcode",
+    "country",
 ]
 
 
@@ -35,22 +40,27 @@ class AddressField(forms.CharField):
     The field stores the address in a flattened form,
     so the locality components are on the same level as country or premise
     """
+
     widget = AddressWidget
     data = VALIDATION_DATA
 
     def clean(self, value, **kwargs):
-        country = value['country']
+        country = value["country"]
         try:
             country_data = self.data[country]
         except KeyError:
-            raise ValidationError('Invalid country selected') from None
+            raise ValidationError("Invalid country selected") from None
 
-        fields = flatten_data(country_data['fields'])
+        fields = flatten_data(country_data["fields"])
 
-        missing_fields = set(country_data['required']) - {field for field, value in value.items() if value}
+        missing_fields = set(country_data["required"]) - {
+            field for field, value in value.items() if value
+        }
         if missing_fields:
-            missing_field_name = [fields[field]['label'] for field in missing_fields]
-            raise ValidationError('Please provide data for: {}'.format(', '.join(missing_field_name)))
+            missing_field_name = [fields[field]["label"] for field in missing_fields]
+            raise ValidationError(
+                "Please provide data for: {}".format(", ".join(missing_field_name))
+            )
 
         return super().clean(value, **kwargs)
 
diff --git a/addressfield/static/address_form.js b/addressfield/static/address_form.js
index dd240bbc32fcd165841d6829ea24f12b86448931..34dd405a319eced80c2ae4bb25768d25b60e4b90 100644
--- a/addressfield/static/address_form.js
+++ b/addressfield/static/address_form.js
@@ -1,10 +1,10 @@
 (function ($) {
     // add the require attribute to the field configs
-    function addRequiredToKey(fields, findKey){
+    function addRequiredToKey(fields, findKey) {
         $.each(fields, (index, value) => {
             var fieldName = Object.keys(value)[0];
             var data = value[fieldName];
-            if (fieldName===findKey) {
+            if (fieldName === findKey) {
                 data.required = true;
             } else if (Array.isArray(data)) {
                 // Handle nested fields
@@ -13,10 +13,9 @@
         });
     }
 
-
     // hook into the transform to update with the required attribute
     var oldTransform = $.fn.addressfield.transform;
-    $.fn.addressfield.transform = function(data) {
+    $.fn.addressfield.transform = function (data) {
         var mappedData = oldTransform.call(this, data);
         $.each(mappedData, (key, value) => {
             $.each(value.required, (index, field) => {
@@ -26,27 +25,27 @@
         return mappedData;
     };
 
-    function labelFor(field){
-        return $('label[for="'+ $(field).attr('id') +'"]');
+    function labelFor(field) {
+        return $('label[for="' + $(field).attr("id") + '"]');
     }
 
-    function makeFieldNotRequired(field){
+    function makeFieldNotRequired(field) {
         var $field = $(field);
-        $field.removeAttr('required');
+        $field.removeAttr("required");
         var $label = labelFor($field);
-        $label.children('span').remove();
+        $label.children("span").remove();
     }
 
-    function makeFieldRequired(field){
+    function makeFieldRequired(field) {
         var $field = $(field);
-        $field.prop('required', true);
+        $field.prop("required", true);
         var $label = labelFor($field);
         $label.append('<span class="form__required">*</span>');
     }
 
     // Hook into the validate process to update the required display
     var oldValidate = $.fn.addressfield.validate;
-    $.fn.addressfield.validate = function(field, config) {
+    $.fn.addressfield.validate = function (field, config) {
         if (config.required) {
             makeFieldRequired(this);
         } else {
@@ -59,7 +58,7 @@
 
     // Hook into the select builder to update the display
     var oldConvertToSelect = $.fn.addressfield.convertToSelect;
-    $.fn.addressfield.convertToSelect = function() {
+    $.fn.addressfield.convertToSelect = function () {
         var $select = oldConvertToSelect.call(this);
         $select.wrap(selectWrap);
         return $select;
@@ -67,16 +66,16 @@
 
     // Hook into the text builder to update the display
     var oldConvertToText = $.fn.addressfield.convertToText;
-    $.fn.addressfield.convertToText = function() {
+    $.fn.addressfield.convertToText = function () {
         var $text = oldConvertToText.call(this);
         $text.unwrap();
         return $text;
     };
 
     $(document).ready(function formReady() {
-        $('.form div.address').each(function() {
-            $('.form div#' + this.id).addressfield({
-                json: '/static/addressfield.min.json',
+        $(".form div.address").each(function () {
+            $(".form div#" + this.id).addressfield({
+                json: "/static/addressfield.min.json",
                 fields: {
                     country: ".country",
                     thoroughfare: ".thoroughfare",
@@ -84,9 +83,9 @@
                     locality: ".locality",
                     localityname: ".localityname",
                     administrativearea: ".administrativearea",
-                    postalcode: ".postalcode"
-                }
+                    postalcode: ".postalcode",
+                },
             });
-        })
+        });
     });
 })(jQuery);
diff --git a/addressfield/static/addressfield.min.json b/addressfield/static/addressfield.min.json
index b9af099e0e7b0d19c37fce9744fff780a0bde00b..293ff9f83120a39f3b6676ec1b6a1d1fb82ff39f 100644
--- a/addressfield/static/addressfield.min.json
+++ b/addressfield/static/addressfield.min.json
@@ -1 +1,5033 @@
-{"label":"Country","options":[{"label":"Afghanistan","iso":"AF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"1001"}}]}],"required":["localityname","thoroughfare"]},{"label":"Aland Islands","iso":"AX","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code","format":"^22\\d{3}$","eg":"22150"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Albania","iso":"AL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Algeria","iso":"DZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"American Samoa","iso":"AS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Andorra","iso":"AD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Angola","iso":"AO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Anguilla","iso":"AI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Antarctica","iso":"AQ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Antigua and Barbuda","iso":"AG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Argentina","iso":"AR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^((?:[A-HJ-NP-Z])?\\d{4})([A-Z]{3})?$","eg":"B1921"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"B":"Buenos Aires"},{"K":"Catamarca"},{"H":"Chaco"},{"U":"Chubut"},{"C":"Ciudad de Buenos Aires"},{"X":"C\u00f3rdoba"},{"W":"Corrientes"},{"E":"Entre R\u00edos"},{"P":"Formosa"},{"Y":"Jujuy"},{"L":"La Pampa"},{"F":"La Rioja"},{"M":"Mendoza"},{"N":"Misiones"},{"Q":"Neuqu\u00e9n"},{"R":"R\u00edo Negro"},{"A":"Salta"},{"J":"San Juan"},{"D":"San Luis"},{"Z":"Santa Cruz"},{"S":"Santa Fe"},{"G":"Santiago del Estero"},{"V":"Tierra del Fuego"},{"T":"Tucum\u00e1n"}]}}]}],"required":["localityname","thoroughfare"]},{"label":"Armenia","iso":"AM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","thoroughfare"]},{"label":"Aruba","iso":"AW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Australia","iso":"AU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City/suburb"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"ACT":"Australian Capital Territory"},{"NSW":"New South Wales"},{"NT":"Northern Territory"},{"QLD":"Queensland"},{"SA":"South Australia"},{"TAS":"Tasmania"},{"VIC":"Victoria"},{"WA":"Western Australia"}]}},{"postalcode":{"label":"Postcode","format":"^\\d{4}$","eg":"2000"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Austria","iso":"AT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"3741"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Azerbaijan","iso":"AZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bahamas","iso":"BS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bahrain","iso":"BH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bangladesh","iso":"BD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Barbados","iso":"BB","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Belarus","iso":"BY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","thoroughfare"]},{"label":"Belgium","iso":"BE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"4000"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Belize","iso":"BZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}}]}],"required":["localityname","thoroughfare"]},{"label":"Benin","iso":"BJ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bermuda","iso":"BM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bhutan","iso":"BT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bolivia","iso":"BO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bosnia and Herzegovina","iso":"BA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Botswana","iso":"BW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bouvet Island","iso":"BV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Brazil","iso":"BR","fields":[{"thoroughfare":{"label":"Thoroughfare"}},{"premise":{"label":"Complement"}},{"locality":[{"dependent_localityname":{"label":"Neighborhood"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"AC":"Acre"},{"AL":"Alagoas"},{"AM":"Amazonas"},{"AP":"Amapa"},{"BA":"Bahia"},{"CE":"Ceara"},{"DF":"Distrito Federal"},{"ES":"Espirito Santo"},{"GO":"Goias"},{"MA":"Maranhao"},{"MG":"Minas Gerais"},{"MS":"Mato Grosso do Sul"},{"MT":"Mato Grosso"},{"PA":"Para"},{"PB":"Paraiba"},{"PE":"Pernambuco"},{"PI":"Piaui"},{"PR":"Parana"},{"RJ":"Rio de Janeiro"},{"RN":"Rio Grande do Norte"},{"RO":"Rondonia"},{"RR":"Roraima"},{"RS":"Rio Grande do Sul"},{"SC":"Santa Catarina"},{"SE":"Sergipe"},{"SP":"Sao Paulo"},{"TO":"Tocantins"}]}},{"postalcode":{"label":"Postal code","format":"^\\d{5}[\\-]?\\d{3}$","eg":"10025-345"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"British Indian Ocean Territory","iso":"IO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"British Virgin Islands","iso":"VG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Brunei","iso":"BN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Bulgaria","iso":"BG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Burkina Faso","iso":"BF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Burundi","iso":"BI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cambodia","iso":"KH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cameroon","iso":"CM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Canada","iso":"CA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"AB":"Alberta"},{"BC":"British Columbia"},{"MB":"Manitoba"},{"NB":"New Brunswick"},{"NL":"Newfoundland"},{"NT":"Northwest Territories"},{"NS":"Nova Scotia"},{"NU":"Nunavut"},{"ON":"Ontario"},{"PE":"Prince Edward Island"},{"QC":"Quebec"},{"SK":"Saskatchewan"},{"YT":"Yukon Territory"}]}},{"postalcode":{"label":"Postal code","format":"^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ ]?\\d[ABCEGHJ-NPRSTV-Z]\\d$","eg":"K1A 0B1"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Cape Verde","iso":"CV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cayman Islands","iso":"KY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"administrativearea":{"label":"Island"}}]}],"required":["administrativearea","thoroughfare"]},{"label":"Central African Republic","iso":"CF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Chad","iso":"TD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Chile","iso":"CL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"AI":"Ays\u00e9n del General Carlos Ib\u00e1\u00f1ez del Campo"},{"AN":"Antofagasta"},{"AR":"Araucan\u00eda"},{"AP":"Arica y Parinacota"},{"AT":"Atacama"},{"BI":"Biob\u00edo"},{"CO":"Coquimbo"},{"LI":"Libertador General Bernardo O'Higgins"},{"LL":"Los Lagos"},{"LR":"Los R\u00edos"},{"MA":"Magallanes y de la Ant\u00e1rtica Chilena"},{"ML":"Maule"},{"RM":"Metropolitana de Santiago"},{"TA":"Tarapac\u00e1"},{"VS":"Valpara\u00edso"}]}}]}],"required":["localityname","thoroughfare"]},{"label":"China","iso":"CN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"District"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"BJ":"Beijing"},{"SH":"Shanghai"},{"GD":"Guangdong"},{"TJ":"Tianjin"},{"HE":"Hebei"},{"SX":"Shanxi"},{"NM":"Inner Mongolia"},{"LN":"Liaoning"},{"JL":"Jilin"},{"HL":"Heilongjiang"},{"JS":"Jiangsu"},{"ZJ":"Zhejiang"},{"AH":"Anhui"},{"FJ":"Fujian"},{"JX":"Jiangxi"},{"SD":"Shandong"},{"HA":"Henan"},{"HB":"Hubei"},{"HN":"Hunan"},{"GX":"Guangxi"},{"HI":"Hainan"},{"CQ":"Chongqing"},{"SC":"Sichuan"},{"GZ":"Guizhou"},{"YN":"Yunnan"},{"XZ":"Tibet"},{"SN":"Shaanxi"},{"GS":"Gansu"},{"QH":"Qinghai"},{"NX":"Ningxia Hui"},{"XJ":"Xinjiang Uyghur"}]}},{"postalcode":{"label":"Postal code","format":"^\\d{6}$","eg":"101200"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Christmas Island","iso":"CX","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cocos (Keeling) Islands","iso":"CC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Colombia","iso":"CO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Comoros","iso":"KM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Congo (Brazzaville)","iso":"CG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Congo (Kinshasa)","iso":"CD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cook Islands","iso":"CK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Costa Rica","iso":"CR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cuba","iso":"CU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Croatia","iso":"HR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cura\u00c1ao","iso":"CW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Cyprus","iso":"CY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Czech Republic","iso":"CZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Denmark","iso":"DK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"8660"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Djibouti","iso":"DJ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Dominica","iso":"DM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Dominican Republic","iso":"DO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}}]}],"required":["localityname","thoroughfare"]},{"label":"Ecuador","iso":"EC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Egypt","iso":"EG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Governorate","options":[{"":"--"},{"ALX":"Alexandria"},{"ASN":"Aswan"},{"AST":"Asyut"},{"BH":"Beheira"},{"BNS":"Beni Suef"},{"C":"Cairo"},{"DK":"Dakahlia"},{"DT":"Damietta"},{"FYM":"Faiyum"},{"GH":"Gharbia"},{"GZ":"Giza"},{"IS":"Ismailia"},{"KFS":"Kafr el-Sheikh"},{"MT":"Matruh"},{"MN":"Minya"},{"MNF":"Monufia"},{"WAD":"New Valley"},{"SIN":"North Sinai"},{"PTS":"Port Said"},{"KB":"Qalyubia"},{"KN":"Qena"},{"BA":"Red Sea"},{"SHR":"Sharqia"},{"SHG":"Sohag"},{"JS":"South Sinai"},{"SUZ":"Suez"},{"LX":"Luxor"}]}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"El Salvador","iso":"SV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Equatorial Guinea","iso":"GQ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Eritrea","iso":"ER","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Estonia","iso":"EE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Ethiopia","iso":"ET","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Falkland Islands","iso":"FK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Faroe Islands","iso":"FO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Fiji","iso":"FJ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}}]}],"required":["localityname","thoroughfare"]},{"label":"Finland","iso":"FI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{5}$","eg":"00550"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"France","iso":"FR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{2}[ ]?\\d{3}$","eg":"75002"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"French Guiana","iso":"GF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78]3\\d{2}$","eg":"97300"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"French Polynesia","iso":"PF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"French Southern Territories","iso":"TF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Gabon","iso":"GA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Gambia","iso":"GM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Georgia","iso":"GE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Germany","iso":"DE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{5}$","eg":"60322"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Ghana","iso":"GH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Gibraltar","iso":"GI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Greece","iso":"GR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{3} ?\\d{2}$","eg":"151 24"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Greenland","iso":"GL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^39\\d{2}$","eg":"3911"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Grenada","iso":"GD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Guadeloupe","iso":"GP","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78][01]\\d{2}$","eg":"97100"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Guam","iso":"GU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Guatemala","iso":"GT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Guernsey","iso":"GG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^GY\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$","eg":"GY1 1AA"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Guinea","iso":"GN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Guinea-Bissau","iso":"GW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Guyana","iso":"GY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Haiti","iso":"HT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Heard Island and McDonald Islands","iso":"HM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Honduras","iso":"HN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Hong Kong S.A.R., China","iso":"HK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"District"}},{"administrativearea":{"label":"Area","options":[{"":"--"},{"Kowloon":"Kowloon"},{"Hong Kong Island":"Hong Kong Island"},{"New Territories":"New Territories"}]}}]}],"required":["administrativearea","thoroughfare"]},{"label":"Hungary","iso":"HU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Iceland","iso":"IS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"India","iso":"IN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"AP":"Andhra Pradesh"},{"AR":"Arunachal Pradesh"},{"AS":"Assam"},{"BR":"Bihar"},{"CT":"Chhattisgarh"},{"GA":"Goa"},{"GJ":"Gujarat"},{"HR":"Haryana"},{"HP":"Himachal Pradesh"},{"JK":"Jammu and Kashmir"},{"JH":"Jharkhand"},{"KA":"Karnataka"},{"KL":"Kerala"},{"MP":"Madhya Pradesh"},{"MH":"Maharashtra"},{"MN":"Manipur"},{"ML":"Meghalaya"},{"MZ":"Mizoram"},{"NL":"Nagaland"},{"OR":"Odisha"},{"PB":"Punjab"},{"RJ":"Rajasthan"},{"SK":"Sikkim"},{"TN":"Tamil Nadu"},{"TR":"Tripura"},{"UP":"Uttar Pradesh"},{"UT":"Uttarakhand"},{"WB":"West Bengal"},{"":"--"},{"AN":"Andaman and Nicobar Islands"},{"CH":"Chandigarh"},{"DN":"Dadra and Nagar Haveli"},{"DD":"Daman and Diu"},{"LD":"Lakshadweep"},{"DL":"National Capital Territory of Delhi"},{"PY":"Puducherry"}]}},{"postalcode":{"label":"PIN code","format":"^\\d{6}$","eg":"110005"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Indonesia","iso":"ID","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City/regency"}},{"postalcode":{"label":"Postal code"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"AC":"Aceh"},{"BA":"Bali"},{"BB":"Bangka Belitung"},{"BT":"Banten"},{"BE":"Bengkulu"},{"JK":"DKI Jakarta"},{"YO":"D.I. Yogyakarta"},{"GO":"Gorontalo"},{"JA":"Jambi"},{"JB":"Jawa Barat"},{"JT":"Jawa Tengah"},{"JI":"Jawa Timur"},{"KB":"Kalimantan Barat"},{"KS":"Kalimantan Selatan"},{"KT":"Kalimantan Tengah"},{"KI":"Kalimantan Timur"},{"KR":"Kepulauan Riau"},{"LA":"Lampung"},{"MA":"Maluku"},{"MU":"Maluku Utara"},{"NB":"Nusa Tenggara Barat"},{"NT":"Nusa Tenggara Timur"},{"PA":"Papua"},{"PB":"Papua Barat"},{"RI":"Riau"},{"SR":"Sulawesi Barat"},{"SN":"Sulawesi Selatan"},{"ST":"Sulawesi Tengah"},{"SG":"Sulawesi Tenggara"},{"SA":"Sulawesi Utara"},{"SB":"Sumatera Barat"},{"SS":"Sumatera Selatan"},{"SU":"Sumatera Utara"}]}}]}],"required":["localityname","thoroughfare"]},{"label":"Iran","iso":"IR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"Neighborhood"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Iraq","iso":"IQ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Ireland","iso":"IE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"Town/city"}},{"administrativearea":{"label":"County","options":[{"":"--"},{"CW":"Co Carlow"},{"CN":"Co Cavan"},{"CE":"Co Clare"},{"CO":"Co Cork"},{"DL":"Co Donegal"},{"D":"Co Dublin"},{"D1":"Dublin 1"},{"D2":"Dublin 2"},{"D3":"Dublin 3"},{"D4":"Dublin 4"},{"D5":"Dublin 5"},{"D6":"Dublin 6"},{"D6W":"Dublin 6w"},{"D7":"Dublin 7"},{"D8":"Dublin 8"},{"D9":"Dublin 9"},{"D10":"Dublin 10"},{"D11":"Dublin 11"},{"D12":"Dublin 12"},{"D13":"Dublin 13"},{"D14":"Dublin 14"},{"D15":"Dublin 15"},{"D16":"Dublin 16"},{"D17":"Dublin 17"},{"D18":"Dublin 18"},{"D19":"Dublin 19"},{"D20":"Dublin 20"},{"D21":"Dublin 21"},{"D22":"Dublin 22"},{"D23":"Dublin 23"},{"D24":"Dublin 24"},{"G":"Co Galway"},{"KY":"Co Kerry"},{"KE":"Co Kildare"},{"KK":"Co Kilkenny"},{"LS":"Co Laois"},{"LM":"Co Leitrim"},{"LK":"Co Limerick"},{"LD":"Co Longford"},{"LH":"Co Louth"},{"MO":"Co Mayo"},{"MH":"Co Meath"},{"MN":"Co Monaghan"},{"OY":"Co Offaly"},{"RN":"Co Roscommon"},{"SO":"Co Sligo"},{"TA":"Co Tipperary"},{"WD":"Co Waterford"},{"WH":"Co Westmeath"},{"WX":"Co Wexford"},{"WW":"Co Wicklow"}]}}]}],"required":["localityname","thoroughfare"]},{"label":"Isle of Man","iso":"IM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^IM\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$","eg":"IM99 1PS"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Israel","iso":"IL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Italy","iso":"IT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"AG":"Agrigento"},{"AL":"Alessandria"},{"AN":"Ancona"},{"AO":"Valle d'Aosta/Vall\u00c8e d'Aoste"},{"AP":"Ascoli Piceno"},{"AQ":"L'Aquila"},{"AR":"Arezzo"},{"AT":"Asti"},{"AV":"Avellino"},{"BA":"Bari"},{"BG":"Bergamo"},{"BI":"Biella"},{"BL":"Belluno"},{"BN":"Benevento"},{"BO":"Bologna"},{"BR":"Brindisi"},{"BS":"Brescia"},{"BT":"Barletta-Andria-Trani"},{"BZ":"Bolzano/Bozen"},{"CA":"Cagliari"},{"CB":"Campobasso"},{"CE":"Caserta"},{"CH":"Chieti"},{"CI":"Carbonia-Iglesias"},{"CL":"Caltanissetta"},{"CN":"Cuneo"},{"CO":"Como"},{"CR":"Cremona"},{"CS":"Cosenza"},{"CT":"Catania"},{"CZ":"Catanzaro"},{"EN":"Enna"},{"FC":"Forl\u00cf-Cesena"},{"FE":"Ferrara"},{"FG":"Foggia"},{"FI":"Firenze"},{"FM":"Fermo"},{"FR":"Frosinone"},{"GE":"Genova"},{"GO":"Gorizia"},{"GR":"Grosseto"},{"IM":"Imperia"},{"IS":"Isernia"},{"KR":"Crotone"},{"LC":"Lecco"},{"LE":"Lecce"},{"LI":"Livorno"},{"LO":"Lodi"},{"LT":"Latina"},{"LU":"Lucca"},{"MB":"Monza e Brianza"},{"MC":"Macerata"},{"ME":"Messina"},{"MI":"Milano"},{"MN":"Mantova"},{"MO":"Modena"},{"MS":"Massa-Carrara"},{"MT":"Matera"},{"NA":"Napoli"},{"NO":"Novara"},{"NU":"Nuoro"},{"OG":"Ogliastra"},{"OR":"Oristano"},{"OT":"Olbia-Tempio"},{"PA":"Palermo"},{"PC":"Piacenza"},{"PD":"Padova"},{"PE":"Pescara"},{"PG":"Perugia"},{"PI":"Pisa"},{"PN":"Pordenone"},{"PO":"Prato"},{"PR":"Parma"},{"PT":"Pistoia"},{"PU":"Pesaro e Urbino"},{"PV":"Pavia"},{"PZ":"Potenza"},{"RA":"Ravenna"},{"RC":"Reggio di Calabria"},{"RE":"Reggio nell'Emilia"},{"RG":"Ragusa"},{"RI":"Rieti"},{"RM":"Roma"},{"RN":"Rimini"},{"RO":"Rovigo"},{"SA":"Salerno"},{"SI":"Siena"},{"SO":"Sondrio"},{"SP":"La Spezia"},{"SR":"Siracusa"},{"SS":"Sassari"},{"SV":"Savona"},{"TA":"Taranto"},{"TE":"Teramo"},{"TN":"Trento"},{"TO":"Torino"},{"TP":"Trapani"},{"TR":"Terni"},{"TS":"Trieste"},{"TV":"Treviso"},{"UD":"Udine"},{"VA":"Varese"},{"VB":"Verbano-Cusio-Ossola"},{"VC":"Vercelli"},{"VE":"Venezia"},{"VI":"Vicenza"},{"VR":"Verona"},{"VS":"Medio Campidano"},{"VT":"Viterbo"},{"VV":"Vibo Valentia"}]}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Ivory Coast","iso":"CI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Jamaica","iso":"JM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Parish","options":[{"":"--"},{"Clarendon":"Clarendon"},{"Hanover":"Hanover"},{"Kingston":"Kingston"},{"Manchester":"Manchester"},{"Portland":"Portland"},{"St. Andrew":"St. Andrew"},{"St. Ann":"St. Ann"},{"St. Catherine":"St. Catherine"},{"St. Elizabeth":"St. Elizabeth"},{"St. James":"St. James"},{"St. Mary":"St. Mary"},{"St. Thomas":"St. Thomas"},{"Trelawny":"Trelawny"},{"Westmoreland":"Westmoreland"}]}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Japan","iso":"JP","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{3}-?\\d{4}$","eg":"142-0062"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Prefecture","options":[{"":"--"},{"Hokkaido":"Hokkaido"},{"Aomori":"Aomori"},{"Iwate":"Iwate"},{"Miyagi":"Miyagi"},{"Akita":"Akita"},{"Yamagata":"Yamagata"},{"Fukushima":"Fukushima"},{"Ibaraki":"Ibaraki"},{"Tochigi":"Tochigi"},{"Gunma":"Gunma"},{"Saitama":"Saitama"},{"Chiba":"Chiba"},{"Tokyo":"Tokyo"},{"Kanagawa":"Kanagawa"},{"Niigata":"Niigata"},{"Toyama":"Toyama"},{"Ishikawa":"Ishikawa"},{"Fukui":"Fukui"},{"Yamanashi":"Yamanashi"},{"Nagano":"Nagano"},{"Gifu":"Gifu"},{"Shizuoka":"Shizuoka"},{"Aichi":"Aichi"},{"Mie":"Mie"},{"Shiga":"Shiga"},{"Kyoto":"Kyoto"},{"Osaka":"Osaka"},{"Hyogo":"Hyogo"},{"Nara":"Nara"},{"Wakayama":"Wakayama"},{"Tottori":"Tottori"},{"Shimane":"Shimane"},{"Okayama":"Okayama"},{"Hiroshima":"Hiroshima"},{"Yamaguchi":"Yamaguchi"},{"Tokushima":"Tokushima"},{"Kagawa":"Kagawa"},{"Ehime":"Ehime"},{"Kochi":"Kochi"},{"Fukuoka":"Fukuoka"},{"Saga":"Saga"},{"Nagasaki":"Nagasaki"},{"Kumamoto":"Kumamoto"},{"Oita":"Oita"},{"Miyazaki":"Miyazaki"},{"Kagoshima":"Kagoshima"},{"Okinawa":"Okinawa"}]}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Jersey","iso":"JE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^JE\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$","eg":"JE2 2BT"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Jordan","iso":"JO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Kazakhstan","iso":"KZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Kenya","iso":"KE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Kiribati","iso":"KI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island"}}]}],"required":["localityname","thoroughfare"]},{"label":"Kosovo","iso":"KV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Kuwait","iso":"KW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}}]}],"required":["localityname","thoroughfare"]},{"label":"Kyrgyzstan","iso":"KG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Laos","iso":"LA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Latvia","iso":"LV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Lebanon","iso":"LB","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Lesotho","iso":"LS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Liberia","iso":"LR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Libya","iso":"LY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Liechtenstein","iso":"LI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^(948[5-9])|(949[0-7])$","eg":"9496"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Lithuania","iso":"LT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Luxembourg","iso":"LU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"4750"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Macao S.A.R., China","iso":"MO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Macedonia","iso":"MK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Madagascar","iso":"MG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Malawi","iso":"MW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Malaysia","iso":"MY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"Village/township"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"Johor":"Johor"},{"Kedah":"Kedah"},{"Kelantan":"Kelantan"},{"Kuala Lumpur":"Kuala Lumpur"},{"Labuan":"Labuan"},{"Melaka":"Melaka"},{"Negeri Sembilan":"Negeri Sembilan"},{"Pahang":"Pahang"},{"Perak":"Perak"},{"Perlis":"Perlis"},{"Pulau Pinang":"Pulau Pinang"},{"Putrajaya":"Putrajaya"},{"Sabah":"Sabah"},{"Sarawak":"Sarawak"},{"Selangor":"Selangor"},{"Terengganu":"Terengganu"}]}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Maldives","iso":"MV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Mali","iso":"ML","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Malta","iso":"MT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Marshall Islands","iso":"MH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Martinique","iso":"MQ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78]2\\d{2}$","eg":"97220"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Mauritania","iso":"MR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Mauritius","iso":"MU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Mayotte","iso":"YT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^976\\d{2}$","eg":"97600"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Mexico","iso":"MX","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"Neighborhood"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"AGU":"Aguascalientes"},{"BCN":"Baja California"},{"BCS":"Baja California Sur"},{"CAM":"Campeche"},{"COA":"Coahuila"},{"COL":"Colima"},{"CHP":"Chiapas"},{"CHH":"Chihuahua"},{"DIF":"Distrito Federal"},{"DUG":"Durango"},{"MEX":"Estado de M\u00e9xico"},{"GUA":"Guanajuato"},{"GRO":"Guerrero"},{"HID":"Hidalgo"},{"JAL":"Jalisco"},{"MIC":"Michoac\u00e1n"},{"MOR":"Morelos"},{"NAY":"Nayarit"},{"NLE":"Nuevo Le\u00f3n"},{"OAX":"Oaxaca"},{"PUE":"Puebla"},{"QUE":"Queretaro"},{"ROO":"Quintana Roo"},{"SLP":"San Luis Potos\u00ed"},{"SIN":"Sinaloa"},{"SON":"Sonora"},{"TAB":"Tabasco"},{"TAM":"Tamaulipas"},{"TLA":"Tlaxcala"},{"VER":"Veracruz"},{"YUC":"Yucat\u00e1n"},{"ZAC":"Zacatecas"}]}},{"postalcode":{"label":"Postal code","format":"^\\d{5}$","eg":"03400"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Micronesia","iso":"FM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Moldova","iso":"MD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Monaco","iso":"MC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Mongolia","iso":"MN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Montenegro","iso":"ME","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Montserrat","iso":"MS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Morocco","iso":"MA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Mozambique","iso":"MZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","thoroughfare"]},{"label":"Myanmar","iso":"MM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Namibia","iso":"NA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Nauru","iso":"NR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"administrativearea":{"label":"District"}}]}],"required":["administrativearea","thoroughfare"]},{"label":"Nepal","iso":"NP","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Netherlands","iso":"NL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}[ ]?[A-Z]{2}$","eg":"2585 GJ"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Netherlands Antilles","iso":"AN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"New Caledonia","iso":"NC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^988\\d{2}$","eg":"98814"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"New Zealand","iso":"NZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"Town/city"}},{"administrativearea":{"label":"Region","options":[{"":"--"},{"AUK":"Auckland"},{"BOP":"Bay of Plenty"},{"CAN":"Canterbury"},{"HKB":"Hawke's Bay"},{"MWT":"Manawatu-Wanganui"},{"NTL":"Northland"},{"OTA":"Otago"},{"STL":"Southland"},{"TKI":"Taranaki"},{"WKO":"Waikato"},{"WGN":"Wellington"},{"WTC":"West Coast"},{"GIS":"Gisborne District"},{"MBH":"Marlborough District"},{"NSN":"Nelson"},{"TAS":"Tasman District"},{"CIT":"Chatham Islands Territory"}]}},{"postalcode":{"label":"Postcode"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Nicaragua","iso":"NI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Department"}}]}],"required":["localityname","thoroughfare"]},{"label":"Niger","iso":"NE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Nigeria","iso":"NG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Niue","iso":"NU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Norfolk Island","iso":"NF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Northern Mariana Islands","iso":"MP","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"North Korea","iso":"KP","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Norway","iso":"NO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"0025"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Oman","iso":"OM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}},{"administrativearea":{"label":"State"}}]}],"required":["localityname","thoroughfare"]},{"label":"Pakistan","iso":"PK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Palau","iso":"PW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Palestinian Territory","iso":"PS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Panama","iso":"PA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","thoroughfare"]},{"label":"Papua New Guinea","iso":"PG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Paraguay","iso":"PY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Peru","iso":"PE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"administrativearea":{"label":"Region","options":[{"":"--"},{"AMA":"Amazonas"},{"ANC":"Ancash"},{"APU":"Apurimac"},{"ARE":"Arequipa"},{"AYA":"Ayacucho"},{"CAJ":"Cajamarca"},{"CAL":"Callao"},{"CUS":"Cusco"},{"HUV":"Huancavelica"},{"HUC":"Huanuco"},{"ICA":"Ica"},{"JUN":"Junin"},{"LAL":"La Libertad"},{"LAM":"Lambayeque"},{"LIM":"Lima"},{"LOR":"Loreto"},{"MDD":"Madre de Dios"},{"MOQ":"Moquegua"},{"PAS":"Pasco"},{"PIU":"Piura"},{"PUN":"Puno"},{"SAM":"San Martin"},{"TAC":"Tacna"},{"TUM":"Tumbes"},{"UCA":"Ucayali"}]}},{"localityname":{"label":"District"}}]}],"required":["localityname","thoroughfare"]},{"label":"Philippines","iso":"PH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"Suburb"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Pitcairn","iso":"PN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Poland","iso":"PL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{2}-?\\d{3}$","eg":"00-950"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Portugal","iso":"PT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}-?\\d{3}$","eg":"2725-079"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Puerto Rico","iso":"PR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Qatar","iso":"QA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Reunion","iso":"RE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78]4\\d{2}$","eg":"97400"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Romania","iso":"RO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Russia","iso":"RU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"MOW":"Moskva"},{"SPE":"Sankt-Peterburg"},{"AD":"Adygeya, Respublika"},{"AL":"Altay, Respublika"},{"BA":"Bashkortostan, Respublika"},{"BU":"Buryatiya, Respublika"},{"CE":"Chechenskaya Respublika"},{"CU":"Chuvashskaya Respublika"},{"DA":"Dagestan, Respublika"},{"IN":"Ingushetiya, Respublika"},{"KB":"Kabardino-Balkarskaya Respublika"},{"KL":"Kalmykiya, Respublika"},{"KC":"Karachayevo-Cherkesskaya Respublika"},{"KR":"Kareliya, Respublika"},{"KK":"Khakasiya, Respublika"},{"KO":"Komi, Respublika"},{"ME":"Mariy El, Respublika"},{"MO":"Mordoviya, Respublika"},{"SA":"Sakha, Respublika [Yakutiya]"},{"SE":"Severnaya Osetiya-Alaniya, Respublika"},{"TA":"Tatarstan, Respublika"},{"TY":"Tyva, Respublika [Tuva]"},{"UD":"Udmurtskaya Respublika"},{"ALT":"Altayskiy kray"},{"KAM":"Kamchatskiy kray"},{"KHA":"Khabarovskiy kray"},{"KDA":"Krasnodarskiy kray"},{"KYA":"Krasnoyarskiy kray"},{"PER":"Permskiy kray"},{"PRI":"Primorskiy kray"},{"STA":"Stavropolskiy kray"},{"ZAB":"Zabaykalskiy kray"},{"AMU":"Amurskaya oblast"},{"ARK":"Arkhangelskaya oblast"},{"AST":"Astrakhanskaya oblast"},{"BEL":"Belgorodskaya oblast"},{"BRY":"Bryanskaya oblast"},{"CHE":"Chelyabinskaya oblast"},{"IRK":"Irkutskaya oblast"},{"IVA":"Ivanovskaya oblast"},{"KGD":"Kaliningradskaya oblast"},{"KLU":"Kaluzhskaya oblast"},{"KEM":"Kemerovskaya oblast"},{"KIR":"Kirovskaya oblast"},{"KOS":"Kostromskaya oblast"},{"KGN":"Kurganskaya oblast"},{"KRS":"Kurskaya oblast"},{"LEN":"Leningradskaya oblast"},{"LIP":"Lipetskaya oblast"},{"MAG":"Magadanskaya oblast"},{"MOS":"Moskovskaya oblast"},{"MUR":"Murmanskaya oblast"},{"NIZ":"Nizhegorodskaya oblast"},{"NGR":"Novgorodskaya oblast"},{"NVS":"Novosibirskaya oblast"},{"OMS":"Omskaya oblast"},{"ORE":"Orenburgskaya oblast"},{"ORL":"Orlovskaya oblast"},{"PNZ":"Penzenskaya oblast"},{"PSK":"Pskovskaya oblast"},{"ROS":"Rostovskaya oblast"},{"RYA":"Ryazanskaya oblast"},{"SAK":"Sakhalinskaya oblast"},{"SAM":"Samarskaya oblast"},{"SAR":"Saratovskaya oblast"},{"SMO":"Smolenskaya oblast"},{"SVE":"Sverdlovskaya oblast"},{"TAM":"Tambovskaya oblast"},{"TOM":"Tomskaya oblast"},{"TUL":"Tulskaya oblast"},{"TVE":"Tverskaya oblast"},{"TYU":"Tyumenskaya oblast"},{"ULY":"Ulyanovskaya oblast"},{"VLA":"Vladimirskaya oblast"},{"VGG":"Volgogradskaya oblast"},{"VLG":"Vologodskaya oblast"},{"VOR":"Voronezhskaya oblast"},{"YAR":"Yaroslavskaya oblast"},{"YEV":"Yevreyskaya avtonomnaya oblast"},{"CHU":"Chukotskiy avtonomnyy okrug"},{"KHM":"Khanty-Mansiyskiy avtonomnyy okrug-Yugra"},{"NEN":"Nenetskiy avtonomnyy okrug"},{"YAN":"Yamalo-Nenetskiy avtonomnyy okrug"}]}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Rwanda","iso":"RW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Saint Barth\u00c8lemy","iso":"BL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78][01]\\d{2}$","eg":"97100"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Saint Helena","iso":"SH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^(ASCN|STHL)[ ]?1ZZ$","eg":"STHL 1ZZ"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Saint Kitts and Nevis","iso":"KN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Saint Lucia","iso":"LC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Saint Martin (French part)","iso":"MF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78][01]\\d{2}$","eg":"97100"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Saint Pierre and Miquelon","iso":"PM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^9[78]5\\d{2}$","eg":"97500"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Saint Vincent and the Grenadines","iso":"VC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Samoa","iso":"WS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"San Marino","iso":"SM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["postalcode","thoroughfare"]},{"label":"Sao Tome and Principe","iso":"ST","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Saudi Arabia","iso":"SA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Senegal","iso":"SN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Serbia","iso":"RS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Seychelles","iso":"SC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island"}}]}],"required":["localityname","thoroughfare"]},{"label":"Sierra Leone","iso":"SL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Singapore","iso":"SG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code","format":"^\\d{6}$","eg":"238880"}}]}],"required":["postalcode","thoroughfare"]},{"label":"Slovakia","iso":"SK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Slovenia","iso":"SI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Solomon Islands","iso":"SB","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Somalia","iso":"SO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"South Africa","iso":"ZA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"Eastern Cape":"Eastern Cape"},{"Free State":"Free State"},{"Gauteng":"Gauteng"},{"KwaZulu-Natal":"KwaZulu-Natal"},{"Limpopo":"Limpopo"},{"Mpumalanga":"Mpumalanga"},{"North West":"North West"},{"Northern Cape":"Northern Cape"},{"Western Cape":"Western Cape"}]}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"South Georgia and the South Sandwich Islands","iso":"GS","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"South Korea","iso":"KR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"District"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"Seoul":"Seoul"},{"Busan":"Busan"},{"Daegu":"Daegu"},{"Daejeon":"Daejeon"},{"Gwangju":"Gwangju"},{"Incheon":"Incheon"},{"Ulsan":"Ulsan"},{"Chungcheongbuk-do":"Chungcheongbuk-do"},{"Chungcheongnam-do":"Chungcheongnam-do"},{"Gangwon-do":"Gangwon-do"},{"Gyeonggi-do":"Gyeonggi-do"},{"Gyeongsangbuk-do":"Gyeongsangbuk-do"},{"Gyeongsangnam-do":"Gyeongsangnam-do"},{"Jeju-do":"Jeju-do"},{"Jeollabuk-do":"Jeollabuk-do"},{"Jeollanam-do":"Jeollanam-do"},{"Sejong":"Sejong"}]}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Spain","iso":"ES","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"C":"A Coru\u00f1a"},{"VI":"Alava"},{"AB":"Albacete"},{"A":"Alicante"},{"AL":"Almer\u00eda"},{"O":"Asturias"},{"AV":"\u00c1vila"},{"BA":"Badajoz"},{"PM":"Baleares"},{"B":"Barcelona"},{"BU":"Burgos"},{"CC":"C\u00e1ceres"},{"CA":"C\u00e1diz"},{"S":"Cantabria"},{"CS":"Castell\u00f3n"},{"CE":"Ceuta"},{"CR":"Ciudad Real"},{"CO":"C\u00f3rdoba"},{"CU":"Cuenca"},{"GI":"Gerona"},{"GR":"Granada"},{"GU":"Guadalajara"},{"SS":"Guip\u00fazcoa"},{"H":"Huelva"},{"HU":"Huesca"},{"J":"Ja\u00e9n"},{"LO":"La Rioja"},{"GC":"Las Palmas"},{"LE":"Le\u00f3n"},{"L":"L\u00e9rida"},{"LU":"Lugo"},{"M":"Madrid"},{"MA":"M\u00e1laga"},{"ML":"Melilla"},{"MU":"Murcia"},{"NA":"Navarra"},{"OR":"Ourense"},{"P":"Palencia"},{"PO":"Pontevedra"},{"SA":"Salamanca"},{"TF":"Santa Cruz de Tenerife"},{"SG":"Segovia"},{"SE":"Sevilla"},{"SO":"Soria"},{"T":"Tarragona"},{"TE":"Teruel"},{"TO":"Toledo"},{"V":"Valencia"},{"VA":"Valladolid"},{"BI":"Vizcaya"},{"ZA":"Zamora"},{"Z":"Zaragoza"}]}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Sri Lanka","iso":"LK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Sudan","iso":"SD","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Suriname","iso":"SR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}}]}],"required":["localityname","thoroughfare"]},{"label":"Svalbard and Jan Mayen","iso":"SJ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"9170"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Swaziland","iso":"SZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Sweden","iso":"SE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{3}[ ]?\\d{2}$","eg":"11455"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Switzerland","iso":"CH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{4}$","eg":"2544"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Syria","iso":"SY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Taiwan","iso":"TW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^\\d{3}(\\d{2})?$","eg":"100"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"TXG":"Taichung City"},{"TPE":"Taipei City"},{"TTT":"Taitung County"},{"TNN":"Tainan City"},{"ILA":"Yilan County"},{"HUA":"Hualien County"},{"Kinmen County":"Kinmen County"},{"NAN":"Nantou County"},{"PIF":"Pingtung County"},{"MIA":"Miaoli County"},{"TAO":"Taoyuan County"},{"KHH":"Kaohsiung City"},{"KEE":"Keelung City"},{"Lienchiang County":"Lienchiang County"},{"YUN":"Yunlin County"},{"TPQ":"New Taipei City"},{"HSZ":"Hsinchu City"},{"HSQ":"Hsinchu County"},{"CYI":"Chiayi City"},{"CYQ":"Chiayi County"},{"CHA":"Changhua County"},{"PEN":"Penghu County"}]}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Tajikistan","iso":"TJ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Tanzania","iso":"TZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Thailand","iso":"TH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"dependent_localityname":{"label":"Suburb"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"Province"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Timor-Leste","iso":"TL","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Togo","iso":"TG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Tokelau","iso":"TK","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Tonga","iso":"TO","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Trinidad and Tobago","iso":"TT","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Tunisia","iso":"TN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Turkey","iso":"TR","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"administrativearea":{"label":"Province","options":[{"":"--"},{"Adana":"Adana"},{"Ad\u0131yaman":"Ad\u0131yaman"},{"Afyon":"Afyon"},{"A\u011fr\u0131":"A\u011fr\u0131"},{"Aksaray":"Aksaray"},{"Amasya":"Amasya"},{"Ankara":"Ankara"},{"Antalya":"Antalya"},{"Ardahan":"Ardahan"},{"Artvin":"Artvin"},{"Ayd\u0131n":"Ayd\u0131n"},{"Bal\u0131kesir":"Bal\u0131kesir"},{"Bart\u0131n":"Bart\u0131n"},{"Batman":"Batman"},{"Bayburt":"Bayburt"},{"Bilecik":"Bilecik"},{"Bing\u00f6l":"Bing\u00f6l"},{"Bitlis":"Bitlis"},{"Bolu":"Bolu"},{"Burdur":"Burdur"},{"Bursa":"Bursa"},{"\u00c7anakkale":"\u00c7anakkale"},{"\u00c7ank\u0131r\u0131":"\u00c7ank\u0131r\u0131"},{"\u00c7orum":"\u00c7orum"},{"Denizli":"Denizli"},{"Diyarbak\u0131r":"Diyarbak\u0131r"},{"D\u00fczce":"D\u00fczce"},{"Edirne":"Edirne"},{"Elaz\u0131\u011f":"Elaz\u0131\u011f"},{"Erzincan":"Erzincan"},{"Erzurum":"Erzurum"},{"Eski\u015fehir":"Eski\u015fehir"},{"Gaziantep":"Gaziantep"},{"Giresun":"Giresun"},{"G\u00fcm\u00fc\u015fhane":"G\u00fcm\u00fc\u015fhane"},{"Hakkari":"Hakkari"},{"Hatay":"Hatay"},{"I\u011fd\u0131r":"I\u011fd\u0131r"},{"Isparta":"Isparta"},{"\u0130stanbul":"\u0130stanbul"},{"\u0130zmir":"\u0130zmir"},{"Kahramanmara\u015f":"Kahramanmara\u015f"},{"Karab\u00fck":"Karab\u00fck"},{"Karaman":"Karaman"},{"Kars":"Kars"},{"Kastamonu":"Kastamonu"},{"Kayseri":"Kayseri"},{"K\u0131r\u0131kkale":"K\u0131r\u0131kkale"},{"K\u0131rklareli":"K\u0131rklareli"},{"K\u0131r\u015fehir":"K\u0131r\u015fehir"},{"Kilis":"Kilis"},{"Kocaeli":"Kocaeli"},{"Konya":"Konya"},{"K\u00fctahya":"K\u00fctahya"},{"Malatya":"Malatya"},{"Manisa":"Manisa"},{"Mardin":"Mardin"},{"Mersin":"Mersin"},{"Mu\u011fla":"Mu\u011fla"},{"Mu\u015f":"Mu\u015f"},{"Nev\u015fehir":"Nev\u015fehir"},{"Ni\u011fde":"Ni\u011fde"},{"Ordu":"Ordu"},{"Osmaniye":"Osmaniye"},{"Rize":"Rize"},{"Sakarya":"Sakarya"},{"Samsun":"Samsun"},{"Siirt":"Siirt"},{"Sinop":"Sinop"},{"Sivas":"Sivas"},{"\u015eanl\u0131urfa":"\u015eanl\u0131urfa"},{"\u015e\u0131rnak":"\u015e\u0131rnak"},{"Tekirda\u011f":"Tekirda\u011f"},{"Tokat":"Tokat"},{"Trabzon":"Trabzon"},{"Tunceli":"Tunceli"},{"U\u015fak":"U\u015fak"},{"Van":"Van"},{"Yalova":"Yalova"},{"Yozgat":"Yozgat"},{"Zonguldak":"Zonguldak"}]}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Turkmenistan","iso":"TM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Turks and Caicos Islands","iso":"TC","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Tuvalu","iso":"TV","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Island","options":[{"":"--"},{"Funafuti":"Funafuti"},{"Funafuti Centre":"Funafuti Centre"},{"Nanumaga":"Nanumaga"},{"Nanumea":"Nanumea"},{"Niulakita":"Niulakita"},{"Niutao":"Niutao"},{"Nui":"Nui"},{"Nukulaelae":"Nukulaelae"},{"Vaitupu":"Vaitupu"}]}}]}],"required":["localityname","thoroughfare"]},{"label":"U.S. Virgin Islands","iso":"VI","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"Uganda","iso":"UG","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Ukraine","iso":"UA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"Region"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"United Arab Emirates","iso":"AE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"administrativearea":{"label":"Emirate","options":[{"":"--"},{"AZ":"Abu Dhabi"},{"FU":"Fujairah"},{"UQ":"Umm al-Quwain"},{"SH":"Sharjah"},{"DU":"Dubai"},{"RK":"Ras al-Khaimah"},{"AJ":"Ajm\u0101n"}]}}]}],"required":["administrativearea","thoroughfare"]},{"label":"United Kingdom","iso":"GB","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"Town/city"}},{"administrativearea":{"label":"County"}},{"postalcode":{"label":"Postcode","format":"^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}$","eg":"SE1 0SU"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"United States","iso":"US","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"AL":"Alabama"},{"AK":"Alaska"},{"AZ":"Arizona"},{"AR":"Arkansas"},{"CA":"California"},{"CO":"Colorado"},{"CT":"Connecticut"},{"DE":"Delaware"},{"DC":"District Of Columbia"},{"FL":"Florida"},{"GA":"Georgia"},{"HI":"Hawaii"},{"ID":"Idaho"},{"IL":"Illinois"},{"IN":"Indiana"},{"IA":"Iowa"},{"KS":"Kansas"},{"KY":"Kentucky"},{"LA":"Louisiana"},{"ME":"Maine"},{"MD":"Maryland"},{"MA":"Massachusetts"},{"MI":"Michigan"},{"MN":"Minnesota"},{"MS":"Mississippi"},{"MO":"Missouri"},{"MT":"Montana"},{"NE":"Nebraska"},{"NV":"Nevada"},{"NH":"New Hampshire"},{"NJ":"New Jersey"},{"NM":"New Mexico"},{"NY":"New York"},{"NC":"North Carolina"},{"ND":"North Dakota"},{"OH":"Ohio"},{"OK":"Oklahoma"},{"OR":"Oregon"},{"PA":"Pennsylvania"},{"RI":"Rhode Island"},{"SC":"South Carolina"},{"SD":"South Dakota"},{"TN":"Tennessee"},{"TX":"Texas"},{"UT":"Utah"},{"VT":"Vermont"},{"VA":"Virginia"},{"WA":"Washington"},{"WV":"West Virginia"},{"WI":"Wisconsin"},{"WY":"Wyoming"},{"":"--"},{"AA":"Armed Forces (Americas)"},{"AE":"Armed Forces (Europe, Canada, Middle East, Africa)"},{"AP":"Armed Forces (Pacific)"},{"AS":"American Samoa"},{"FM":"Federated States of Micronesia"},{"GU":"Guam"},{"MH":"Marshall Islands"},{"MP":"Northern Mariana Islands"},{"PW":"Palau"},{"PR":"Puerto Rico"},{"VI":"Virgin Islands"}]}},{"postalcode":{"label":"ZIP code","format":"^\\d{5}(?:[-\\s]\\d{4})?$","eg":"98103"}}]}],"required":["localityname","administrativearea","postalcode","thoroughfare"]},{"label":"United States Minor Outlying Islands","iso":"UM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"ZIP code"}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Uruguay","iso":"UY","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}}]}],"required":["localityname","thoroughfare"]},{"label":"Uzbekistan","iso":"UZ","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Vanuatu","iso":"VU","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Vatican","iso":"VA","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Venezuela","iso":"VE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}},{"administrativearea":{"label":"State","options":[{"":"--"},{"Z":"Amazonas"},{"B":"Anzo\u00e1tegui"},{"C":"Apure"},{"D":"Aragua"},{"E":"Barinas"},{"F":"Bol\u00edvar"},{"G":"Carabobo"},{"H":"Cojedes"},{"Y":"Delta Amacuro"},{"W":"Dependencias Federales"},{"A":"Distrito Federal"},{"I":"Falc\u00f3n"},{"J":"Gu\u00e1rico"},{"K":"Lara"},{"L":"M\u00e9rida"},{"M":"Miranda"},{"N":"Monagas"},{"O":"Nueva Esparta"},{"P":"Portuguesa"},{"R":"Sucre"},{"S":"T\u00e1chira"},{"T":"Trujillo"},{"X":"Vargas"},{"U":"Yaracuy"},{"V":"Zulia"}]}}]}],"required":["localityname","administrativearea","thoroughfare"]},{"label":"Vietnam","iso":"VN","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}},{"administrativearea":{"label":"State"}},{"postalcode":{"label":"Postal code"}}]}],"required":["localityname","thoroughfare"]},{"label":"Wallis and Futuna","iso":"WF","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code","format":"^986\\d{2}$","eg":"98600"}},{"localityname":{"label":"City"}}]}],"required":["localityname","postalcode","thoroughfare"]},{"label":"Western Sahara","iso":"EH","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Yemen","iso":"YE","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Zambia","iso":"ZM","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"postalcode":{"label":"Postal code"}},{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]},{"label":"Zimbabwe","iso":"ZW","fields":[{"thoroughfare":{"label":"Address 1"}},{"premise":{"label":"Address 2"}},{"locality":[{"localityname":{"label":"City"}}]}],"required":["localityname","thoroughfare"]}]}
+{
+  "label": "Country",
+  "options": [
+    {
+      "label": "Afghanistan",
+      "iso": "AF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "1001"
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Aland Islands",
+      "iso": "AX",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^22\\d{3}$",
+                "eg": "22150"
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Albania",
+      "iso": "AL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Algeria",
+      "iso": "DZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "American Samoa",
+      "iso": "AS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Andorra",
+      "iso": "AD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Angola",
+      "iso": "AO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Anguilla",
+      "iso": "AI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Antarctica",
+      "iso": "AQ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Antigua and Barbuda",
+      "iso": "AG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Argentina",
+      "iso": "AR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^((?:[A-HJ-NP-Z])?\\d{4})([A-Z]{3})?$",
+                "eg": "B1921"
+              }
+            },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "B": "Buenos Aires" },
+                  { "K": "Catamarca" },
+                  { "H": "Chaco" },
+                  { "U": "Chubut" },
+                  { "C": "Ciudad de Buenos Aires" },
+                  { "X": "C\u00f3rdoba" },
+                  { "W": "Corrientes" },
+                  { "E": "Entre R\u00edos" },
+                  { "P": "Formosa" },
+                  { "Y": "Jujuy" },
+                  { "L": "La Pampa" },
+                  { "F": "La Rioja" },
+                  { "M": "Mendoza" },
+                  { "N": "Misiones" },
+                  { "Q": "Neuqu\u00e9n" },
+                  { "R": "R\u00edo Negro" },
+                  { "A": "Salta" },
+                  { "J": "San Juan" },
+                  { "D": "San Luis" },
+                  { "Z": "Santa Cruz" },
+                  { "S": "Santa Fe" },
+                  { "G": "Santiago del Estero" },
+                  { "V": "Tierra del Fuego" },
+                  { "T": "Tucum\u00e1n" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Armenia",
+      "iso": "AM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Aruba",
+      "iso": "AW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Australia",
+      "iso": "AU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City/suburb" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "ACT": "Australian Capital Territory" },
+                  { "NSW": "New South Wales" },
+                  { "NT": "Northern Territory" },
+                  { "QLD": "Queensland" },
+                  { "SA": "South Australia" },
+                  { "TAS": "Tasmania" },
+                  { "VIC": "Victoria" },
+                  { "WA": "Western Australia" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "Postcode",
+                "format": "^\\d{4}$",
+                "eg": "2000"
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Austria",
+      "iso": "AT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "3741"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Azerbaijan",
+      "iso": "AZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bahamas",
+      "iso": "BS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bahrain",
+      "iso": "BH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bangladesh",
+      "iso": "BD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Barbados",
+      "iso": "BB",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Belarus",
+      "iso": "BY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Belgium",
+      "iso": "BE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "4000"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Belize",
+      "iso": "BZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Benin",
+      "iso": "BJ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bermuda",
+      "iso": "BM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bhutan",
+      "iso": "BT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bolivia",
+      "iso": "BO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bosnia and Herzegovina",
+      "iso": "BA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Botswana",
+      "iso": "BW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bouvet Island",
+      "iso": "BV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Brazil",
+      "iso": "BR",
+      "fields": [
+        { "thoroughfare": { "label": "Thoroughfare" } },
+        { "premise": { "label": "Complement" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "Neighborhood" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "AC": "Acre" },
+                  { "AL": "Alagoas" },
+                  { "AM": "Amazonas" },
+                  { "AP": "Amapa" },
+                  { "BA": "Bahia" },
+                  { "CE": "Ceara" },
+                  { "DF": "Distrito Federal" },
+                  { "ES": "Espirito Santo" },
+                  { "GO": "Goias" },
+                  { "MA": "Maranhao" },
+                  { "MG": "Minas Gerais" },
+                  { "MS": "Mato Grosso do Sul" },
+                  { "MT": "Mato Grosso" },
+                  { "PA": "Para" },
+                  { "PB": "Paraiba" },
+                  { "PE": "Pernambuco" },
+                  { "PI": "Piaui" },
+                  { "PR": "Parana" },
+                  { "RJ": "Rio de Janeiro" },
+                  { "RN": "Rio Grande do Norte" },
+                  { "RO": "Rondonia" },
+                  { "RR": "Roraima" },
+                  { "RS": "Rio Grande do Sul" },
+                  { "SC": "Santa Catarina" },
+                  { "SE": "Sergipe" },
+                  { "SP": "Sao Paulo" },
+                  { "TO": "Tocantins" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{5}[\\-]?\\d{3}$",
+                "eg": "10025-345"
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "British Indian Ocean Territory",
+      "iso": "IO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "British Virgin Islands",
+      "iso": "VG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Brunei",
+      "iso": "BN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Bulgaria",
+      "iso": "BG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Burkina Faso",
+      "iso": "BF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Burundi",
+      "iso": "BI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cambodia",
+      "iso": "KH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cameroon",
+      "iso": "CM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Canada",
+      "iso": "CA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "AB": "Alberta" },
+                  { "BC": "British Columbia" },
+                  { "MB": "Manitoba" },
+                  { "NB": "New Brunswick" },
+                  { "NL": "Newfoundland" },
+                  { "NT": "Northwest Territories" },
+                  { "NS": "Nova Scotia" },
+                  { "NU": "Nunavut" },
+                  { "ON": "Ontario" },
+                  { "PE": "Prince Edward Island" },
+                  { "QC": "Quebec" },
+                  { "SK": "Saskatchewan" },
+                  { "YT": "Yukon Territory" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ ]?\\d[ABCEGHJ-NPRSTV-Z]\\d$",
+                "eg": "K1A 0B1"
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Cape Verde",
+      "iso": "CV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cayman Islands",
+      "iso": "KY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": ["administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Central African Republic",
+      "iso": "CF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Chad",
+      "iso": "TD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Chile",
+      "iso": "CL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  {
+                    "AI": "Ays\u00e9n del General Carlos Ib\u00e1\u00f1ez del Campo"
+                  },
+                  { "AN": "Antofagasta" },
+                  { "AR": "Araucan\u00eda" },
+                  { "AP": "Arica y Parinacota" },
+                  { "AT": "Atacama" },
+                  { "BI": "Biob\u00edo" },
+                  { "CO": "Coquimbo" },
+                  { "LI": "Libertador General Bernardo O'Higgins" },
+                  { "LL": "Los Lagos" },
+                  { "LR": "Los R\u00edos" },
+                  { "MA": "Magallanes y de la Ant\u00e1rtica Chilena" },
+                  { "ML": "Maule" },
+                  { "RM": "Metropolitana de Santiago" },
+                  { "TA": "Tarapac\u00e1" },
+                  { "VS": "Valpara\u00edso" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "China",
+      "iso": "CN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "District" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "BJ": "Beijing" },
+                  { "SH": "Shanghai" },
+                  { "GD": "Guangdong" },
+                  { "TJ": "Tianjin" },
+                  { "HE": "Hebei" },
+                  { "SX": "Shanxi" },
+                  { "NM": "Inner Mongolia" },
+                  { "LN": "Liaoning" },
+                  { "JL": "Jilin" },
+                  { "HL": "Heilongjiang" },
+                  { "JS": "Jiangsu" },
+                  { "ZJ": "Zhejiang" },
+                  { "AH": "Anhui" },
+                  { "FJ": "Fujian" },
+                  { "JX": "Jiangxi" },
+                  { "SD": "Shandong" },
+                  { "HA": "Henan" },
+                  { "HB": "Hubei" },
+                  { "HN": "Hunan" },
+                  { "GX": "Guangxi" },
+                  { "HI": "Hainan" },
+                  { "CQ": "Chongqing" },
+                  { "SC": "Sichuan" },
+                  { "GZ": "Guizhou" },
+                  { "YN": "Yunnan" },
+                  { "XZ": "Tibet" },
+                  { "SN": "Shaanxi" },
+                  { "GS": "Gansu" },
+                  { "QH": "Qinghai" },
+                  { "NX": "Ningxia Hui" },
+                  { "XJ": "Xinjiang Uyghur" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{6}$",
+                "eg": "101200"
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Christmas Island",
+      "iso": "CX",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cocos (Keeling) Islands",
+      "iso": "CC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Colombia",
+      "iso": "CO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Comoros",
+      "iso": "KM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Congo (Brazzaville)",
+      "iso": "CG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Congo (Kinshasa)",
+      "iso": "CD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cook Islands",
+      "iso": "CK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Costa Rica",
+      "iso": "CR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cuba",
+      "iso": "CU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Croatia",
+      "iso": "HR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cura\u00c1ao",
+      "iso": "CW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Cyprus",
+      "iso": "CY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Czech Republic",
+      "iso": "CZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Denmark",
+      "iso": "DK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "8660"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Djibouti",
+      "iso": "DJ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Dominica",
+      "iso": "DM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Dominican Republic",
+      "iso": "DO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Ecuador",
+      "iso": "EC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Egypt",
+      "iso": "EG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Governorate",
+                "options": [
+                  { "": "--" },
+                  { "ALX": "Alexandria" },
+                  { "ASN": "Aswan" },
+                  { "AST": "Asyut" },
+                  { "BH": "Beheira" },
+                  { "BNS": "Beni Suef" },
+                  { "C": "Cairo" },
+                  { "DK": "Dakahlia" },
+                  { "DT": "Damietta" },
+                  { "FYM": "Faiyum" },
+                  { "GH": "Gharbia" },
+                  { "GZ": "Giza" },
+                  { "IS": "Ismailia" },
+                  { "KFS": "Kafr el-Sheikh" },
+                  { "MT": "Matruh" },
+                  { "MN": "Minya" },
+                  { "MNF": "Monufia" },
+                  { "WAD": "New Valley" },
+                  { "SIN": "North Sinai" },
+                  { "PTS": "Port Said" },
+                  { "KB": "Qalyubia" },
+                  { "KN": "Qena" },
+                  { "BA": "Red Sea" },
+                  { "SHR": "Sharqia" },
+                  { "SHG": "Sohag" },
+                  { "JS": "South Sinai" },
+                  { "SUZ": "Suez" },
+                  { "LX": "Luxor" }
+                ]
+              }
+            },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "El Salvador",
+      "iso": "SV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Equatorial Guinea",
+      "iso": "GQ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Eritrea",
+      "iso": "ER",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Estonia",
+      "iso": "EE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Ethiopia",
+      "iso": "ET",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Falkland Islands",
+      "iso": "FK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Faroe Islands",
+      "iso": "FO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Fiji",
+      "iso": "FJ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Finland",
+      "iso": "FI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{5}$",
+                "eg": "00550"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "France",
+      "iso": "FR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{2}[ ]?\\d{3}$",
+                "eg": "75002"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "French Guiana",
+      "iso": "GF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78]3\\d{2}$",
+                "eg": "97300"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "French Polynesia",
+      "iso": "PF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "French Southern Territories",
+      "iso": "TF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Gabon",
+      "iso": "GA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Gambia",
+      "iso": "GM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Georgia",
+      "iso": "GE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Germany",
+      "iso": "DE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{5}$",
+                "eg": "60322"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Ghana",
+      "iso": "GH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Gibraltar",
+      "iso": "GI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "postalcode": { "label": "Postal code" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Greece",
+      "iso": "GR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{3} ?\\d{2}$",
+                "eg": "151 24"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Greenland",
+      "iso": "GL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^39\\d{2}$",
+                "eg": "3911"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Grenada",
+      "iso": "GD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Guadeloupe",
+      "iso": "GP",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78][01]\\d{2}$",
+                "eg": "97100"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Guam",
+      "iso": "GU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Guatemala",
+      "iso": "GT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Guernsey",
+      "iso": "GG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^GY\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$",
+                "eg": "GY1 1AA"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Guinea",
+      "iso": "GN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Guinea-Bissau",
+      "iso": "GW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Guyana",
+      "iso": "GY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Haiti",
+      "iso": "HT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Heard Island and McDonald Islands",
+      "iso": "HM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Honduras",
+      "iso": "HN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Hong Kong S.A.R., China",
+      "iso": "HK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "District" } },
+            {
+              "administrativearea": {
+                "label": "Area",
+                "options": [
+                  { "": "--" },
+                  { "Kowloon": "Kowloon" },
+                  { "Hong Kong Island": "Hong Kong Island" },
+                  { "New Territories": "New Territories" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Hungary",
+      "iso": "HU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Iceland",
+      "iso": "IS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "India",
+      "iso": "IN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "AP": "Andhra Pradesh" },
+                  { "AR": "Arunachal Pradesh" },
+                  { "AS": "Assam" },
+                  { "BR": "Bihar" },
+                  { "CT": "Chhattisgarh" },
+                  { "GA": "Goa" },
+                  { "GJ": "Gujarat" },
+                  { "HR": "Haryana" },
+                  { "HP": "Himachal Pradesh" },
+                  { "JK": "Jammu and Kashmir" },
+                  { "JH": "Jharkhand" },
+                  { "KA": "Karnataka" },
+                  { "KL": "Kerala" },
+                  { "MP": "Madhya Pradesh" },
+                  { "MH": "Maharashtra" },
+                  { "MN": "Manipur" },
+                  { "ML": "Meghalaya" },
+                  { "MZ": "Mizoram" },
+                  { "NL": "Nagaland" },
+                  { "OR": "Odisha" },
+                  { "PB": "Punjab" },
+                  { "RJ": "Rajasthan" },
+                  { "SK": "Sikkim" },
+                  { "TN": "Tamil Nadu" },
+                  { "TR": "Tripura" },
+                  { "UP": "Uttar Pradesh" },
+                  { "UT": "Uttarakhand" },
+                  { "WB": "West Bengal" },
+                  { "": "--" },
+                  { "AN": "Andaman and Nicobar Islands" },
+                  { "CH": "Chandigarh" },
+                  { "DN": "Dadra and Nagar Haveli" },
+                  { "DD": "Daman and Diu" },
+                  { "LD": "Lakshadweep" },
+                  { "DL": "National Capital Territory of Delhi" },
+                  { "PY": "Puducherry" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "PIN code",
+                "format": "^\\d{6}$",
+                "eg": "110005"
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Indonesia",
+      "iso": "ID",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City/regency" } },
+            { "postalcode": { "label": "Postal code" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "AC": "Aceh" },
+                  { "BA": "Bali" },
+                  { "BB": "Bangka Belitung" },
+                  { "BT": "Banten" },
+                  { "BE": "Bengkulu" },
+                  { "JK": "DKI Jakarta" },
+                  { "YO": "D.I. Yogyakarta" },
+                  { "GO": "Gorontalo" },
+                  { "JA": "Jambi" },
+                  { "JB": "Jawa Barat" },
+                  { "JT": "Jawa Tengah" },
+                  { "JI": "Jawa Timur" },
+                  { "KB": "Kalimantan Barat" },
+                  { "KS": "Kalimantan Selatan" },
+                  { "KT": "Kalimantan Tengah" },
+                  { "KI": "Kalimantan Timur" },
+                  { "KR": "Kepulauan Riau" },
+                  { "LA": "Lampung" },
+                  { "MA": "Maluku" },
+                  { "MU": "Maluku Utara" },
+                  { "NB": "Nusa Tenggara Barat" },
+                  { "NT": "Nusa Tenggara Timur" },
+                  { "PA": "Papua" },
+                  { "PB": "Papua Barat" },
+                  { "RI": "Riau" },
+                  { "SR": "Sulawesi Barat" },
+                  { "SN": "Sulawesi Selatan" },
+                  { "ST": "Sulawesi Tengah" },
+                  { "SG": "Sulawesi Tenggara" },
+                  { "SA": "Sulawesi Utara" },
+                  { "SB": "Sumatera Barat" },
+                  { "SS": "Sumatera Selatan" },
+                  { "SU": "Sumatera Utara" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Iran",
+      "iso": "IR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "Neighborhood" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Iraq",
+      "iso": "IQ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Ireland",
+      "iso": "IE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "Town/city" } },
+            {
+              "administrativearea": {
+                "label": "County",
+                "options": [
+                  { "": "--" },
+                  { "CW": "Co Carlow" },
+                  { "CN": "Co Cavan" },
+                  { "CE": "Co Clare" },
+                  { "CO": "Co Cork" },
+                  { "DL": "Co Donegal" },
+                  { "D": "Co Dublin" },
+                  { "D1": "Dublin 1" },
+                  { "D2": "Dublin 2" },
+                  { "D3": "Dublin 3" },
+                  { "D4": "Dublin 4" },
+                  { "D5": "Dublin 5" },
+                  { "D6": "Dublin 6" },
+                  { "D6W": "Dublin 6w" },
+                  { "D7": "Dublin 7" },
+                  { "D8": "Dublin 8" },
+                  { "D9": "Dublin 9" },
+                  { "D10": "Dublin 10" },
+                  { "D11": "Dublin 11" },
+                  { "D12": "Dublin 12" },
+                  { "D13": "Dublin 13" },
+                  { "D14": "Dublin 14" },
+                  { "D15": "Dublin 15" },
+                  { "D16": "Dublin 16" },
+                  { "D17": "Dublin 17" },
+                  { "D18": "Dublin 18" },
+                  { "D19": "Dublin 19" },
+                  { "D20": "Dublin 20" },
+                  { "D21": "Dublin 21" },
+                  { "D22": "Dublin 22" },
+                  { "D23": "Dublin 23" },
+                  { "D24": "Dublin 24" },
+                  { "G": "Co Galway" },
+                  { "KY": "Co Kerry" },
+                  { "KE": "Co Kildare" },
+                  { "KK": "Co Kilkenny" },
+                  { "LS": "Co Laois" },
+                  { "LM": "Co Leitrim" },
+                  { "LK": "Co Limerick" },
+                  { "LD": "Co Longford" },
+                  { "LH": "Co Louth" },
+                  { "MO": "Co Mayo" },
+                  { "MH": "Co Meath" },
+                  { "MN": "Co Monaghan" },
+                  { "OY": "Co Offaly" },
+                  { "RN": "Co Roscommon" },
+                  { "SO": "Co Sligo" },
+                  { "TA": "Co Tipperary" },
+                  { "WD": "Co Waterford" },
+                  { "WH": "Co Westmeath" },
+                  { "WX": "Co Wexford" },
+                  { "WW": "Co Wicklow" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Isle of Man",
+      "iso": "IM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^IM\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$",
+                "eg": "IM99 1PS"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Israel",
+      "iso": "IL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Italy",
+      "iso": "IT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "AG": "Agrigento" },
+                  { "AL": "Alessandria" },
+                  { "AN": "Ancona" },
+                  { "AO": "Valle d'Aosta/Vall\u00c8e d'Aoste" },
+                  { "AP": "Ascoli Piceno" },
+                  { "AQ": "L'Aquila" },
+                  { "AR": "Arezzo" },
+                  { "AT": "Asti" },
+                  { "AV": "Avellino" },
+                  { "BA": "Bari" },
+                  { "BG": "Bergamo" },
+                  { "BI": "Biella" },
+                  { "BL": "Belluno" },
+                  { "BN": "Benevento" },
+                  { "BO": "Bologna" },
+                  { "BR": "Brindisi" },
+                  { "BS": "Brescia" },
+                  { "BT": "Barletta-Andria-Trani" },
+                  { "BZ": "Bolzano/Bozen" },
+                  { "CA": "Cagliari" },
+                  { "CB": "Campobasso" },
+                  { "CE": "Caserta" },
+                  { "CH": "Chieti" },
+                  { "CI": "Carbonia-Iglesias" },
+                  { "CL": "Caltanissetta" },
+                  { "CN": "Cuneo" },
+                  { "CO": "Como" },
+                  { "CR": "Cremona" },
+                  { "CS": "Cosenza" },
+                  { "CT": "Catania" },
+                  { "CZ": "Catanzaro" },
+                  { "EN": "Enna" },
+                  { "FC": "Forl\u00cf-Cesena" },
+                  { "FE": "Ferrara" },
+                  { "FG": "Foggia" },
+                  { "FI": "Firenze" },
+                  { "FM": "Fermo" },
+                  { "FR": "Frosinone" },
+                  { "GE": "Genova" },
+                  { "GO": "Gorizia" },
+                  { "GR": "Grosseto" },
+                  { "IM": "Imperia" },
+                  { "IS": "Isernia" },
+                  { "KR": "Crotone" },
+                  { "LC": "Lecco" },
+                  { "LE": "Lecce" },
+                  { "LI": "Livorno" },
+                  { "LO": "Lodi" },
+                  { "LT": "Latina" },
+                  { "LU": "Lucca" },
+                  { "MB": "Monza e Brianza" },
+                  { "MC": "Macerata" },
+                  { "ME": "Messina" },
+                  { "MI": "Milano" },
+                  { "MN": "Mantova" },
+                  { "MO": "Modena" },
+                  { "MS": "Massa-Carrara" },
+                  { "MT": "Matera" },
+                  { "NA": "Napoli" },
+                  { "NO": "Novara" },
+                  { "NU": "Nuoro" },
+                  { "OG": "Ogliastra" },
+                  { "OR": "Oristano" },
+                  { "OT": "Olbia-Tempio" },
+                  { "PA": "Palermo" },
+                  { "PC": "Piacenza" },
+                  { "PD": "Padova" },
+                  { "PE": "Pescara" },
+                  { "PG": "Perugia" },
+                  { "PI": "Pisa" },
+                  { "PN": "Pordenone" },
+                  { "PO": "Prato" },
+                  { "PR": "Parma" },
+                  { "PT": "Pistoia" },
+                  { "PU": "Pesaro e Urbino" },
+                  { "PV": "Pavia" },
+                  { "PZ": "Potenza" },
+                  { "RA": "Ravenna" },
+                  { "RC": "Reggio di Calabria" },
+                  { "RE": "Reggio nell'Emilia" },
+                  { "RG": "Ragusa" },
+                  { "RI": "Rieti" },
+                  { "RM": "Roma" },
+                  { "RN": "Rimini" },
+                  { "RO": "Rovigo" },
+                  { "SA": "Salerno" },
+                  { "SI": "Siena" },
+                  { "SO": "Sondrio" },
+                  { "SP": "La Spezia" },
+                  { "SR": "Siracusa" },
+                  { "SS": "Sassari" },
+                  { "SV": "Savona" },
+                  { "TA": "Taranto" },
+                  { "TE": "Teramo" },
+                  { "TN": "Trento" },
+                  { "TO": "Torino" },
+                  { "TP": "Trapani" },
+                  { "TR": "Terni" },
+                  { "TS": "Trieste" },
+                  { "TV": "Treviso" },
+                  { "UD": "Udine" },
+                  { "VA": "Varese" },
+                  { "VB": "Verbano-Cusio-Ossola" },
+                  { "VC": "Vercelli" },
+                  { "VE": "Venezia" },
+                  { "VI": "Vicenza" },
+                  { "VR": "Verona" },
+                  { "VS": "Medio Campidano" },
+                  { "VT": "Viterbo" },
+                  { "VV": "Vibo Valentia" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Ivory Coast",
+      "iso": "CI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Jamaica",
+      "iso": "JM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Parish",
+                "options": [
+                  { "": "--" },
+                  { "Clarendon": "Clarendon" },
+                  { "Hanover": "Hanover" },
+                  { "Kingston": "Kingston" },
+                  { "Manchester": "Manchester" },
+                  { "Portland": "Portland" },
+                  { "St. Andrew": "St. Andrew" },
+                  { "St. Ann": "St. Ann" },
+                  { "St. Catherine": "St. Catherine" },
+                  { "St. Elizabeth": "St. Elizabeth" },
+                  { "St. James": "St. James" },
+                  { "St. Mary": "St. Mary" },
+                  { "St. Thomas": "St. Thomas" },
+                  { "Trelawny": "Trelawny" },
+                  { "Westmoreland": "Westmoreland" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Japan",
+      "iso": "JP",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{3}-?\\d{4}$",
+                "eg": "142-0062"
+              }
+            },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Prefecture",
+                "options": [
+                  { "": "--" },
+                  { "Hokkaido": "Hokkaido" },
+                  { "Aomori": "Aomori" },
+                  { "Iwate": "Iwate" },
+                  { "Miyagi": "Miyagi" },
+                  { "Akita": "Akita" },
+                  { "Yamagata": "Yamagata" },
+                  { "Fukushima": "Fukushima" },
+                  { "Ibaraki": "Ibaraki" },
+                  { "Tochigi": "Tochigi" },
+                  { "Gunma": "Gunma" },
+                  { "Saitama": "Saitama" },
+                  { "Chiba": "Chiba" },
+                  { "Tokyo": "Tokyo" },
+                  { "Kanagawa": "Kanagawa" },
+                  { "Niigata": "Niigata" },
+                  { "Toyama": "Toyama" },
+                  { "Ishikawa": "Ishikawa" },
+                  { "Fukui": "Fukui" },
+                  { "Yamanashi": "Yamanashi" },
+                  { "Nagano": "Nagano" },
+                  { "Gifu": "Gifu" },
+                  { "Shizuoka": "Shizuoka" },
+                  { "Aichi": "Aichi" },
+                  { "Mie": "Mie" },
+                  { "Shiga": "Shiga" },
+                  { "Kyoto": "Kyoto" },
+                  { "Osaka": "Osaka" },
+                  { "Hyogo": "Hyogo" },
+                  { "Nara": "Nara" },
+                  { "Wakayama": "Wakayama" },
+                  { "Tottori": "Tottori" },
+                  { "Shimane": "Shimane" },
+                  { "Okayama": "Okayama" },
+                  { "Hiroshima": "Hiroshima" },
+                  { "Yamaguchi": "Yamaguchi" },
+                  { "Tokushima": "Tokushima" },
+                  { "Kagawa": "Kagawa" },
+                  { "Ehime": "Ehime" },
+                  { "Kochi": "Kochi" },
+                  { "Fukuoka": "Fukuoka" },
+                  { "Saga": "Saga" },
+                  { "Nagasaki": "Nagasaki" },
+                  { "Kumamoto": "Kumamoto" },
+                  { "Oita": "Oita" },
+                  { "Miyazaki": "Miyazaki" },
+                  { "Kagoshima": "Kagoshima" },
+                  { "Okinawa": "Okinawa" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Jersey",
+      "iso": "JE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^JE\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$",
+                "eg": "JE2 2BT"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Jordan",
+      "iso": "JO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Kazakhstan",
+      "iso": "KZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Kenya",
+      "iso": "KE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Kiribati",
+      "iso": "KI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Kosovo",
+      "iso": "KV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Kuwait",
+      "iso": "KW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Kyrgyzstan",
+      "iso": "KG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Laos",
+      "iso": "LA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Latvia",
+      "iso": "LV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Lebanon",
+      "iso": "LB",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Lesotho",
+      "iso": "LS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Liberia",
+      "iso": "LR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Libya",
+      "iso": "LY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Liechtenstein",
+      "iso": "LI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^(948[5-9])|(949[0-7])$",
+                "eg": "9496"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Lithuania",
+      "iso": "LT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Luxembourg",
+      "iso": "LU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "4750"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Macao S.A.R., China",
+      "iso": "MO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Macedonia",
+      "iso": "MK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Madagascar",
+      "iso": "MG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Malawi",
+      "iso": "MW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Malaysia",
+      "iso": "MY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "Village/township" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "Johor": "Johor" },
+                  { "Kedah": "Kedah" },
+                  { "Kelantan": "Kelantan" },
+                  { "Kuala Lumpur": "Kuala Lumpur" },
+                  { "Labuan": "Labuan" },
+                  { "Melaka": "Melaka" },
+                  { "Negeri Sembilan": "Negeri Sembilan" },
+                  { "Pahang": "Pahang" },
+                  { "Perak": "Perak" },
+                  { "Perlis": "Perlis" },
+                  { "Pulau Pinang": "Pulau Pinang" },
+                  { "Putrajaya": "Putrajaya" },
+                  { "Sabah": "Sabah" },
+                  { "Sarawak": "Sarawak" },
+                  { "Selangor": "Selangor" },
+                  { "Terengganu": "Terengganu" }
+                ]
+              }
+            },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Maldives",
+      "iso": "MV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Mali",
+      "iso": "ML",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Malta",
+      "iso": "MT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Marshall Islands",
+      "iso": "MH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Martinique",
+      "iso": "MQ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78]2\\d{2}$",
+                "eg": "97220"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Mauritania",
+      "iso": "MR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Mauritius",
+      "iso": "MU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Mayotte",
+      "iso": "YT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^976\\d{2}$",
+                "eg": "97600"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Mexico",
+      "iso": "MX",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "Neighborhood" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "AGU": "Aguascalientes" },
+                  { "BCN": "Baja California" },
+                  { "BCS": "Baja California Sur" },
+                  { "CAM": "Campeche" },
+                  { "COA": "Coahuila" },
+                  { "COL": "Colima" },
+                  { "CHP": "Chiapas" },
+                  { "CHH": "Chihuahua" },
+                  { "DIF": "Distrito Federal" },
+                  { "DUG": "Durango" },
+                  { "MEX": "Estado de M\u00e9xico" },
+                  { "GUA": "Guanajuato" },
+                  { "GRO": "Guerrero" },
+                  { "HID": "Hidalgo" },
+                  { "JAL": "Jalisco" },
+                  { "MIC": "Michoac\u00e1n" },
+                  { "MOR": "Morelos" },
+                  { "NAY": "Nayarit" },
+                  { "NLE": "Nuevo Le\u00f3n" },
+                  { "OAX": "Oaxaca" },
+                  { "PUE": "Puebla" },
+                  { "QUE": "Queretaro" },
+                  { "ROO": "Quintana Roo" },
+                  { "SLP": "San Luis Potos\u00ed" },
+                  { "SIN": "Sinaloa" },
+                  { "SON": "Sonora" },
+                  { "TAB": "Tabasco" },
+                  { "TAM": "Tamaulipas" },
+                  { "TLA": "Tlaxcala" },
+                  { "VER": "Veracruz" },
+                  { "YUC": "Yucat\u00e1n" },
+                  { "ZAC": "Zacatecas" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{5}$",
+                "eg": "03400"
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Micronesia",
+      "iso": "FM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Moldova",
+      "iso": "MD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Monaco",
+      "iso": "MC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Mongolia",
+      "iso": "MN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Montenegro",
+      "iso": "ME",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Montserrat",
+      "iso": "MS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Morocco",
+      "iso": "MA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Mozambique",
+      "iso": "MZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Myanmar",
+      "iso": "MM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Namibia",
+      "iso": "NA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Nauru",
+      "iso": "NR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "administrativearea": { "label": "District" } }] }
+      ],
+      "required": ["administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Nepal",
+      "iso": "NP",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Netherlands",
+      "iso": "NL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}[ ]?[A-Z]{2}$",
+                "eg": "2585 GJ"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Netherlands Antilles",
+      "iso": "AN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "New Caledonia",
+      "iso": "NC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^988\\d{2}$",
+                "eg": "98814"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "New Zealand",
+      "iso": "NZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "Town/city" } },
+            {
+              "administrativearea": {
+                "label": "Region",
+                "options": [
+                  { "": "--" },
+                  { "AUK": "Auckland" },
+                  { "BOP": "Bay of Plenty" },
+                  { "CAN": "Canterbury" },
+                  { "HKB": "Hawke's Bay" },
+                  { "MWT": "Manawatu-Wanganui" },
+                  { "NTL": "Northland" },
+                  { "OTA": "Otago" },
+                  { "STL": "Southland" },
+                  { "TKI": "Taranaki" },
+                  { "WKO": "Waikato" },
+                  { "WGN": "Wellington" },
+                  { "WTC": "West Coast" },
+                  { "GIS": "Gisborne District" },
+                  { "MBH": "Marlborough District" },
+                  { "NSN": "Nelson" },
+                  { "TAS": "Tasman District" },
+                  { "CIT": "Chatham Islands Territory" }
+                ]
+              }
+            },
+            { "postalcode": { "label": "Postcode" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Nicaragua",
+      "iso": "NI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Department" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Niger",
+      "iso": "NE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Nigeria",
+      "iso": "NG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Niue",
+      "iso": "NU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Norfolk Island",
+      "iso": "NF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Northern Mariana Islands",
+      "iso": "MP",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "North Korea",
+      "iso": "KP",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Norway",
+      "iso": "NO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "0025"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Oman",
+      "iso": "OM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } },
+            { "administrativearea": { "label": "State" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Pakistan",
+      "iso": "PK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Palau",
+      "iso": "PW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Palestinian Territory",
+      "iso": "PS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Panama",
+      "iso": "PA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Papua New Guinea",
+      "iso": "PG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Paraguay",
+      "iso": "PY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Peru",
+      "iso": "PE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            {
+              "administrativearea": {
+                "label": "Region",
+                "options": [
+                  { "": "--" },
+                  { "AMA": "Amazonas" },
+                  { "ANC": "Ancash" },
+                  { "APU": "Apurimac" },
+                  { "ARE": "Arequipa" },
+                  { "AYA": "Ayacucho" },
+                  { "CAJ": "Cajamarca" },
+                  { "CAL": "Callao" },
+                  { "CUS": "Cusco" },
+                  { "HUV": "Huancavelica" },
+                  { "HUC": "Huanuco" },
+                  { "ICA": "Ica" },
+                  { "JUN": "Junin" },
+                  { "LAL": "La Libertad" },
+                  { "LAM": "Lambayeque" },
+                  { "LIM": "Lima" },
+                  { "LOR": "Loreto" },
+                  { "MDD": "Madre de Dios" },
+                  { "MOQ": "Moquegua" },
+                  { "PAS": "Pasco" },
+                  { "PIU": "Piura" },
+                  { "PUN": "Puno" },
+                  { "SAM": "San Martin" },
+                  { "TAC": "Tacna" },
+                  { "TUM": "Tumbes" },
+                  { "UCA": "Ucayali" }
+                ]
+              }
+            },
+            { "localityname": { "label": "District" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Philippines",
+      "iso": "PH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "Suburb" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Pitcairn",
+      "iso": "PN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Poland",
+      "iso": "PL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{2}-?\\d{3}$",
+                "eg": "00-950"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Portugal",
+      "iso": "PT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}-?\\d{3}$",
+                "eg": "2725-079"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Puerto Rico",
+      "iso": "PR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Qatar",
+      "iso": "QA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Reunion",
+      "iso": "RE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78]4\\d{2}$",
+                "eg": "97400"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Romania",
+      "iso": "RO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Russia",
+      "iso": "RU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "MOW": "Moskva" },
+                  { "SPE": "Sankt-Peterburg" },
+                  { "AD": "Adygeya, Respublika" },
+                  { "AL": "Altay, Respublika" },
+                  { "BA": "Bashkortostan, Respublika" },
+                  { "BU": "Buryatiya, Respublika" },
+                  { "CE": "Chechenskaya Respublika" },
+                  { "CU": "Chuvashskaya Respublika" },
+                  { "DA": "Dagestan, Respublika" },
+                  { "IN": "Ingushetiya, Respublika" },
+                  { "KB": "Kabardino-Balkarskaya Respublika" },
+                  { "KL": "Kalmykiya, Respublika" },
+                  { "KC": "Karachayevo-Cherkesskaya Respublika" },
+                  { "KR": "Kareliya, Respublika" },
+                  { "KK": "Khakasiya, Respublika" },
+                  { "KO": "Komi, Respublika" },
+                  { "ME": "Mariy El, Respublika" },
+                  { "MO": "Mordoviya, Respublika" },
+                  { "SA": "Sakha, Respublika [Yakutiya]" },
+                  { "SE": "Severnaya Osetiya-Alaniya, Respublika" },
+                  { "TA": "Tatarstan, Respublika" },
+                  { "TY": "Tyva, Respublika [Tuva]" },
+                  { "UD": "Udmurtskaya Respublika" },
+                  { "ALT": "Altayskiy kray" },
+                  { "KAM": "Kamchatskiy kray" },
+                  { "KHA": "Khabarovskiy kray" },
+                  { "KDA": "Krasnodarskiy kray" },
+                  { "KYA": "Krasnoyarskiy kray" },
+                  { "PER": "Permskiy kray" },
+                  { "PRI": "Primorskiy kray" },
+                  { "STA": "Stavropolskiy kray" },
+                  { "ZAB": "Zabaykalskiy kray" },
+                  { "AMU": "Amurskaya oblast" },
+                  { "ARK": "Arkhangelskaya oblast" },
+                  { "AST": "Astrakhanskaya oblast" },
+                  { "BEL": "Belgorodskaya oblast" },
+                  { "BRY": "Bryanskaya oblast" },
+                  { "CHE": "Chelyabinskaya oblast" },
+                  { "IRK": "Irkutskaya oblast" },
+                  { "IVA": "Ivanovskaya oblast" },
+                  { "KGD": "Kaliningradskaya oblast" },
+                  { "KLU": "Kaluzhskaya oblast" },
+                  { "KEM": "Kemerovskaya oblast" },
+                  { "KIR": "Kirovskaya oblast" },
+                  { "KOS": "Kostromskaya oblast" },
+                  { "KGN": "Kurganskaya oblast" },
+                  { "KRS": "Kurskaya oblast" },
+                  { "LEN": "Leningradskaya oblast" },
+                  { "LIP": "Lipetskaya oblast" },
+                  { "MAG": "Magadanskaya oblast" },
+                  { "MOS": "Moskovskaya oblast" },
+                  { "MUR": "Murmanskaya oblast" },
+                  { "NIZ": "Nizhegorodskaya oblast" },
+                  { "NGR": "Novgorodskaya oblast" },
+                  { "NVS": "Novosibirskaya oblast" },
+                  { "OMS": "Omskaya oblast" },
+                  { "ORE": "Orenburgskaya oblast" },
+                  { "ORL": "Orlovskaya oblast" },
+                  { "PNZ": "Penzenskaya oblast" },
+                  { "PSK": "Pskovskaya oblast" },
+                  { "ROS": "Rostovskaya oblast" },
+                  { "RYA": "Ryazanskaya oblast" },
+                  { "SAK": "Sakhalinskaya oblast" },
+                  { "SAM": "Samarskaya oblast" },
+                  { "SAR": "Saratovskaya oblast" },
+                  { "SMO": "Smolenskaya oblast" },
+                  { "SVE": "Sverdlovskaya oblast" },
+                  { "TAM": "Tambovskaya oblast" },
+                  { "TOM": "Tomskaya oblast" },
+                  { "TUL": "Tulskaya oblast" },
+                  { "TVE": "Tverskaya oblast" },
+                  { "TYU": "Tyumenskaya oblast" },
+                  { "ULY": "Ulyanovskaya oblast" },
+                  { "VLA": "Vladimirskaya oblast" },
+                  { "VGG": "Volgogradskaya oblast" },
+                  { "VLG": "Vologodskaya oblast" },
+                  { "VOR": "Voronezhskaya oblast" },
+                  { "YAR": "Yaroslavskaya oblast" },
+                  { "YEV": "Yevreyskaya avtonomnaya oblast" },
+                  { "CHU": "Chukotskiy avtonomnyy okrug" },
+                  { "KHM": "Khanty-Mansiyskiy avtonomnyy okrug-Yugra" },
+                  { "NEN": "Nenetskiy avtonomnyy okrug" },
+                  { "YAN": "Yamalo-Nenetskiy avtonomnyy okrug" }
+                ]
+              }
+            },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Rwanda",
+      "iso": "RW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Saint Barth\u00c8lemy",
+      "iso": "BL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78][01]\\d{2}$",
+                "eg": "97100"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Saint Helena",
+      "iso": "SH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^(ASCN|STHL)[ ]?1ZZ$",
+                "eg": "STHL 1ZZ"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Saint Kitts and Nevis",
+      "iso": "KN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Saint Lucia",
+      "iso": "LC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Saint Martin (French part)",
+      "iso": "MF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78][01]\\d{2}$",
+                "eg": "97100"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Saint Pierre and Miquelon",
+      "iso": "PM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^9[78]5\\d{2}$",
+                "eg": "97500"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Saint Vincent and the Grenadines",
+      "iso": "VC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Samoa",
+      "iso": "WS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "San Marino",
+      "iso": "SM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Sao Tome and Principe",
+      "iso": "ST",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Saudi Arabia",
+      "iso": "SA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Senegal",
+      "iso": "SN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Serbia",
+      "iso": "RS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Seychelles",
+      "iso": "SC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Island" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Sierra Leone",
+      "iso": "SL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Singapore",
+      "iso": "SG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{6}$",
+                "eg": "238880"
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Slovakia",
+      "iso": "SK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Slovenia",
+      "iso": "SI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Solomon Islands",
+      "iso": "SB",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Somalia",
+      "iso": "SO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "South Africa",
+      "iso": "ZA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "Eastern Cape": "Eastern Cape" },
+                  { "Free State": "Free State" },
+                  { "Gauteng": "Gauteng" },
+                  { "KwaZulu-Natal": "KwaZulu-Natal" },
+                  { "Limpopo": "Limpopo" },
+                  { "Mpumalanga": "Mpumalanga" },
+                  { "North West": "North West" },
+                  { "Northern Cape": "Northern Cape" },
+                  { "Western Cape": "Western Cape" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "South Georgia and the South Sandwich Islands",
+      "iso": "GS",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "South Korea",
+      "iso": "KR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "District" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "Seoul": "Seoul" },
+                  { "Busan": "Busan" },
+                  { "Daegu": "Daegu" },
+                  { "Daejeon": "Daejeon" },
+                  { "Gwangju": "Gwangju" },
+                  { "Incheon": "Incheon" },
+                  { "Ulsan": "Ulsan" },
+                  { "Chungcheongbuk-do": "Chungcheongbuk-do" },
+                  { "Chungcheongnam-do": "Chungcheongnam-do" },
+                  { "Gangwon-do": "Gangwon-do" },
+                  { "Gyeonggi-do": "Gyeonggi-do" },
+                  { "Gyeongsangbuk-do": "Gyeongsangbuk-do" },
+                  { "Gyeongsangnam-do": "Gyeongsangnam-do" },
+                  { "Jeju-do": "Jeju-do" },
+                  { "Jeollabuk-do": "Jeollabuk-do" },
+                  { "Jeollanam-do": "Jeollanam-do" },
+                  { "Sejong": "Sejong" }
+                ]
+              }
+            },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Spain",
+      "iso": "ES",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "C": "A Coru\u00f1a" },
+                  { "VI": "Alava" },
+                  { "AB": "Albacete" },
+                  { "A": "Alicante" },
+                  { "AL": "Almer\u00eda" },
+                  { "O": "Asturias" },
+                  { "AV": "\u00c1vila" },
+                  { "BA": "Badajoz" },
+                  { "PM": "Baleares" },
+                  { "B": "Barcelona" },
+                  { "BU": "Burgos" },
+                  { "CC": "C\u00e1ceres" },
+                  { "CA": "C\u00e1diz" },
+                  { "S": "Cantabria" },
+                  { "CS": "Castell\u00f3n" },
+                  { "CE": "Ceuta" },
+                  { "CR": "Ciudad Real" },
+                  { "CO": "C\u00f3rdoba" },
+                  { "CU": "Cuenca" },
+                  { "GI": "Gerona" },
+                  { "GR": "Granada" },
+                  { "GU": "Guadalajara" },
+                  { "SS": "Guip\u00fazcoa" },
+                  { "H": "Huelva" },
+                  { "HU": "Huesca" },
+                  { "J": "Ja\u00e9n" },
+                  { "LO": "La Rioja" },
+                  { "GC": "Las Palmas" },
+                  { "LE": "Le\u00f3n" },
+                  { "L": "L\u00e9rida" },
+                  { "LU": "Lugo" },
+                  { "M": "Madrid" },
+                  { "MA": "M\u00e1laga" },
+                  { "ML": "Melilla" },
+                  { "MU": "Murcia" },
+                  { "NA": "Navarra" },
+                  { "OR": "Ourense" },
+                  { "P": "Palencia" },
+                  { "PO": "Pontevedra" },
+                  { "SA": "Salamanca" },
+                  { "TF": "Santa Cruz de Tenerife" },
+                  { "SG": "Segovia" },
+                  { "SE": "Sevilla" },
+                  { "SO": "Soria" },
+                  { "T": "Tarragona" },
+                  { "TE": "Teruel" },
+                  { "TO": "Toledo" },
+                  { "V": "Valencia" },
+                  { "VA": "Valladolid" },
+                  { "BI": "Vizcaya" },
+                  { "ZA": "Zamora" },
+                  { "Z": "Zaragoza" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Sri Lanka",
+      "iso": "LK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Sudan",
+      "iso": "SD",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Suriname",
+      "iso": "SR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Svalbard and Jan Mayen",
+      "iso": "SJ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "9170"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Swaziland",
+      "iso": "SZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Sweden",
+      "iso": "SE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{3}[ ]?\\d{2}$",
+                "eg": "11455"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Switzerland",
+      "iso": "CH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{4}$",
+                "eg": "2544"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Syria",
+      "iso": "SY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Taiwan",
+      "iso": "TW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^\\d{3}(\\d{2})?$",
+                "eg": "100"
+              }
+            },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "TXG": "Taichung City" },
+                  { "TPE": "Taipei City" },
+                  { "TTT": "Taitung County" },
+                  { "TNN": "Tainan City" },
+                  { "ILA": "Yilan County" },
+                  { "HUA": "Hualien County" },
+                  { "Kinmen County": "Kinmen County" },
+                  { "NAN": "Nantou County" },
+                  { "PIF": "Pingtung County" },
+                  { "MIA": "Miaoli County" },
+                  { "TAO": "Taoyuan County" },
+                  { "KHH": "Kaohsiung City" },
+                  { "KEE": "Keelung City" },
+                  { "Lienchiang County": "Lienchiang County" },
+                  { "YUN": "Yunlin County" },
+                  { "TPQ": "New Taipei City" },
+                  { "HSZ": "Hsinchu City" },
+                  { "HSQ": "Hsinchu County" },
+                  { "CYI": "Chiayi City" },
+                  { "CYQ": "Chiayi County" },
+                  { "CHA": "Changhua County" },
+                  { "PEN": "Penghu County" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Tajikistan",
+      "iso": "TJ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Tanzania",
+      "iso": "TZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Thailand",
+      "iso": "TH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "dependent_localityname": { "label": "Suburb" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Province" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Timor-Leste",
+      "iso": "TL",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Togo",
+      "iso": "TG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Tokelau",
+      "iso": "TK",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Tonga",
+      "iso": "TO",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Trinidad and Tobago",
+      "iso": "TT",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Tunisia",
+      "iso": "TN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Turkey",
+      "iso": "TR",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            {
+              "administrativearea": {
+                "label": "Province",
+                "options": [
+                  { "": "--" },
+                  { "Adana": "Adana" },
+                  { "Ad\u0131yaman": "Ad\u0131yaman" },
+                  { "Afyon": "Afyon" },
+                  { "A\u011fr\u0131": "A\u011fr\u0131" },
+                  { "Aksaray": "Aksaray" },
+                  { "Amasya": "Amasya" },
+                  { "Ankara": "Ankara" },
+                  { "Antalya": "Antalya" },
+                  { "Ardahan": "Ardahan" },
+                  { "Artvin": "Artvin" },
+                  { "Ayd\u0131n": "Ayd\u0131n" },
+                  { "Bal\u0131kesir": "Bal\u0131kesir" },
+                  { "Bart\u0131n": "Bart\u0131n" },
+                  { "Batman": "Batman" },
+                  { "Bayburt": "Bayburt" },
+                  { "Bilecik": "Bilecik" },
+                  { "Bing\u00f6l": "Bing\u00f6l" },
+                  { "Bitlis": "Bitlis" },
+                  { "Bolu": "Bolu" },
+                  { "Burdur": "Burdur" },
+                  { "Bursa": "Bursa" },
+                  { "\u00c7anakkale": "\u00c7anakkale" },
+                  { "\u00c7ank\u0131r\u0131": "\u00c7ank\u0131r\u0131" },
+                  { "\u00c7orum": "\u00c7orum" },
+                  { "Denizli": "Denizli" },
+                  { "Diyarbak\u0131r": "Diyarbak\u0131r" },
+                  { "D\u00fczce": "D\u00fczce" },
+                  { "Edirne": "Edirne" },
+                  { "Elaz\u0131\u011f": "Elaz\u0131\u011f" },
+                  { "Erzincan": "Erzincan" },
+                  { "Erzurum": "Erzurum" },
+                  { "Eski\u015fehir": "Eski\u015fehir" },
+                  { "Gaziantep": "Gaziantep" },
+                  { "Giresun": "Giresun" },
+                  { "G\u00fcm\u00fc\u015fhane": "G\u00fcm\u00fc\u015fhane" },
+                  { "Hakkari": "Hakkari" },
+                  { "Hatay": "Hatay" },
+                  { "I\u011fd\u0131r": "I\u011fd\u0131r" },
+                  { "Isparta": "Isparta" },
+                  { "\u0130stanbul": "\u0130stanbul" },
+                  { "\u0130zmir": "\u0130zmir" },
+                  { "Kahramanmara\u015f": "Kahramanmara\u015f" },
+                  { "Karab\u00fck": "Karab\u00fck" },
+                  { "Karaman": "Karaman" },
+                  { "Kars": "Kars" },
+                  { "Kastamonu": "Kastamonu" },
+                  { "Kayseri": "Kayseri" },
+                  { "K\u0131r\u0131kkale": "K\u0131r\u0131kkale" },
+                  { "K\u0131rklareli": "K\u0131rklareli" },
+                  { "K\u0131r\u015fehir": "K\u0131r\u015fehir" },
+                  { "Kilis": "Kilis" },
+                  { "Kocaeli": "Kocaeli" },
+                  { "Konya": "Konya" },
+                  { "K\u00fctahya": "K\u00fctahya" },
+                  { "Malatya": "Malatya" },
+                  { "Manisa": "Manisa" },
+                  { "Mardin": "Mardin" },
+                  { "Mersin": "Mersin" },
+                  { "Mu\u011fla": "Mu\u011fla" },
+                  { "Mu\u015f": "Mu\u015f" },
+                  { "Nev\u015fehir": "Nev\u015fehir" },
+                  { "Ni\u011fde": "Ni\u011fde" },
+                  { "Ordu": "Ordu" },
+                  { "Osmaniye": "Osmaniye" },
+                  { "Rize": "Rize" },
+                  { "Sakarya": "Sakarya" },
+                  { "Samsun": "Samsun" },
+                  { "Siirt": "Siirt" },
+                  { "Sinop": "Sinop" },
+                  { "Sivas": "Sivas" },
+                  { "\u015eanl\u0131urfa": "\u015eanl\u0131urfa" },
+                  { "\u015e\u0131rnak": "\u015e\u0131rnak" },
+                  { "Tekirda\u011f": "Tekirda\u011f" },
+                  { "Tokat": "Tokat" },
+                  { "Trabzon": "Trabzon" },
+                  { "Tunceli": "Tunceli" },
+                  { "U\u015fak": "U\u015fak" },
+                  { "Van": "Van" },
+                  { "Yalova": "Yalova" },
+                  { "Yozgat": "Yozgat" },
+                  { "Zonguldak": "Zonguldak" }
+                ]
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Turkmenistan",
+      "iso": "TM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Turks and Caicos Islands",
+      "iso": "TC",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Tuvalu",
+      "iso": "TV",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "Island",
+                "options": [
+                  { "": "--" },
+                  { "Funafuti": "Funafuti" },
+                  { "Funafuti Centre": "Funafuti Centre" },
+                  { "Nanumaga": "Nanumaga" },
+                  { "Nanumea": "Nanumea" },
+                  { "Niulakita": "Niulakita" },
+                  { "Niutao": "Niutao" },
+                  { "Nui": "Nui" },
+                  { "Nukulaelae": "Nukulaelae" },
+                  { "Vaitupu": "Vaitupu" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "U.S. Virgin Islands",
+      "iso": "VI",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "Uganda",
+      "iso": "UG",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Ukraine",
+      "iso": "UA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "Region" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "United Arab Emirates",
+      "iso": "AE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "administrativearea": {
+                "label": "Emirate",
+                "options": [
+                  { "": "--" },
+                  { "AZ": "Abu Dhabi" },
+                  { "FU": "Fujairah" },
+                  { "UQ": "Umm al-Quwain" },
+                  { "SH": "Sharjah" },
+                  { "DU": "Dubai" },
+                  { "RK": "Ras al-Khaimah" },
+                  { "AJ": "Ajm\u0101n" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "United Kingdom",
+      "iso": "GB",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "Town/city" } },
+            { "administrativearea": { "label": "County" } },
+            {
+              "postalcode": {
+                "label": "Postcode",
+                "format": "^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}$",
+                "eg": "SE1 0SU"
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "United States",
+      "iso": "US",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "AL": "Alabama" },
+                  { "AK": "Alaska" },
+                  { "AZ": "Arizona" },
+                  { "AR": "Arkansas" },
+                  { "CA": "California" },
+                  { "CO": "Colorado" },
+                  { "CT": "Connecticut" },
+                  { "DE": "Delaware" },
+                  { "DC": "District Of Columbia" },
+                  { "FL": "Florida" },
+                  { "GA": "Georgia" },
+                  { "HI": "Hawaii" },
+                  { "ID": "Idaho" },
+                  { "IL": "Illinois" },
+                  { "IN": "Indiana" },
+                  { "IA": "Iowa" },
+                  { "KS": "Kansas" },
+                  { "KY": "Kentucky" },
+                  { "LA": "Louisiana" },
+                  { "ME": "Maine" },
+                  { "MD": "Maryland" },
+                  { "MA": "Massachusetts" },
+                  { "MI": "Michigan" },
+                  { "MN": "Minnesota" },
+                  { "MS": "Mississippi" },
+                  { "MO": "Missouri" },
+                  { "MT": "Montana" },
+                  { "NE": "Nebraska" },
+                  { "NV": "Nevada" },
+                  { "NH": "New Hampshire" },
+                  { "NJ": "New Jersey" },
+                  { "NM": "New Mexico" },
+                  { "NY": "New York" },
+                  { "NC": "North Carolina" },
+                  { "ND": "North Dakota" },
+                  { "OH": "Ohio" },
+                  { "OK": "Oklahoma" },
+                  { "OR": "Oregon" },
+                  { "PA": "Pennsylvania" },
+                  { "RI": "Rhode Island" },
+                  { "SC": "South Carolina" },
+                  { "SD": "South Dakota" },
+                  { "TN": "Tennessee" },
+                  { "TX": "Texas" },
+                  { "UT": "Utah" },
+                  { "VT": "Vermont" },
+                  { "VA": "Virginia" },
+                  { "WA": "Washington" },
+                  { "WV": "West Virginia" },
+                  { "WI": "Wisconsin" },
+                  { "WY": "Wyoming" },
+                  { "": "--" },
+                  { "AA": "Armed Forces (Americas)" },
+                  {
+                    "AE": "Armed Forces (Europe, Canada, Middle East, Africa)"
+                  },
+                  { "AP": "Armed Forces (Pacific)" },
+                  { "AS": "American Samoa" },
+                  { "FM": "Federated States of Micronesia" },
+                  { "GU": "Guam" },
+                  { "MH": "Marshall Islands" },
+                  { "MP": "Northern Mariana Islands" },
+                  { "PW": "Palau" },
+                  { "PR": "Puerto Rico" },
+                  { "VI": "Virgin Islands" }
+                ]
+              }
+            },
+            {
+              "postalcode": {
+                "label": "ZIP code",
+                "format": "^\\d{5}(?:[-\\s]\\d{4})?$",
+                "eg": "98103"
+              }
+            }
+          ]
+        }
+      ],
+      "required": [
+        "localityname",
+        "administrativearea",
+        "postalcode",
+        "thoroughfare"
+      ]
+    },
+    {
+      "label": "United States Minor Outlying Islands",
+      "iso": "UM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "ZIP code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Uruguay",
+      "iso": "UY",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Uzbekistan",
+      "iso": "UZ",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Vanuatu",
+      "iso": "VU",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Vatican",
+      "iso": "VA",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Venezuela",
+      "iso": "VE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } },
+            {
+              "administrativearea": {
+                "label": "State",
+                "options": [
+                  { "": "--" },
+                  { "Z": "Amazonas" },
+                  { "B": "Anzo\u00e1tegui" },
+                  { "C": "Apure" },
+                  { "D": "Aragua" },
+                  { "E": "Barinas" },
+                  { "F": "Bol\u00edvar" },
+                  { "G": "Carabobo" },
+                  { "H": "Cojedes" },
+                  { "Y": "Delta Amacuro" },
+                  { "W": "Dependencias Federales" },
+                  { "A": "Distrito Federal" },
+                  { "I": "Falc\u00f3n" },
+                  { "J": "Gu\u00e1rico" },
+                  { "K": "Lara" },
+                  { "L": "M\u00e9rida" },
+                  { "M": "Miranda" },
+                  { "N": "Monagas" },
+                  { "O": "Nueva Esparta" },
+                  { "P": "Portuguesa" },
+                  { "R": "Sucre" },
+                  { "S": "T\u00e1chira" },
+                  { "T": "Trujillo" },
+                  { "X": "Vargas" },
+                  { "U": "Yaracuy" },
+                  { "V": "Zulia" }
+                ]
+              }
+            }
+          ]
+        }
+      ],
+      "required": ["localityname", "administrativearea", "thoroughfare"]
+    },
+    {
+      "label": "Vietnam",
+      "iso": "VN",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "localityname": { "label": "City" } },
+            { "administrativearea": { "label": "State" } },
+            { "postalcode": { "label": "Postal code" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Wallis and Futuna",
+      "iso": "WF",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            {
+              "postalcode": {
+                "label": "Postal code",
+                "format": "^986\\d{2}$",
+                "eg": "98600"
+              }
+            },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "postalcode", "thoroughfare"]
+    },
+    {
+      "label": "Western Sahara",
+      "iso": "EH",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Yemen",
+      "iso": "YE",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Zambia",
+      "iso": "ZM",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        {
+          "locality": [
+            { "postalcode": { "label": "Postal code" } },
+            { "localityname": { "label": "City" } }
+          ]
+        }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    },
+    {
+      "label": "Zimbabwe",
+      "iso": "ZW",
+      "fields": [
+        { "thoroughfare": { "label": "Address 1" } },
+        { "premise": { "label": "Address 2" } },
+        { "locality": [{ "localityname": { "label": "City" } }] }
+      ],
+      "required": ["localityname", "thoroughfare"]
+    }
+  ]
+}
diff --git a/addressfield/templates/addressfield/widgets/nested_with_label.html b/addressfield/templates/addressfield/widgets/nested_with_label.html
index afb74baf2e6a247ab3fc5ed3f75e80e000ffa6ad..dd58bc2805cd6e81fb857525ccff98e4b6b5082a 100644
--- a/addressfield/templates/addressfield/widgets/nested_with_label.html
+++ b/addressfield/templates/addressfield/widgets/nested_with_label.html
@@ -1,14 +1,14 @@
 <div {% include "django/forms/widgets/attrs.html" %}>{% spaceless %}
     {% for widget in widget.subwidgets %}
         {% if not widget.subwidgets %}
-        <div class="form__group">
-            <label class="form__question" for="{{ widget.attrs.id }}">{{ widget.attrs.display }}</label>
+            <div class="form__group">
+                <label class="form__question" for="{{ widget.attrs.id }}">{{ widget.attrs.display }}</label>
         {% endif %}
 
         {% include widget.template_name %}
 
         {% if not widget.subwidgets %}
-        </div>
+            </div>
         {% endif %}
     {% endfor %}
 {% endspaceless %}</div>
diff --git a/addressfield/tests.py b/addressfield/tests.py
index 6ccdd64174249e7b6e6f23cdba88831475d87b5a..4558073a11a7daafff55e4276c473610fa02795c 100644
--- a/addressfield/tests.py
+++ b/addressfield/tests.py
@@ -11,34 +11,38 @@ class TestRequiredFields(TestCase):
         if required is None:
             required = []
 
-        return {'COUNTRY': {
-            'fields': [{field: {'label': field}} for field in set(fields + required)],
-            'required': required,
-        }}
+        return {
+            "COUNTRY": {
+                "fields": [
+                    {field: {"label": field}} for field in set(fields + required)
+                ],
+                "required": required,
+            }
+        }
 
     def test_non_required(self):
         field = AddressField()
-        field.data = self.build_validation_data(fields=['postalcode'])
-        field.clean({'country': 'COUNTRY'})
+        field.data = self.build_validation_data(fields=["postalcode"])
+        field.clean({"country": "COUNTRY"})
 
     def test_non_required_blank_data(self):
         field = AddressField()
-        field.data = self.build_validation_data(fields=['postalcode'])
-        field.clean({'country': 'COUNTRY', 'postalcode': ''})
+        field.data = self.build_validation_data(fields=["postalcode"])
+        field.clean({"country": "COUNTRY", "postalcode": ""})
 
     def test_one_field_required(self):
         field = AddressField()
-        field.data = self.build_validation_data(required=['postalcode'])
+        field.data = self.build_validation_data(required=["postalcode"])
         with self.assertRaises(ValidationError):
-            field.clean({'country': 'COUNTRY'})
+            field.clean({"country": "COUNTRY"})
 
     def test_one_field_required_blank_data(self):
         field = AddressField()
-        field.data = self.build_validation_data(required=['postalcode'])
+        field.data = self.build_validation_data(required=["postalcode"])
         with self.assertRaises(ValidationError):
-            field.clean({'country': 'COUNTRY', 'postalcode': ''})
+            field.clean({"country": "COUNTRY", "postalcode": ""})
 
     def test_one_field_required_supplied_data(self):
         field = AddressField()
-        field.data = self.build_validation_data(required=['postalcode'])
-        field.clean({'country': 'COUNTRY', 'postalcode': 'BS1 2AB'})
+        field.data = self.build_validation_data(required=["postalcode"])
+        field.clean({"country": "COUNTRY", "postalcode": "BS1 2AB"})
diff --git a/addressfield/widgets.py b/addressfield/widgets.py
index f515407646fcf7b0c906c3292de8086f83455ab7..6794a67b4226608cbac467695f5c6bce56c22716 100644
--- a/addressfield/widgets.py
+++ b/addressfield/widgets.py
@@ -12,7 +12,7 @@ class CountrySelectWithChoices(KeepOwnAttrsWidget, forms.Select):
     is_required = True
 
     def __init__(self, *args, **kwargs):
-        kwargs['choices'] = countries
+        kwargs["choices"] = countries
         super().__init__(*args, **kwargs)
 
 
@@ -21,19 +21,25 @@ class KeepAttrsTextInput(KeepOwnAttrsWidget, forms.TextInput):
 
 
 def classify(field):
-    return field.replace('_', '')
+    return field.replace("_", "")
 
 
 def display(field):
-    return field.replace('_', ' ').title()
+    return field.replace("_", " ").title()
 
 
 class NestedMultiWidget(KeepOwnAttrsWidget, forms.MultiWidget):
-    template_name = 'addressfield/widgets/nested_with_label.html'
+    template_name = "addressfield/widgets/nested_with_label.html"
 
     def __init__(self, *args, **kwargs):
         widgets = [
-            widget(attrs={'class': classify(field), 'required': False, 'display': display(field)})
+            widget(
+                attrs={
+                    "class": classify(field),
+                    "required": False,
+                    "display": display(field),
+                }
+            )
             for field, widget in self.components.items()
         ]
         super().__init__(widgets, *args, **kwargs)
@@ -46,7 +52,7 @@ class NestedMultiWidget(KeepOwnAttrsWidget, forms.MultiWidget):
         if value:
             decompressed = []
             for i, widget in enumerate(self.widgets):
-                if hasattr(widget, 'components'):
+                if hasattr(widget, "components"):
                     decompressed.append(widget.decompress(value))
                 else:
                     decompressed.append(value.get(self.field_names[i]))
@@ -56,9 +62,9 @@ class NestedMultiWidget(KeepOwnAttrsWidget, forms.MultiWidget):
     def value_from_datadict(self, data, files, name):
         value = {}
         for i, widget in enumerate(self.widgets):
-            widget_value = widget.value_from_datadict(data, files, name + '_%s' % i)
+            widget_value = widget.value_from_datadict(data, files, name + "_%s" % i)
             # flatten the data structure to a single dict
-            if hasattr(widget, 'widgets'):
+            if hasattr(widget, "widgets"):
                 value.update(widget_value)
             else:
                 value[self.field_names[i]] = widget_value
@@ -67,28 +73,28 @@ class NestedMultiWidget(KeepOwnAttrsWidget, forms.MultiWidget):
 
 class LocalityWidget(NestedMultiWidget):
     components = {
-        'locality_name': KeepAttrsTextInput,
-        'administrative_area': KeepAttrsTextInput,
-        'postal_code': KeepAttrsTextInput,
+        "locality_name": KeepAttrsTextInput,
+        "administrative_area": KeepAttrsTextInput,
+        "postal_code": KeepAttrsTextInput,
     }
 
 
 class AddressWidget(NestedMultiWidget):
     components = {
-        'country': CountrySelectWithChoices,
-        'thoroughfare': KeepAttrsTextInput,
-        'premise': KeepAttrsTextInput,
-        'locality': LocalityWidget,
+        "country": CountrySelectWithChoices,
+        "thoroughfare": KeepAttrsTextInput,
+        "premise": KeepAttrsTextInput,
+        "locality": LocalityWidget,
     }
 
     class Media:
         js = (
-            'jquery.addressfield.min.js',
-            'address_form.js',
+            "jquery.addressfield.min.js",
+            "address_form.js",
         )
 
     def __init__(self, *args, **kwargs):
-        attrs = kwargs.get('attrs', {})
-        attrs['class'] = 'address'
-        kwargs['attrs'] = attrs
+        attrs = kwargs.get("attrs", {})
+        attrs["class"] = "address"
+        kwargs["attrs"] = attrs
         super().__init__(*args, **kwargs)
diff --git a/app.json b/app.json
index ce7bd1c619e3b6e5871e7203e598757cf34ab853..b9cd06261976647bf1af97e9dae86af68c404e48 100644
--- a/app.json
+++ b/app.json
@@ -1,7 +1,6 @@
 {
   "name": "opentech.fund",
-  "scripts": {
-  },
+  "scripts": {},
   "env": {
     "BASIC_AUTH_ENABLED": {
       "required": true
@@ -39,9 +38,7 @@
       "quantity": 1
     }
   },
-  "addons": [
-    "heroku-postgresql"
-  ],
+  "addons": ["heroku-postgresql"],
   "buildpacks": [
     {
       "url": "heroku/nodejs"
diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml
index d36e65f4f667101fe63c5ffe23597a2a6fd23894..9fb2280f8d3994e3296773fc1a84a823b657589a 100644
--- a/docker/docker-compose.yaml
+++ b/docker/docker-compose.yaml
@@ -1,4 +1,4 @@
-version: '3.7'
+version: "3.7"
 
 services:
   web:
diff --git a/docs/assets/extra.css b/docs/assets/extra.css
index 4fa7c3c7a65cd21d3d9d196838ab4762fd6e4d7e..7a6cfc2fc515534f8dc5564d9095fc65867ba6c0 100644
--- a/docs/assets/extra.css
+++ b/docs/assets/extra.css
@@ -1,3 +1,3 @@
-[dir=ltr] .md-header__title {
+[dir="ltr"] .md-header__title {
     margin-left: 0.2rem;
 }
diff --git a/docs/getting-started/development/manual.md b/docs/getting-started/development/manual.md
index 975b7994a023bed0c6cb3f4c327c17e892694059..b5a164fc086fc668ec0ba6d0d233cea3868ec3da 100644
--- a/docs/getting-started/development/manual.md
+++ b/docs/getting-started/development/manual.md
@@ -92,7 +92,7 @@ Hypha supports configuration via either a `local.py` or a `.env` file:
     ALLOWED_HOSTS=apply.hypha.test,hypha.test
     BASE_URL=http://hypha.test
     SECRET_KEY=<put-in-long-random-string>
-    DATABASE_URL=postgres://localhost/hypha-db
+    DATABASE_URL=postgres://localhost/hypha
     ```
 
 === "Using `local.py`"
@@ -128,10 +128,10 @@ Hypha supports configuration via either a `local.py` or a `.env` file:
 Create an empty database:
 
 ```console
-$ createdb hypha-db
+$ createdb hypha
 ```
 
-Ensure database name `hypha-db` is added to your `hypha/settings/local.py` or `.env`.
+Ensure database name `hypha` is added to your `hypha/settings/local.py` or `.env`.
 
 Let's create all the tables and schemas required by the project.
 
@@ -142,7 +142,7 @@ There are two ways to about it, you can either load demo data from  `/public/san
 
     ```console
     $ pg_restore --verbose --clean  --if-exists --no-acl --no-owner \
-                 --dbname=hypha-db public/sandbox_db.dump
+                 --dbname=hypha public/sandbox_db.dump
     ```
 
     It's not always completely up to date so run:
@@ -167,12 +167,12 @@ There are two ways to about it, you can either load demo data from  `/public/san
 !!! tip "Tips"
 
     - If `createdb`and `dropdb` are not available you will need to add the Postgres bin directory to your `path` or call the commands with complete path.
-    - If you need to delete/drop the database, you can use `$ dropdb hypha-db`
+    - If you need to delete/drop the database, you can use `$ dropdb hypha`
     - On Linux you might need to run as the "postgres" user first when setting up Postgres. Use it to create the database and set up a database user.For local development I suggest creating a user with the same name as your account, then you will not need to specify it on every command.
 
         ```console
         $ su - postgres
-        $ createdb hypha-db
+        $ createdb hypha
         $ createuser [your-account-name]
         ```
 
@@ -183,7 +183,7 @@ You will need two domain to run this app, used to serve the public and apply sit
 First, add these sites to the database:
 
 ```console
-$ python manage.py wagtailupdatesite hypha.test apply.hypha.test 9001
+$ python manage.py wagtailsiteupdate hypha.test apply.hypha.test 9001
 ```
 
 Then, add this to your `/etc/hosts` file.
@@ -242,6 +242,17 @@ Open http://localhost:9100/ to preview the documentation site.
 !!! tip
     You can use `$ make serve` command to run Django Development Server, watch and compile frontend changes and preview docs all at once.
 
+
+## Coding Style
+
+Hypha's coding style is enforced by black, ruff and prettier and comes pre-configured with prettier. 
+
+Install pre-commit to auto-format the code before each commit:
+
+```
+pre-commit install
+```
+
 ## Running tests
 
 Hypha uses `ruff` and [py.test](https://pytest-django.readthedocs.io/en/latest/) test runner and uses `hypha/settings/testing.py` for test settings.
diff --git a/docs/setup/administrators/configuration.md b/docs/setup/administrators/configuration.md
index e52c0b2f000b95fd0438b71b5c34bffeb68880a6..2df23f261647db26a8065e55ea38c0f8246069a2 100644
--- a/docs/setup/administrators/configuration.md
+++ b/docs/setup/administrators/configuration.md
@@ -53,6 +53,13 @@ The corrosponding locale dir is named: en, en_GB, en_US
 
     PASSWORD_PAGE_TIMEOUT = env.int('PASSWORD_PAGE_TIMEOUT', 120)
 
+### The age of session cookies, in seconds.
+
+This determines the length of time for which the user will remain logged in. The default value is 2 weeks.
+
+    SESSION_COOKIE_AGE = env.int('SESSION_COOKIE_AGE', 60 * 60 * 24 * 7 * 2)
+
+
 
 ## Hypha custom settings
 
@@ -135,9 +142,21 @@ Good for testing, might not be a good idea in production.
 
     SUBMISSIONS_DRAFT_ACCESS_STAFF = env.bool('SUBMISSIONS_DRAFT_ACCESS_STAFF', False)
 
+### Should staff admins be able to access/see draft submissions.
+
+    SUBMISSIONS_DRAFT_ACCESS_STAFF_ADMIN = env.bool('SUBMISSIONS_DRAFT_ACCESS_STAFF_ADMIN', False)
+
+### Should staff be able to export submissions.
+
+    SUBMISSIONS_EXPORT_ACCESS_STAFF = env.bool('SUBMISSIONS_EXPORT_ACCESS_STAFF', True)
+
+### Should staff admins be able to export submissions.
+
+    SUBMISSIONS_EXPORT_ACCESS_STAFF_ADMIN = env.bool('SUBMISSIONS_EXPORT_ACCESS_STAFF_ADMIN', True)
+
 ### Columns to exclude from the submission tables.
 
-Possible values are: fund, round, status, lead, reviewers, screening_statuses, category_options, meta_terms
+Possible values are: fund, round, status, lead, reviewers, screening_statuses, category_options, meta_terms, organization_name
 
     SUBMISSIONS_TABLE_EXCLUDED_FIELDS = env.list('SUBMISSIONS_TABLE_EXCLUDED_FIELDS', [])
 
diff --git a/hypha/apply/activity/adapters/activity_feed.py b/hypha/apply/activity/adapters/activity_feed.py
index 4bef6c55871be3c8697b46ec2857726d4294c181..6613dcf8a8631105c6641ca4adde8ccf541d6cb2 100644
--- a/hypha/apply/activity/adapters/activity_feed.py
+++ b/hypha/apply/activity/adapters/activity_feed.py
@@ -6,51 +6,68 @@ from django.utils.translation import gettext as _
 
 from hypha.apply.activity.models import ALL, TEAM
 from hypha.apply.activity.options import MESSAGES
+from hypha.apply.projects.utils import (
+    get_invoice_public_status,
+    get_project_public_status,
+    get_project_status_display_value,
+)
 
 from .base import AdapterBase
-from .utils import is_transition, reviewers_message
+from .utils import is_invoice_public_transition, is_transition, reviewers_message
 
 
 class ActivityAdapter(AdapterBase):
     adapter_type = "Activity Feed"
     always_send = True
     messages = {
-        MESSAGES.TRANSITION: 'handle_transition',
-        MESSAGES.BATCH_TRANSITION: 'handle_batch_transition',
-        MESSAGES.NEW_SUBMISSION: _('Submitted {source.title} for {source.page.title}'),
-        MESSAGES.EDIT_SUBMISSION: _('Edited'),
-        MESSAGES.APPLICANT_EDIT: _('Edited'),
-        MESSAGES.UPDATE_LEAD: _('Lead changed from {old_lead} to {source.lead}'),
-        MESSAGES.BATCH_UPDATE_LEAD: _('Batch Lead changed to {new_lead}'),
-        MESSAGES.DETERMINATION_OUTCOME: _('Sent a determination. Outcome: {determination.clean_outcome}'),
-        MESSAGES.BATCH_DETERMINATION_OUTCOME: 'batch_determination',
-        MESSAGES.INVITED_TO_PROPOSAL: _('Invited to submit a proposal'),
-        MESSAGES.REVIEWERS_UPDATED: 'reviewers_updated',
-        MESSAGES.BATCH_REVIEWERS_UPDATED: 'batch_reviewers_updated',
-        MESSAGES.PARTNERS_UPDATED: 'partners_updated',
-        MESSAGES.NEW_REVIEW: _('Submitted a review'),
-        MESSAGES.OPENED_SEALED: _('Opened the submission while still sealed'),
-        MESSAGES.SCREENING: 'handle_screening_statuses',
-        MESSAGES.REVIEW_OPINION: _('{user} {opinion.opinion_display}s with {opinion.review.author}s review of {source}'),
-        MESSAGES.CREATED_PROJECT: _('Created'),
-        MESSAGES.PROJECT_TRANSITION: _('Progressed from {old_stage} to {source.status_display}'),
-        MESSAGES.UPDATE_PROJECT_LEAD: _('Lead changed from {old_lead} to {source.lead}'),
-        MESSAGES.SEND_FOR_APPROVAL: _('Requested approval'),
-        MESSAGES.APPROVE_PROJECT: _('Approved'),
-        MESSAGES.REQUEST_PROJECT_CHANGE: _('Requested changes for acceptance: "{comment}"'),
-        MESSAGES.SUBMIT_CONTRACT_DOCUMENTS: _('Submitted Contract Documents'),
-        MESSAGES.UPLOAD_CONTRACT: _('Uploaded a {contract.state} contract'),
-        MESSAGES.APPROVE_CONTRACT: _('Approved contract'),
-        MESSAGES.UPDATE_INVOICE_STATUS: 'handle_update_invoice_status',
-        MESSAGES.CREATE_INVOICE: _('Invoice created'),
-        MESSAGES.SUBMIT_REPORT: _('Submitted a report'),
-        MESSAGES.SKIPPED_REPORT: 'handle_skipped_report',
-        MESSAGES.REPORT_FREQUENCY_CHANGED: 'handle_report_frequency',
-        MESSAGES.DISABLED_REPORTING: _('Reporting disabled'),
-        MESSAGES.BATCH_DELETE_SUBMISSION: 'handle_batch_delete_submission',
-        MESSAGES.BATCH_ARCHIVE_SUBMISSION: 'handle_batch_archive_submission',
-        MESSAGES.ARCHIVE_SUBMISSION: _('{user} has archived the submission: {source.title}'),
-        MESSAGES.UNARCHIVE_SUBMISSION: _('{user} has unarchived the submission: {source.title}'),
+        MESSAGES.TRANSITION: "handle_transition",
+        MESSAGES.BATCH_TRANSITION: "handle_batch_transition",
+        MESSAGES.NEW_SUBMISSION: _("Submitted {source.title} for {source.page.title}"),
+        MESSAGES.EDIT_SUBMISSION: _("Edited"),
+        MESSAGES.APPLICANT_EDIT: _("Edited"),
+        MESSAGES.UPDATE_LEAD: _("Lead changed from {old_lead} to {source.lead}"),
+        MESSAGES.BATCH_UPDATE_LEAD: _("Batch Lead changed to {new_lead}"),
+        MESSAGES.DETERMINATION_OUTCOME: _(
+            "Sent a determination. Outcome: {determination.clean_outcome}"
+        ),
+        MESSAGES.BATCH_DETERMINATION_OUTCOME: "batch_determination",
+        MESSAGES.INVITED_TO_PROPOSAL: _("Invited to submit a proposal"),
+        MESSAGES.REVIEWERS_UPDATED: "reviewers_updated",
+        MESSAGES.BATCH_REVIEWERS_UPDATED: "batch_reviewers_updated",
+        MESSAGES.PARTNERS_UPDATED: "partners_updated",
+        MESSAGES.NEW_REVIEW: _("Submitted a review"),
+        MESSAGES.OPENED_SEALED: _("Opened the submission while still sealed"),
+        MESSAGES.SCREENING: "handle_screening_statuses",
+        MESSAGES.REVIEW_OPINION: _(
+            "{user} {opinion.opinion_display}s with {opinion.review.author}s review of {source}"
+        ),
+        MESSAGES.CREATED_PROJECT: _("Created"),
+        MESSAGES.PROJECT_TRANSITION: "handle_project_transition",
+        MESSAGES.UPDATE_PROJECT_LEAD: _(
+            "Lead changed from {old_lead} to {source.lead}"
+        ),
+        MESSAGES.SEND_FOR_APPROVAL: _("Requested approval"),
+        MESSAGES.APPROVE_PROJECT: _("Approved"),
+        MESSAGES.REQUEST_PROJECT_CHANGE: _(
+            'Requested changes for acceptance: "{comment}"'
+        ),
+        MESSAGES.SUBMIT_CONTRACT_DOCUMENTS: _("Submitted Contract Documents"),
+        MESSAGES.UPLOAD_CONTRACT: _("Uploaded a {contract.state} contract"),
+        MESSAGES.APPROVE_CONTRACT: _("Approved contract"),
+        MESSAGES.UPDATE_INVOICE_STATUS: "handle_update_invoice_status",
+        MESSAGES.CREATE_INVOICE: _("Invoice added"),
+        MESSAGES.SUBMIT_REPORT: _("Submitted a report"),
+        MESSAGES.SKIPPED_REPORT: "handle_skipped_report",
+        MESSAGES.REPORT_FREQUENCY_CHANGED: "handle_report_frequency",
+        MESSAGES.DISABLED_REPORTING: _("Reporting disabled"),
+        MESSAGES.BATCH_DELETE_SUBMISSION: "handle_batch_delete_submission",
+        MESSAGES.BATCH_ARCHIVE_SUBMISSION: "handle_batch_archive_submission",
+        MESSAGES.ARCHIVE_SUBMISSION: _(
+            "{user} has archived the submission: {source.title}"
+        ),
+        MESSAGES.UNARCHIVE_SUBMISSION: _(
+            "{user} has unarchived the submission: {source.title}"
+        ),
     }
 
     def recipients(self, message_type, **kwargs):
@@ -69,38 +86,43 @@ class ActivityAdapter(AdapterBase):
             MESSAGES.SEND_FOR_APPROVAL,
             MESSAGES.NEW_REVIEW,
         ]:
-            return {'visibility': TEAM}
+            return {"visibility": TEAM}
 
         source = source or sources[0]
         if is_transition(message_type) and not source.phase.permissions.can_view(
             source.user
         ):
             # User's shouldn't see status activity changes for stages that aren't visible to the them
-            return {'visibility': TEAM}
+            return {"visibility": TEAM}
+
+        if message_type == MESSAGES.UPDATE_INVOICE_STATUS:
+            invoice = kwargs.get("invoice", None)
+            if invoice and not is_invoice_public_transition(invoice):
+                return {"visibility": TEAM}
         return {}
 
     def reviewers_updated(self, added=None, removed=None, **kwargs):
-        message = [_('Reviewers updated.')]
+        message = [_("Reviewers updated.")]
         if added:
-            message.append(_('Added:'))
+            message.append(_("Added:"))
             message.extend(reviewers_message(added))
 
         if removed:
-            message.append(_('Removed:'))
+            message.append(_("Removed:"))
             message.extend(reviewers_message(removed))
 
-        return ' '.join(message)
+        return " ".join(message)
 
     def batch_reviewers_updated(self, added, **kwargs):
-        base = [_('Batch Reviewers Updated.')]
+        base = [_("Batch Reviewers Updated.")]
         base.extend(
             [
-                _('{user} as {name}.').format(user=str(user), name=role.name)
+                _("{user} as {name}.").format(user=str(user), name=role.name)
                 for role, user in added
                 if user
             ]
         )
-        return ' '.join(base)
+        return " ".join(base)
 
     def batch_determination(self, sources, determinations, **kwargs):
         submission = sources[0]
@@ -111,21 +133,21 @@ class ActivityAdapter(AdapterBase):
 
     def handle_batch_delete_submission(self, sources, **kwargs):
         submissions = sources
-        submissions_text = ', '.join([submission.title for submission in submissions])
-        return _('Successfully deleted submissions: {title}').format(
+        submissions_text = ", ".join([submission.title for submission in submissions])
+        return _("Successfully deleted submissions: {title}").format(
             title=submissions_text
         )
 
     def handle_batch_archive_submission(self, sources, **kwargs):
         submissions = sources
-        submissions_text = ', '.join([submission.title for submission in submissions])
-        return _('Successfully archived submissions: {title}').format(
+        submissions_text = ", ".join([submission.title for submission in submissions])
+        return _("Successfully archived submissions: {title}").format(
             title=submissions_text
         )
 
     def handle_transition(self, old_phase, source, **kwargs):
         submission = source
-        base_message = _('Progressed from {old_display} to {new_display}')
+        base_message = _("Progressed from {old_display} to {new_display}")
 
         new_phase = submission.phase
 
@@ -155,9 +177,30 @@ class ActivityAdapter(AdapterBase):
 
         return staff_message
 
+    def handle_project_transition(self, old_stage, source, **kwargs):
+        project = source
+        base_message = _("Progressed from {old_display} to {new_display}")
+
+        staff_message = base_message.format(
+            old_display=get_project_status_display_value(old_stage),
+            new_display=project.status_display,
+        )
+
+        applicant_message = base_message.format(
+            old_display=get_project_public_status(project_status=old_stage),
+            new_display=get_project_public_status(project_status=project.status),
+        )
+
+        return json.dumps(
+            {
+                TEAM: staff_message,
+                ALL: applicant_message,
+            }
+        )
+
     def handle_batch_transition(self, transitions, sources, **kwargs):
         submissions = sources
-        kwargs.pop('source')
+        kwargs.pop("source")
         for submission in submissions:
             old_phase = transitions[submission.id]
             return self.handle_transition(
@@ -165,21 +208,21 @@ class ActivityAdapter(AdapterBase):
             )
 
     def partners_updated(self, added, removed, **kwargs):
-        message = [_('Partners updated.')]
+        message = [_("Partners updated.")]
         if added:
-            message.append(_('Added:'))
-            message.append(', '.join([str(user) for user in added]) + '.')
+            message.append(_("Added:"))
+            message.append(", ".join([str(user) for user in added]) + ".")
 
         if removed:
-            message.append(_('Removed:'))
-            message.append(', '.join([str(user) for user in removed]) + '.')
+            message.append(_("Removed:"))
+            message.append(", ".join([str(user) for user in removed]) + ".")
 
-        return ' '.join(message)
+        return " ".join(message)
 
     def handle_report_frequency(self, config, **kwargs):
         new_schedule = config.get_frequency_display()
         return _(
-            'Updated reporting frequency. New schedule is: {new_schedule} starting on {schedule_start}'
+            "Updated reporting frequency. New schedule is: {new_schedule} starting on {schedule_start}"
         ).format(new_schedule=new_schedule, schedule_start=config.schedule_start)
 
     def handle_skipped_report(self, report, **kwargs):
@@ -189,17 +232,22 @@ class ActivityAdapter(AdapterBase):
             return "Marked a Report as required"
 
     def handle_update_invoice_status(self, invoice, **kwargs):
-        invoice_status_change = _('Updated Invoice status to: {status}.').format(
-            status=invoice.status_display
-        )
-        return invoice_status_change
+        base_message = _("Updated Invoice status to: {invoice_status}.")
+        staff_message = base_message.format(invoice_status=invoice.get_status_display())
+
+        if is_invoice_public_transition(invoice):
+            public_status = get_invoice_public_status(invoice_status=invoice.status)
+            applicant_message = base_message.format(invoice_status=public_status)
+            return json.dumps({TEAM: staff_message, ALL: applicant_message})
+
+        return staff_message
 
     def send_message(self, message, user, source, sources, **kwargs):
         from ..models import Activity
 
-        visibility = kwargs.get('visibility', ALL)
+        visibility = kwargs.get("visibility", ALL)
 
-        related = kwargs['related']
+        related = kwargs["related"]
         if isinstance(related, dict):
             try:
                 related = related[source.id]
@@ -207,7 +255,7 @@ class ActivityAdapter(AdapterBase):
                 pass
 
         has_correct_fields = all(
-            hasattr(related, attr) for attr in ['get_absolute_url']
+            hasattr(related, attr) for attr in ["get_absolute_url"]
         )
         isnt_source = source != related
         is_model = isinstance(related, DjangoModel)
@@ -226,7 +274,7 @@ class ActivityAdapter(AdapterBase):
         )
 
     def handle_screening_statuses(self, source, old_status, **kwargs):
-        new_status = ', '.join([s.title for s in source.screening_statuses.all()])
-        return _('Screening decision from {old_status} to {new_status}').format(
+        new_status = ", ".join([s.title for s in source.screening_statuses.all()])
+        return _("Screening decision from {old_status} to {new_status}").format(
             old_status=old_status, new_status=new_status
         )
diff --git a/hypha/apply/activity/adapters/base.py b/hypha/apply/activity/adapters/base.py
index 253ee953d6f99e51cfa902846cd7ff82313b1a3a..f8263851b3b7cae339bb77ce99667e48159cee43 100644
--- a/hypha/apply/activity/adapters/base.py
+++ b/hypha/apply/activity/adapters/base.py
@@ -4,36 +4,36 @@ from django.contrib import messages
 from hypha.apply.activity.options import MESSAGES
 
 neat_related = {
-    MESSAGES.DETERMINATION_OUTCOME: 'determination',
-    MESSAGES.BATCH_DETERMINATION_OUTCOME: 'determinations',
-    MESSAGES.UPDATE_LEAD: 'old_lead',
-    MESSAGES.NEW_REVIEW: 'review',
-    MESSAGES.TRANSITION: 'old_phase',
-    MESSAGES.BATCH_TRANSITION: 'transitions',
-    MESSAGES.APPLICANT_EDIT: 'revision',
-    MESSAGES.EDIT_SUBMISSION: 'revision',
-    MESSAGES.COMMENT: 'comment',
-    MESSAGES.SCREENING: 'old_status',
-    MESSAGES.REVIEW_OPINION: 'opinion',
-    MESSAGES.DELETE_REVIEW: 'review',
-    MESSAGES.EDIT_REVIEW: 'review',
-    MESSAGES.CREATED_PROJECT: 'submission',
-    MESSAGES.PROJECT_TRANSITION: 'old_stage',
-    MESSAGES.UPDATE_PROJECT_LEAD: 'old_lead',
-    MESSAGES.APPROVE_CONTRACT: 'contract',
-    MESSAGES.UPLOAD_CONTRACT: 'contract',
-    MESSAGES.CREATE_INVOICE: 'create_invoice',
-    MESSAGES.UPDATE_INVOICE_STATUS: 'invoice',
-    MESSAGES.APPROVE_INVOICE: 'invoice',
-    MESSAGES.DELETE_INVOICE: 'invoice',
-    MESSAGES.UPDATE_INVOICE: 'invoice',
-    MESSAGES.SUBMIT_REPORT: 'report',
-    MESSAGES.SKIPPED_REPORT: 'report',
-    MESSAGES.REPORT_FREQUENCY_CHANGED: 'config',
-    MESSAGES.REPORT_NOTIFY: 'report',
-    MESSAGES.CREATE_REMINDER: 'reminder',
-    MESSAGES.DELETE_REMINDER: 'reminder',
-    MESSAGES.REVIEW_REMINDER: 'reminder',
+    MESSAGES.DETERMINATION_OUTCOME: "determination",
+    MESSAGES.BATCH_DETERMINATION_OUTCOME: "determinations",
+    MESSAGES.UPDATE_LEAD: "old_lead",
+    MESSAGES.NEW_REVIEW: "review",
+    MESSAGES.TRANSITION: "old_phase",
+    MESSAGES.BATCH_TRANSITION: "transitions",
+    MESSAGES.APPLICANT_EDIT: "revision",
+    MESSAGES.EDIT_SUBMISSION: "revision",
+    MESSAGES.COMMENT: "comment",
+    MESSAGES.SCREENING: "old_status",
+    MESSAGES.REVIEW_OPINION: "opinion",
+    MESSAGES.DELETE_REVIEW: "review",
+    MESSAGES.EDIT_REVIEW: "review",
+    MESSAGES.CREATED_PROJECT: "submission",
+    MESSAGES.PROJECT_TRANSITION: "old_stage",
+    MESSAGES.UPDATE_PROJECT_LEAD: "old_lead",
+    MESSAGES.APPROVE_CONTRACT: "contract",
+    MESSAGES.UPLOAD_CONTRACT: "contract",
+    MESSAGES.CREATE_INVOICE: "create_invoice",
+    MESSAGES.UPDATE_INVOICE_STATUS: "invoice",
+    MESSAGES.APPROVE_INVOICE: "invoice",
+    MESSAGES.DELETE_INVOICE: "invoice",
+    MESSAGES.UPDATE_INVOICE: "invoice",
+    MESSAGES.SUBMIT_REPORT: "report",
+    MESSAGES.SKIPPED_REPORT: "report",
+    MESSAGES.REPORT_FREQUENCY_CHANGED: "config",
+    MESSAGES.REPORT_NOTIFY: "report",
+    MESSAGES.CREATE_REMINDER: "reminder",
+    MESSAGES.DELETE_REMINDER: "reminder",
+    MESSAGES.REVIEW_REMINDER: "reminder",
 }
 
 
@@ -87,8 +87,8 @@ class AdapterBase:
         # receive a message under normal conditions
         return [
             {
-                'recipients': self.recipients(message_type, source=source, **kwargs),
-                'sources': [source],
+                "recipients": self.recipients(message_type, source=source, **kwargs),
+                "sources": [source],
             }
             for source in sources
         ]
@@ -100,8 +100,8 @@ class AdapterBase:
         for recipient in self.batch_recipients(
             message_type, sources, user=user, **kwargs
         ):
-            recipients = recipient['recipients']
-            sources = recipient['sources']
+            recipients = recipient["recipients"]
+            sources = recipient["sources"]
             events = [events_by_source[source.id] for source in sources]
             self.process_send(
                 message_type,
@@ -119,7 +119,12 @@ class AdapterBase:
         self, message_type, event, request, user, source, related=None, **kwargs
     ):
         recipients = self.recipients(
-            message_type, source=source, related=related, user=user, request=request, **kwargs
+            message_type,
+            source=source,
+            related=related,
+            user=user,
+            request=request,
+            **kwargs,
         )
         self.process_send(
             message_type,
@@ -153,11 +158,11 @@ class AdapterBase:
             pass
 
         kwargs = {
-            'request': request,
-            'user': user,
-            'source': source,
-            'sources': sources,
-            'related': related,
+            "request": request,
+            "user": user,
+            "source": source,
+            "sources": sources,
+            "related": related,
             **kwargs,
         }
         kwargs.update(self.get_neat_related(message_type, related))
@@ -175,17 +180,17 @@ class AdapterBase:
                     message, recipient=recipient, logs=message_logs, **kwargs
                 )
             else:
-                status = 'Message not sent as SEND_MESSAGES==FALSE'
+                status = "Message not sent as SEND_MESSAGES==FALSE"
 
             message_logs.update_status(status)
 
             if not settings.SEND_MESSAGES:
                 if recipient:
-                    debug_message = '{} [to: {}]: {}'.format(
+                    debug_message = "{} [to: {}]: {}".format(
                         self.adapter_type, recipient, message
                     )
                 else:
-                    debug_message = '{}: {}'.format(self.adapter_type, message)
+                    debug_message = "{}: {}".format(self.adapter_type, message)
                 messages.add_message(request, messages.DEBUG, debug_message)
 
     def create_logs(self, message, recipient, *events):
@@ -198,10 +203,10 @@ class AdapterBase:
 
     def log_kwargs(self, message, recipient, event):
         return {
-            'type': self.adapter_type,
-            'content': message,
-            'recipient': recipient or '',
-            'event': event,
+            "type": self.adapter_type,
+            "content": message,
+            "recipient": recipient or "",
+            "event": event,
         }
 
     def send_message(self, message, **kwargs):
diff --git a/hypha/apply/activity/adapters/django_messages.py b/hypha/apply/activity/adapters/django_messages.py
index 2499ed6d3d6552b52fdff4026fb5aa241b107662..45f5f89b944ed26ffaf6243e31c9b5c9c2970f9f 100644
--- a/hypha/apply/activity/adapters/django_messages.py
+++ b/hypha/apply/activity/adapters/django_messages.py
@@ -7,73 +7,84 @@ from .base import AdapterBase
 
 
 class DjangoMessagesAdapter(AdapterBase):
-    adapter_type = 'Django'
+    adapter_type = "Django"
     always_send = True
 
     messages = {
-        MESSAGES.BATCH_REVIEWERS_UPDATED: 'batch_reviewers_updated',
-        MESSAGES.BATCH_TRANSITION: 'batch_transition',
-        MESSAGES.BATCH_DETERMINATION_OUTCOME: 'batch_determinations',
-        MESSAGES.REMOVE_DOCUMENT: _('Successfully removed document'),
-        MESSAGES.SKIPPED_REPORT: 'handle_skipped_report',
-        MESSAGES.REPORT_FREQUENCY_CHANGED: 'handle_report_frequency',
-        MESSAGES.DISABLED_REPORTING: _('Reporting disabled'),
-        MESSAGES.CREATE_REMINDER: _('Reminder created'),
-        MESSAGES.DELETE_REMINDER: _('Reminder deleted'),
+        MESSAGES.BATCH_REVIEWERS_UPDATED: "batch_reviewers_updated",
+        MESSAGES.BATCH_TRANSITION: "batch_transition",
+        MESSAGES.BATCH_DETERMINATION_OUTCOME: "batch_determinations",
+        MESSAGES.REMOVE_DOCUMENT: _("Successfully removed document"),
+        MESSAGES.SKIPPED_REPORT: "handle_skipped_report",
+        MESSAGES.REPORT_FREQUENCY_CHANGED: "handle_report_frequency",
+        MESSAGES.DISABLED_REPORTING: _("Reporting disabled"),
+        MESSAGES.CREATE_REMINDER: _("Reminder created"),
+        MESSAGES.DELETE_REMINDER: _("Reminder deleted"),
     }
 
     def batch_reviewers_updated(self, added, sources, **kwargs):
-        reviewers_text = ' '.join([
-            _('{user} as {name},').format(user=str(user), name=role.name)
-            for role, user in added
-            if user
-        ])
-
-        return (
-            _('Batch reviewers added: {reviewers_text} to ').format(reviewers_text=reviewers_text) + ', '.join(['"{title}"'.format(title=source.title) for source in sources])
+        reviewers_text = " ".join(
+            [
+                _("{user} as {name},").format(user=str(user), name=role.name)
+                for role, user in added
+                if user
+            ]
         )
 
+        return _("Batch reviewers added: {reviewers_text} to ").format(
+            reviewers_text=reviewers_text
+        ) + ", ".join(['"{title}"'.format(title=source.title) for source in sources])
+
     def handle_report_frequency(self, config, **kwargs):
         new_schedule = config.get_frequency_display()
-        return _('Successfully updated reporting frequency. They will now report {new_schedule} starting on {schedule_start}').format(new_schedule=new_schedule, schedule_start=config.schedule_start)
+        return _(
+            "Successfully updated reporting frequency. They will now report {new_schedule} starting on {schedule_start}"
+        ).format(new_schedule=new_schedule, schedule_start=config.schedule_start)
 
     def handle_skipped_report(self, report, **kwargs):
         if report.skipped:
-            return _('Successfully skipped a Report for {start_date} to {end_date}').format(start_date=report.start_date, end_date=report.end_date)
+            return _(
+                "Successfully skipped a Report for {start_date} to {end_date}"
+            ).format(start_date=report.start_date, end_date=report.end_date)
         else:
-            return _('Successfully unskipped a Report for {start_date} to {end_date}').format(start_date=report.start_date, end_date=report.end_date)
+            return _(
+                "Successfully unskipped a Report for {start_date} to {end_date}"
+            ).format(start_date=report.start_date, end_date=report.end_date)
 
     def batch_transition(self, sources, transitions, **kwargs):
-        base_message = 'Successfully updated:'
-        transition = '{submission} [{old_display} → {new_display}].'
+        base_message = "Successfully updated:"
+        transition = "{submission} [{old_display} → {new_display}]."
         transition_messages = [
             transition.format(
                 submission=submission.title,
                 old_display=transitions[submission.id],
                 new_display=submission.phase,
-            ) for submission in sources
+            )
+            for submission in sources
         ]
         messages = [base_message, *transition_messages]
-        return ' '.join(messages)
+        return " ".join(messages)
 
     def batch_determinations(self, sources, determinations, **kwargs):
         submissions = sources
         outcome = determinations[submissions[0].id].clean_outcome
 
-        base_message = _('Successfully determined as {outcome}: ').format(outcome=outcome)
-        submissions_text = [
-            str(submission.title) for submission in submissions
-        ]
-        return base_message + ', '.join(submissions_text)
+        base_message = _("Successfully determined as {outcome}: ").format(
+            outcome=outcome
+        )
+        submissions_text = [str(submission.title) for submission in submissions]
+        return base_message + ", ".join(submissions_text)
 
     def recipients(self, *args, **kwargs):
         return [None]
 
     def batch_recipients(self, message_type, sources, *args, **kwargs):
-        return [{
-            'recipients': [None],
-            'sources': sources,
-        }]
+        return [
+            {
+                "recipients": [None],
+                "sources": sources,
+            }
+        ]
 
     def send_message(self, message, request, **kwargs):
         messages.add_message(request, messages.INFO, message)
diff --git a/hypha/apply/activity/adapters/emails.py b/hypha/apply/activity/adapters/emails.py
index 113d6435f7ebe3b51a50e05d4db2d58bf7da14b8..406d9366789b640aa0a2ff16a69b89807ac7d529 100644
--- a/hypha/apply/activity/adapters/emails.py
+++ b/hypha/apply/activity/adapters/emails.py
@@ -7,6 +7,7 @@ from django.template.loader import render_to_string
 from django.utils.translation import gettext as _
 
 from hypha.apply.projects.models.payment import CHANGES_REQUESTED_BY_STAFF, DECLINED
+from hypha.apply.projects.templatetags.project_tags import display_project_status
 from hypha.apply.users.groups import (
     APPROVER_GROUP_NAME,
     CONTRACTING_GROUP_NAME,
@@ -34,90 +35,117 @@ logger = logging.getLogger(__name__)
 
 
 class EmailAdapter(AdapterBase):
-    adapter_type = 'Email'
+    adapter_type = "Email"
     messages = {
-        MESSAGES.NEW_SUBMISSION: 'messages/email/submission_confirmation.html',
-        MESSAGES.DRAFT_SUBMISSION: 'messages/email/submission_confirmation.html',
-        MESSAGES.COMMENT: 'notify_comment',
-        MESSAGES.EDIT_SUBMISSION: 'messages/email/submission_edit.html',
-        MESSAGES.TRANSITION: 'handle_transition',
-        MESSAGES.BATCH_TRANSITION: 'handle_batch_transition',
-        MESSAGES.DETERMINATION_OUTCOME: 'handle_determination',
-        MESSAGES.BATCH_DETERMINATION_OUTCOME: 'handle_batch_determination',
-        MESSAGES.INVITED_TO_PROPOSAL: 'messages/email/invited_to_proposal.html',
-        MESSAGES.BATCH_READY_FOR_REVIEW: 'handle_batch_ready_for_review',
-        MESSAGES.READY_FOR_REVIEW: 'handle_ready_for_review',
-        MESSAGES.REVIEWERS_UPDATED: 'handle_ready_for_review',
-        MESSAGES.BATCH_REVIEWERS_UPDATED: 'handle_batch_ready_for_review',
-        MESSAGES.PARTNERS_UPDATED: 'partners_updated_applicant',
-        MESSAGES.PARTNERS_UPDATED_PARTNER: 'partners_updated_partner',
-        MESSAGES.UPLOAD_CONTRACT: 'messages/email/contract_uploaded.html',
-        MESSAGES.SUBMIT_CONTRACT_DOCUMENTS: 'messages/email/submit_contract_documents.html',
-        MESSAGES.CREATED_PROJECT: 'handle_project_created',
-        MESSAGES.UPDATED_VENDOR: 'handle_vendor_updated',
-        MESSAGES.SENT_TO_COMPLIANCE: 'messages/email/sent_to_compliance.html',
-        MESSAGES.SEND_FOR_APPROVAL: 'messages/email/paf_for_approval.html',
-        MESSAGES.REQUEST_PROJECT_CHANGE: 'messages/email/project_request_change.html',
-        MESSAGES.ASSIGN_PAF_APPROVER: 'messages/email/assign_paf_approvers.html',
-        MESSAGES.APPROVE_PAF: 'messages/email/paf_for_approval.html',
-        MESSAGES.UPDATE_INVOICE: 'handle_invoice_updated',
-        MESSAGES.UPDATE_INVOICE_STATUS: 'handle_invoice_status_updated',
-        MESSAGES.APPROVE_INVOICE: 'messages/email/invoice_approved.html',
-        MESSAGES.SUBMIT_REPORT: 'messages/email/report_submitted.html',
-        MESSAGES.SKIPPED_REPORT: 'messages/email/report_skipped.html',
-        MESSAGES.REPORT_FREQUENCY_CHANGED: 'messages/email/report_frequency.html',
-        MESSAGES.REPORT_NOTIFY: 'messages/email/report_notify.html',
-        MESSAGES.REVIEW_REMINDER: 'messages/email/ready_to_review.html',
-        MESSAGES.PROJECT_TRANSITION: 'handle_project_transition',
+        MESSAGES.NEW_SUBMISSION: "messages/email/submission_confirmation.html",
+        MESSAGES.DRAFT_SUBMISSION: "messages/email/submission_confirmation.html",
+        MESSAGES.COMMENT: "notify_comment",
+        MESSAGES.EDIT_SUBMISSION: "messages/email/submission_edit.html",
+        MESSAGES.TRANSITION: "handle_transition",
+        MESSAGES.BATCH_TRANSITION: "handle_batch_transition",
+        MESSAGES.DETERMINATION_OUTCOME: "handle_determination",
+        MESSAGES.BATCH_DETERMINATION_OUTCOME: "handle_batch_determination",
+        MESSAGES.INVITED_TO_PROPOSAL: "messages/email/invited_to_proposal.html",
+        MESSAGES.BATCH_READY_FOR_REVIEW: "handle_batch_ready_for_review",
+        MESSAGES.READY_FOR_REVIEW: "handle_ready_for_review",
+        MESSAGES.REVIEWERS_UPDATED: "handle_ready_for_review",
+        MESSAGES.BATCH_REVIEWERS_UPDATED: "handle_batch_ready_for_review",
+        MESSAGES.PARTNERS_UPDATED: "partners_updated_applicant",
+        MESSAGES.PARTNERS_UPDATED_PARTNER: "partners_updated_partner",
+        MESSAGES.UPLOAD_CONTRACT: "messages/email/contract_uploaded.html",
+        MESSAGES.SUBMIT_CONTRACT_DOCUMENTS: "messages/email/submit_contract_documents.html",
+        MESSAGES.CREATED_PROJECT: "handle_project_created",
+        MESSAGES.UPDATED_VENDOR: "handle_vendor_updated",
+        MESSAGES.SENT_TO_COMPLIANCE: "messages/email/sent_to_compliance.html",
+        MESSAGES.SEND_FOR_APPROVAL: "messages/email/paf_for_approval.html",
+        MESSAGES.REQUEST_PROJECT_CHANGE: "messages/email/project_request_change.html",
+        MESSAGES.ASSIGN_PAF_APPROVER: "messages/email/assign_paf_approvers.html",
+        MESSAGES.APPROVE_PAF: "messages/email/paf_for_approval.html",
+        MESSAGES.UPDATE_INVOICE: "handle_invoice_updated",
+        MESSAGES.UPDATE_INVOICE_STATUS: "handle_invoice_status_updated",
+        MESSAGES.APPROVE_INVOICE: "messages/email/invoice_approved.html",
+        MESSAGES.SUBMIT_REPORT: "messages/email/report_submitted.html",
+        MESSAGES.SKIPPED_REPORT: "messages/email/report_skipped.html",
+        MESSAGES.REPORT_FREQUENCY_CHANGED: "messages/email/report_frequency.html",
+        MESSAGES.REPORT_NOTIFY: "messages/email/report_notify.html",
+        MESSAGES.REVIEW_REMINDER: "messages/email/ready_to_review.html",
+        MESSAGES.PROJECT_TRANSITION: "handle_project_transition",
     }
 
     def get_subject(self, message_type, source):
-        if source and hasattr(source, 'title'):
+        if source and hasattr(source, "title"):
             if is_ready_for_review(message_type) or is_reviewer_update(message_type):
-                subject = _('Application ready to review: {source.title}').format(
+                subject = _("Application ready to review: {source.title}").format(
                     source=source
                 )
                 if message_type in {
                     MESSAGES.BATCH_READY_FOR_REVIEW,
                     MESSAGES.BATCH_REVIEWERS_UPDATED,
                 }:
-                    subject = _('Multiple applications are now ready for your review')
+                    subject = _("Multiple applications are now ready for your review")
             elif message_type in {MESSAGES.REVIEW_REMINDER}:
                 subject = _(
-                    'Reminder: Application ready to review: {source.title}'
+                    "Reminder: Application ready to review: {source.title}"
                 ).format(source=source)
-            elif message_type in [MESSAGES.SENT_TO_COMPLIANCE, MESSAGES.APPROVE_PAF, MESSAGES.SEND_FOR_APPROVAL]:
-                subject = _('Project is waiting for approval: {source.title}').format(source=source)
+            elif message_type in [
+                MESSAGES.SENT_TO_COMPLIANCE,
+                MESSAGES.APPROVE_PAF,
+                MESSAGES.SEND_FOR_APPROVAL,
+            ]:
+                subject = _("Project is waiting for approval: {source.title}").format(
+                    source=source
+                )
             elif message_type == MESSAGES.UPLOAD_CONTRACT:
-                subject = _('Contract uploaded for the project: {source.title}').format(source=source)
+                subject = _("Contract uploaded for the project: {source.title}").format(
+                    source=source
+                )
             elif message_type == MESSAGES.SUBMIT_CONTRACT_DOCUMENTS:
-                subject = _('Contract Documents required approval for the project: {source.title}').format(source=source)
+                subject = _(
+                    "Contract Documents required approval for the project: {source.title}"
+                ).format(source=source)
             elif message_type == MESSAGES.PROJECT_TRANSITION:
-                from hypha.apply.projects.models.project import CONTRACTING, IN_PROGRESS
+                from hypha.apply.projects.models.project import (
+                    CONTRACTING,
+                    INVOICING_AND_REPORTING,
+                )
+
                 if source.status == CONTRACTING:
-                    subject = _('Project is waiting for the contract: {source.title}').format(source=source)
-                elif source.status == IN_PROGRESS:
-                    subject = _('Project is ready for invoicing: {source.title}').format(source=source)
+                    subject = _(
+                        "Project is waiting for the contract: {source.title}"
+                    ).format(source=source)
+                elif source.status == INVOICING_AND_REPORTING:
+                    subject = _(
+                        "Project is ready for invoicing: {source.title}"
+                    ).format(source=source)
                 else:
-                    subject = _('Project status has changed to {source.status}: {source.title}').format(source=source)
+                    subject = _(
+                        "Project status has changed to {project_status}: {source.title}"
+                    ).format(
+                        project_status=display_project_status(source, source.user),
+                        source=source,
+                    )
             elif message_type == MESSAGES.REQUEST_PROJECT_CHANGE:
                 subject = _("Project has been rejected, please update and resubmit")
             elif message_type == MESSAGES.ASSIGN_PAF_APPROVER:
-                subject = _("Project documents are ready to be assigned for approval: {source.title}".format(source=source))
+                subject = _(
+                    "Project documents are ready to be assigned for approval: {source.title}".format(
+                        source=source
+                    )
+                )
             else:
                 try:
                     subject = source.page.specific.subject or _(
-                        'Your application to {org_long_name}: {source.title}'
+                        "Your application to {org_long_name}: {source.title}"
                     ).format(org_long_name=settings.ORG_LONG_NAME, source=source)
                 except AttributeError:
-                    subject = _('Your {org_long_name} Project: {source.title}').format(
+                    subject = _("Your {org_long_name} Project: {source.title}").format(
                         org_long_name=settings.ORG_LONG_NAME, source=source
                     )
             return subject
 
     def extra_kwargs(self, message_type, source, sources, **kwargs):
         return {
-            'subject': self.get_subject(message_type, source),
+            "subject": self.get_subject(message_type, source),
         }
 
     def handle_transition(self, old_phase, source, **kwargs):
@@ -131,7 +159,7 @@ class EmailAdapter(AdapterBase):
 
         if is_forward:
             return self.render_message(
-                'messages/email/transition.html',
+                "messages/email/transition.html",
                 source=submission,
                 old_phase=old_phase,
                 **kwargs,
@@ -139,7 +167,7 @@ class EmailAdapter(AdapterBase):
 
     def handle_batch_transition(self, transitions, sources, **kwargs):
         submissions = sources
-        kwargs.pop('source')
+        kwargs.pop("source")
         for submission in submissions:
             old_phase = transitions[submission.id]
             return self.handle_transition(
@@ -147,47 +175,51 @@ class EmailAdapter(AdapterBase):
             )
 
     def handle_project_transition(self, source, **kwargs):
-        from hypha.apply.projects.models.project import CONTRACTING, IN_PROGRESS
+        from hypha.apply.projects.models.project import (
+            CONTRACTING,
+            INVOICING_AND_REPORTING,
+        )
+
         if source.status == CONTRACTING:
             return self.render_message(
-                'messages/email/ready_for_contracting.html',
+                "messages/email/ready_for_contracting.html",
                 source=source,
                 **kwargs,
             )
 
-        if source.status == IN_PROGRESS:
+        if source.status == INVOICING_AND_REPORTING:
             return self.render_message(
-                'messages/email/ready_for_invoicing.html',
+                "messages/email/ready_for_invoicing.html",
                 source=source,
                 **kwargs,
             )
 
     def handle_invoice_status_updated(self, related, **kwargs):
         return self.render_message(
-            'messages/email/invoice_status_updated.html',
+            "messages/email/invoice_status_updated.html",
             has_changes_requested=related.has_changes_requested,
             **kwargs,
         )
 
     def handle_invoice_updated(self, **kwargs):
         return self.render_message(
-            'messages/email/invoice_updated.html',
+            "messages/email/invoice_updated.html",
             **kwargs,
         )
 
     def handle_project_created(self, source, **kwargs):
         from hypha.apply.projects.models import ProjectSettings
 
-        request = kwargs.get('request')
+        request = kwargs.get("request")
         project_settings = ProjectSettings.for_request(request)
         if project_settings.vendor_setup_required:
             return self.render_message(
-                'messages/email/vendor_setup_needed.html', source=source, **kwargs
+                "messages/email/vendor_setup_needed.html", source=source, **kwargs
             )
 
     def handle_vendor_updated(self, source, **kwargs):
         return self.render_message(
-            'messages/email/vendor_updated.html',
+            "messages/email/vendor_updated.html",
             source=source,
             **kwargs,
         )
@@ -196,7 +228,7 @@ class EmailAdapter(AdapterBase):
         submission = source
         if determination.send_notice:
             return self.render_message(
-                'messages/email/determination.html',
+                "messages/email/determination.html",
                 source=submission,
                 determination=determination,
                 **kwargs,
@@ -204,11 +236,11 @@ class EmailAdapter(AdapterBase):
 
     def handle_batch_determination(self, determinations, sources, **kwargs):
         submissions = sources
-        kwargs.pop('source')
+        kwargs.pop("source")
         for submission in submissions:
             determination = determinations[submission.id]
             return self.render_message(
-                'messages/email/determination.html',
+                "messages/email/determination.html",
                 source=submission,
                 determination=determination,
                 **kwargs,
@@ -217,7 +249,7 @@ class EmailAdapter(AdapterBase):
     def handle_ready_for_review(self, request, source, **kwargs):
         if settings.SEND_READY_FOR_REVIEW:
             return self.render_message(
-                'messages/email/ready_to_review.html',
+                "messages/email/ready_to_review.html",
                 source=source,
                 request=request,
                 **kwargs,
@@ -226,17 +258,17 @@ class EmailAdapter(AdapterBase):
     def handle_batch_ready_for_review(self, request, sources, **kwargs):
         if settings.SEND_READY_FOR_REVIEW:
             return self.render_message(
-                'messages/email/batch_ready_to_review.html',
+                "messages/email/batch_ready_to_review.html",
                 sources=sources,
                 request=request,
                 **kwargs,
             )
 
     def notify_comment(self, **kwargs):
-        comment = kwargs['comment']
-        source = kwargs['source']
+        comment = kwargs["comment"]
+        source = kwargs["source"]
         if not comment.priviledged and not comment.user == source.user:
-            return self.render_message('messages/email/comment.html', **kwargs)
+            return self.render_message("messages/email/comment.html", **kwargs)
 
     def recipients(self, message_type, source, user, **kwargs):
         if is_ready_for_review(message_type):
@@ -258,46 +290,79 @@ class EmailAdapter(AdapterBase):
                 return []
 
         if message_type == MESSAGES.PARTNERS_UPDATED_PARTNER:
-            partners = kwargs['added']
+            partners = kwargs["added"]
             return [partner.email for partner in partners]
 
         if message_type in [MESSAGES.SEND_FOR_APPROVAL, MESSAGES.APPROVE_PAF]:
             from hypha.apply.projects.models.project import ProjectSettings
+
             # notify the assigned approvers
-            request = kwargs.get('request')
+            request = kwargs.get("request")
             project_settings = ProjectSettings.for_request(request)
             if project_settings.paf_approval_sequential:
                 next_paf_approval = source.paf_approvals.filter(approved=False).first()
                 if next_paf_approval and next_paf_approval.user:
                     return [next_paf_approval.user.email]
-            return list(filter(lambda approver: approver is not None, source.paf_approvals.filter(approved=False).values_list('user__email', flat=True)))
+            return list(
+                filter(
+                    lambda approver: approver is not None,
+                    source.paf_approvals.filter(approved=False).values_list(
+                        "user__email", flat=True
+                    ),
+                )
+            )
 
         if message_type == MESSAGES.ASSIGN_PAF_APPROVER:
             from hypha.apply.projects.models.project import ProjectSettings
+
             # notify PAFReviewerRole's groups' users to assign approvers
-            request = kwargs.get('request')
+            request = kwargs.get("request")
             project_settings = ProjectSettings.for_request(request)
             if project_settings.paf_approval_sequential:
                 next_paf_approval = source.paf_approvals.filter(approved=False).first()
                 if next_paf_approval and not next_paf_approval.user:
-                    assigners = get_users_for_groups(list(next_paf_approval.paf_reviewer_role.user_roles.all()), exact_match=True)
+                    assigners = get_users_for_groups(
+                        list(next_paf_approval.paf_reviewer_role.user_roles.all()),
+                        exact_match=True,
+                    )
                     return [assigner.email for assigner in assigners]
 
             assigners_emails = []
             if user == source.lead:
-                for approval in source.paf_approvals.filter(approved=False, user__isnull=True):
-                    assigners_emails.extend([assigner.email for assigner in get_users_for_groups(list(approval.paf_reviewer_role.user_roles.all()), exact_match=True)])
+                for approval in source.paf_approvals.filter(
+                    approved=False, user__isnull=True
+                ):
+                    assigners_emails.extend(
+                        [
+                            assigner.email
+                            for assigner in get_users_for_groups(
+                                list(approval.paf_reviewer_role.user_roles.all()),
+                                exact_match=True,
+                            )
+                        ]
+                    )
             else:
-                assigners_emails.extend([assigner.email for assigner in
-                                         get_users_for_groups(list(user.groups.all()),
-                                                              exact_match=True)])
+                assigners_emails.extend(
+                    [
+                        assigner.email
+                        for assigner in get_users_for_groups(
+                            list(user.groups.all()), exact_match=True
+                        )
+                    ]
+                )
             return set(assigners_emails)
 
         if message_type == MESSAGES.REQUEST_PROJECT_CHANGE:
             return [source.lead.email]
 
         if message_type == MESSAGES.SENT_TO_COMPLIANCE:
-            return get_compliance_email(target_user_gps=[CONTRACTING_GROUP_NAME, FINANCE_GROUP_NAME, STAFF_GROUP_NAME])
+            return get_compliance_email(
+                target_user_gps=[
+                    CONTRACTING_GROUP_NAME,
+                    FINANCE_GROUP_NAME,
+                    STAFF_GROUP_NAME,
+                ]
+            )
 
         if message_type == MESSAGES.SUBMIT_CONTRACT_DOCUMENTS:
             return get_compliance_email(target_user_gps=[STAFF_GROUP_NAME])
@@ -311,25 +376,33 @@ class EmailAdapter(AdapterBase):
             return self.reviewers(source)
 
         if message_type == MESSAGES.UPDATE_INVOICE_STATUS:
-            related = kwargs.get('related', None)
+            related = kwargs.get("related", None)
             if related:
                 if related.status in {CHANGES_REQUESTED_BY_STAFF, DECLINED}:
                     return [source.user.email]
             return []
 
         if message_type == MESSAGES.PROJECT_TRANSITION:
-            from hypha.apply.projects.models.project import CONTRACTING, IN_PROGRESS
+            from hypha.apply.projects.models.project import (
+                CONTRACTING,
+                INVOICING_AND_REPORTING,
+            )
+
             if source.status == CONTRACTING:
                 return get_compliance_email(target_user_gps=[CONTRACTING_GROUP_NAME])
-            if source.status == IN_PROGRESS:
+            if source.status == INVOICING_AND_REPORTING:
                 return [source.user.email]
 
         if message_type == MESSAGES.APPROVE_INVOICE:
             if user.is_apply_staff:
                 return get_compliance_email(target_user_gps=[FINANCE_GROUP_NAME])
             if settings.INVOICE_EXTENDED_WORKFLOW and user.is_finance_level_1:
-                finance_2_users_email = User.objects.active().filter(groups__name=FINANCE_GROUP_NAME).\
-                    filter(groups__name=APPROVER_GROUP_NAME).values_list('email', flat=True)
+                finance_2_users_email = (
+                    User.objects.active()
+                    .filter(groups__name=FINANCE_GROUP_NAME)
+                    .filter(groups__name=APPROVER_GROUP_NAME)
+                    .values_list("email", flat=True)
+                )
                 return finance_2_users_email
             return []
 
@@ -352,8 +425,8 @@ class EmailAdapter(AdapterBase):
 
         return [
             {
-                'recipients': [reviewer],
-                'sources': sources,
+                "recipients": [reviewer],
+                "sources": sources,
             }
             for reviewer, sources in reviewers_to_message.items()
         ]
@@ -369,19 +442,18 @@ class EmailAdapter(AdapterBase):
     def partners_updated_applicant(self, added, removed, **kwargs):
         if added:
             return self.render_message(
-                'messages/email/partners_update_applicant.html', added=added, **kwargs
+                "messages/email/partners_update_applicant.html", added=added, **kwargs
             )
 
     def partners_updated_partner(self, added, removed, **kwargs):
         for _partner in added:
             return self.render_message(
-                'messages/email/partners_update_partner.html', **kwargs
+                "messages/email/partners_update_partner.html", **kwargs
             )
 
     def render_message(self, template, **kwargs):
-
         with language(settings.LANGUAGE_CODE):
-            text = render_to_string(template, kwargs, kwargs['request'])
+            text = render_to_string(template, kwargs, kwargs["request"])
 
         return remove_extra_empty_lines(text)
 
@@ -397,4 +469,4 @@ class EmailAdapter(AdapterBase):
         try:
             send_mail(subject, message, from_email, [recipient], logs=logs)
         except Exception as e:
-            return 'Error: ' + str(e)
+            return "Error: " + str(e)
diff --git a/hypha/apply/activity/adapters/slack.py b/hypha/apply/activity/adapters/slack.py
index 12e48d18d24909589f89b3c4eba81c7ab40c9608..5925265e966a5c3b61c548ffd93e37f607e44eba 100644
--- a/hypha/apply/activity/adapters/slack.py
+++ b/hypha/apply/activity/adapters/slack.py
@@ -14,7 +14,6 @@ from hypha.apply.projects.models.payment import (
     APPROVED_BY_STAFF,
     CHANGES_REQUESTED_BY_FINANCE_1,
     CHANGES_REQUESTED_BY_FINANCE_2,
-    CONVERTED,
     PAID,
     RESUBMITTED,
     SUBMITTED,
@@ -25,53 +24,111 @@ User = get_user_model()
 
 
 class SlackAdapter(AdapterBase):
-    """Notification Adaptor for internal staff on the configured slack channels.
-    """
+    """Notification Adaptor for internal staff on the configured slack channels."""
+
     adapter_type = "Slack"
     always_send = True
     messages = {
-        MESSAGES.NEW_SUBMISSION: _('A new submission has been submitted for {source.page.title}: <{link}|{source.title}> by {user}'),
-        MESSAGES.UPDATE_LEAD: _('The lead of <{link}|{source.title}> has been updated from {old_lead} to {source.lead} by {user}'),
-        MESSAGES.BATCH_UPDATE_LEAD: 'handle_batch_lead',
-        MESSAGES.COMMENT: _('A new {comment.visibility} comment has been posted on <{link}|{source.title}> by {user}'),
-        MESSAGES.EDIT_SUBMISSION: _('{user} has edited <{link}|{source.title}>'),
-        MESSAGES.APPLICANT_EDIT: _('{user} has edited <{link}|{source.title}>'),
-        MESSAGES.REVIEWERS_UPDATED: 'reviewers_updated',
-        MESSAGES.BATCH_REVIEWERS_UPDATED: 'handle_batch_reviewers',
-        MESSAGES.PARTNERS_UPDATED: _('{user} has updated the partners on <{link}|{source.title}>'),
-        MESSAGES.TRANSITION: _('{user} has updated the status of <{link}|{source.title}>: {old_phase.display_name} → {source.phase}'),
-        MESSAGES.BATCH_TRANSITION: 'handle_batch_transition',
-        MESSAGES.DETERMINATION_OUTCOME: 'handle_determination',
-        MESSAGES.BATCH_DETERMINATION_OUTCOME: 'handle_batch_determination',
-        MESSAGES.PROPOSAL_SUBMITTED: _('A proposal has been submitted for review: <{link}|{source.title}>'),
-        MESSAGES.INVITED_TO_PROPOSAL: _('<{link}|{source.title}> by {source.user} has been invited to submit a proposal'),
-        MESSAGES.NEW_REVIEW: _('{user} has submitted a review for <{link}|{source.title}>. Outcome: {review.outcome},  Score: {review.get_score_display}'),
-        MESSAGES.READY_FOR_REVIEW: 'notify_reviewers',
-        MESSAGES.OPENED_SEALED: _('{user} has opened the sealed submission: <{link}|{source.title}>'),
-        MESSAGES.REVIEW_OPINION: _('{user} {opinion.opinion_display}s with {opinion.review.author}s review of <{link}|{source.title}>'),
-        MESSAGES.BATCH_READY_FOR_REVIEW: 'batch_notify_reviewers',
-        MESSAGES.DELETE_SUBMISSION: _('{user} has deleted {source.title}'),
-        MESSAGES.DELETE_REVIEW: _('{user} has deleted {review.author} review for <{link}|{source.title}>'),
-        MESSAGES.CREATED_PROJECT: _('{user} has created a Project: <{link}|{source.title}>'),
-        MESSAGES.UPDATE_PROJECT_LEAD: _('The lead of project <{link}|{source.title}> has been updated from {old_lead} to {source.lead} by {user}'),
-        MESSAGES.EDIT_REVIEW: _('{user} has edited {review.author} review for <{link}|{source.title}>'),
-        MESSAGES.SEND_FOR_APPROVAL: _('{user} has requested approval on project <{link}|{source.title}>'),
-        MESSAGES.APPROVE_PROJECT: _('{user} has approved project <{link}|{source.title}>'),
-        MESSAGES.REQUEST_PROJECT_CHANGE: _('{user} has requested changes for project acceptance on <{link}|{source.title}>'),
-        MESSAGES.UPLOAD_CONTRACT: _('{user} has uploaded a contract for <{link}|{source.title}>'),
-        MESSAGES.SUBMIT_CONTRACT_DOCUMENTS: _('{user} has submitted the contracting document for project <{link}|{source.title}>'),
-        MESSAGES.APPROVE_CONTRACT: _('{user} has approved contract for <{link}|{source.title}>'),
-        MESSAGES.CREATE_INVOICE: _('{user} has created invoice for <{link}|{source.title}>'),
-        MESSAGES.UPDATE_INVOICE_STATUS: _('{user} has changed the status of <{link_related}|invoice> on <{link}|{source.title}> to {invoice.status_display}'),
-        MESSAGES.DELETE_INVOICE: _('{user} has deleted invoice from <{link}|{source.title}>'),
-        MESSAGES.UPDATE_INVOICE: _('{user} has updated invoice for <{link}|{source.title}>'),
-        MESSAGES.SUBMIT_REPORT: _('{user} has submitted a report for <{link}|{source.title}>'),
-        MESSAGES.BATCH_DELETE_SUBMISSION: 'handle_batch_delete_submission',
-        MESSAGES.STAFF_ACCOUNT_CREATED: _('{user} has created a new account for <{link}|{source}>'),
-        MESSAGES.STAFF_ACCOUNT_EDITED: _('{user} has edited account for <{link}|{source}> that now has following roles: {roles}'),
-        MESSAGES.BATCH_ARCHIVE_SUBMISSION: 'handle_batch_archive_submission',
-        MESSAGES.ARCHIVE_SUBMISSION: _('{user} has archived the submission: {source.title}'),
-        MESSAGES.UNARCHIVE_SUBMISSION: _('{user} has unarchived the submission: {source.title}'),
+        MESSAGES.NEW_SUBMISSION: _(
+            "A new submission has been submitted for {source.page.title}: <{link}|{source.title}> by {user}"
+        ),
+        MESSAGES.UPDATE_LEAD: _(
+            "The lead of <{link}|{source.title}> has been updated from {old_lead} to {source.lead} by {user}"
+        ),
+        MESSAGES.BATCH_UPDATE_LEAD: "handle_batch_lead",
+        MESSAGES.COMMENT: _(
+            "A new {comment.visibility} comment has been posted on <{link}|{source.title}> by {user}"
+        ),
+        MESSAGES.EDIT_SUBMISSION: _("{user} has edited <{link}|{source.title}>"),
+        MESSAGES.APPLICANT_EDIT: _("{user} has edited <{link}|{source.title}>"),
+        MESSAGES.REVIEWERS_UPDATED: "reviewers_updated",
+        MESSAGES.BATCH_REVIEWERS_UPDATED: "handle_batch_reviewers",
+        MESSAGES.PARTNERS_UPDATED: _(
+            "{user} has updated the partners on <{link}|{source.title}>"
+        ),
+        MESSAGES.TRANSITION: _(
+            "{user} has updated the status of <{link}|{source.title}>: {old_phase.display_name} → {source.phase}"
+        ),
+        MESSAGES.BATCH_TRANSITION: "handle_batch_transition",
+        MESSAGES.DETERMINATION_OUTCOME: "handle_determination",
+        MESSAGES.BATCH_DETERMINATION_OUTCOME: "handle_batch_determination",
+        MESSAGES.PROPOSAL_SUBMITTED: _(
+            "A proposal has been submitted for review: <{link}|{source.title}>"
+        ),
+        MESSAGES.INVITED_TO_PROPOSAL: _(
+            "<{link}|{source.title}> by {source.user} has been invited to submit a proposal"
+        ),
+        MESSAGES.NEW_REVIEW: _(
+            "{user} has submitted a review for <{link}|{source.title}>. Outcome: {review.outcome},  Score: {review.get_score_display}"
+        ),
+        MESSAGES.READY_FOR_REVIEW: "notify_reviewers",
+        MESSAGES.OPENED_SEALED: _(
+            "{user} has opened the sealed submission: <{link}|{source.title}>"
+        ),
+        MESSAGES.REVIEW_OPINION: _(
+            "{user} {opinion.opinion_display}s with {opinion.review.author}s review of <{link}|{source.title}>"
+        ),
+        MESSAGES.BATCH_READY_FOR_REVIEW: "batch_notify_reviewers",
+        MESSAGES.DELETE_SUBMISSION: _("{user} has deleted {source.title}"),
+        MESSAGES.DELETE_REVIEW: _(
+            "{user} has deleted {review.author} review for <{link}|{source.title}>"
+        ),
+        MESSAGES.CREATED_PROJECT: _(
+            "{user} has created a Project: <{link}|{source.title}>"
+        ),
+        MESSAGES.UPDATE_PROJECT_LEAD: _(
+            "The lead of project <{link}|{source.title}> has been updated from {old_lead} to {source.lead} by {user}"
+        ),
+        MESSAGES.EDIT_REVIEW: _(
+            "{user} has edited {review.author} review for <{link}|{source.title}>"
+        ),
+        MESSAGES.SEND_FOR_APPROVAL: _(
+            "{user} has requested approval on project <{link}|{source.title}>"
+        ),
+        MESSAGES.APPROVE_PROJECT: _(
+            "{user} has approved project <{link}|{source.title}>"
+        ),
+        MESSAGES.REQUEST_PROJECT_CHANGE: _(
+            "{user} has requested changes for project acceptance on <{link}|{source.title}>"
+        ),
+        MESSAGES.UPLOAD_CONTRACT: _(
+            "{user} has uploaded a contract for <{link}|{source.title}>"
+        ),
+        MESSAGES.SUBMIT_CONTRACT_DOCUMENTS: _(
+            "{user} has submitted the contracting document for project <{link}|{source.title}>"
+        ),
+        MESSAGES.APPROVE_CONTRACT: _(
+            "{user} has approved contract for <{link}|{source.title}>"
+        ),
+        MESSAGES.CREATE_INVOICE: _(
+            "{user} has created invoice for <{link}|{source.title}>"
+        ),
+        MESSAGES.UPDATE_INVOICE_STATUS: _(
+            "{user} has changed the status of <{link_related}|invoice> on <{link}|{source.title}> to {invoice.status_display}"
+        ),
+        MESSAGES.DELETE_INVOICE: _(
+            "{user} has deleted invoice from <{link}|{source.title}>"
+        ),
+        MESSAGES.UPDATE_INVOICE: _(
+            "{user} has updated invoice for <{link}|{source.title}>"
+        ),
+        MESSAGES.SUBMIT_REPORT: _(
+            "{user} has submitted a report for <{link}|{source.title}>"
+        ),
+        MESSAGES.BATCH_DELETE_SUBMISSION: "handle_batch_delete_submission",
+        MESSAGES.STAFF_ACCOUNT_CREATED: _(
+            "{user} has created a new account for <{link}|{source}>"
+        ),
+        MESSAGES.STAFF_ACCOUNT_EDITED: _(
+            "{user} has edited account for <{link}|{source}> that now has following roles: {roles}"
+        ),
+        MESSAGES.BATCH_ARCHIVE_SUBMISSION: "handle_batch_archive_submission",
+        MESSAGES.ARCHIVE_SUBMISSION: _(
+            "{user} has archived the submission: {source.title}"
+        ),
+        MESSAGES.UNARCHIVE_SUBMISSION: _(
+            "{user} has unarchived the submission: {source.title}"
+        ),
     }
 
     def __init__(self):
@@ -82,20 +139,20 @@ class SlackAdapter(AdapterBase):
         self.comments_type = settings.SLACK_TYPE_COMMENTS
 
     def slack_links(self, links, sources):
-        return ', '.join(f'<{links[source.id]}|{source.title}>' for source in sources)
+        return ", ".join(f"<{links[source.id]}|{source.title}>" for source in sources)
 
     def extra_kwargs(self, message_type, **kwargs):
-        source = kwargs['source']
-        sources = kwargs['sources']
-        request = kwargs['request']
-        related = kwargs['related']
+        source = kwargs["source"]
+        sources = kwargs["sources"]
+        request = kwargs["request"]
+        related = kwargs["related"]
         link = link_to(source, request)
         link_related = link_to(related, request)
         links = {source.id: link_to(source, request) for source in sources}
         return {
-            'link': link,
-            'link_related': link_related,
-            'links': links,
+            "link": link,
+            "link_related": link_related,
+            "links": links,
         }
 
     def recipients(self, message_type, source, related, **kwargs):
@@ -103,7 +160,7 @@ class SlackAdapter(AdapterBase):
             MESSAGES.STAFF_ACCOUNT_CREATED,
             MESSAGES.STAFF_ACCOUNT_EDITED,
         ]:
-            return [self.slack_id(kwargs['user'])]
+            return [self.slack_id(kwargs["user"])]
 
         if message_type == MESSAGES.SEND_FOR_APPROVAL:
             return [
@@ -131,7 +188,6 @@ class SlackAdapter(AdapterBase):
                 RESUBMITTED,
                 CHANGES_REQUESTED_BY_FINANCE_1,
                 APPROVED_BY_FINANCE_2,
-                CONVERTED,
                 PAID,
             ]:
                 # Notify project lead/staff
@@ -155,44 +211,42 @@ class SlackAdapter(AdapterBase):
 
     def batch_recipients(self, message_type, sources, **kwargs):
         # We group the messages by lead
-        leads = User.objects.filter(id__in=sources.values('lead'))
+        leads = User.objects.filter(id__in=sources.values("lead"))
         return [
             {
-                'recipients': [self.slack_id(lead)],
-                'sources': sources.filter(lead=lead),
+                "recipients": [self.slack_id(lead)],
+                "sources": sources.filter(lead=lead),
             }
             for lead in leads
         ]
 
-    def reviewers_updated(
-        self, source, link, user, added=None, removed=None, **kwargs
-    ):
+    def reviewers_updated(self, source, link, user, added=None, removed=None, **kwargs):
         if added is None:
             added = []
         if removed is None:
             removed = []
         submission = source
         message = [
-            _('{user} has updated the reviewers on <{link}|{title}>').format(
+            _("{user} has updated the reviewers on <{link}|{title}>").format(
                 user=user, link=link, title=submission.title
             )
         ]
 
         if added:
-            message.append(_('Added:'))
+            message.append(_("Added:"))
             message.extend(reviewers_message(added))
 
         if removed:
-            message.append(_('Removed:'))
+            message.append(_("Removed:"))
             message.extend(reviewers_message(removed))
 
-        return ' '.join(message)
+        return " ".join(message)
 
     def handle_batch_lead(self, sources, links, user, new_lead, **kwargs):
         submissions = sources
         submissions_text = self.slack_links(links, submissions)
         return _(
-            '{user} has batch changed lead to {new_lead} on: {submissions_text}'
+            "{user} has batch changed lead to {new_lead} on: {submissions_text}"
         ).format(
             user=user,
             submissions_text=submissions_text,
@@ -202,15 +256,15 @@ class SlackAdapter(AdapterBase):
     def handle_batch_reviewers(self, sources, links, user, added, **kwargs):
         submissions = sources
         submissions_text = self.slack_links(links, submissions)
-        reviewers_text = ' '.join(
+        reviewers_text = " ".join(
             [
-                _('{user} as {name},').format(user=str(user), name=role.name)
+                _("{user} as {name},").format(user=str(user), name=role.name)
                 for role, user in added
                 if user
             ]
         )
         return _(
-            '{user} has batch added {reviewers_text} as reviewers on: {submissions_text}'
+            "{user} has batch added {reviewers_text} as reviewers on: {submissions_text}"
         ).format(
             user=user,
             submissions_text=submissions_text,
@@ -220,17 +274,17 @@ class SlackAdapter(AdapterBase):
     def handle_batch_transition(self, user, links, sources, transitions, **kwargs):
         submissions = sources
         submissions_text = [
-            ': '.join(
+            ": ".join(
                 [
                     self.slack_links(links, [submission]),
-                    f'{transitions[submission.id].display_name} → {submission.phase}',
+                    f"{transitions[submission.id].display_name} → {submission.phase}",
                 ]
             )
             for submission in submissions
         ]
-        submissions_links = ','.join(submissions_text)
+        submissions_links = ",".join(submissions_text)
         return _(
-            '{user} has transitioned the following submissions: {submissions_links}'
+            "{user} has transitioned the following submissions: {submissions_links}"
         ).format(
             user=user,
             submissions_links=submissions_links,
@@ -240,14 +294,14 @@ class SlackAdapter(AdapterBase):
         submission = source
         if determination.send_notice:
             return _(
-                'A determination for <{link}|{submission_title}> was sent by email. Outcome: {determination_outcome}'
+                "A determination for <{link}|{submission_title}> was sent by email. Outcome: {determination_outcome}"
             ).format(
                 link=link,
                 submission_title=submission.title,
                 determination_outcome=determination.clean_outcome,
             )
         return _(
-            'A determination for <{link}|{submission_title}> was saved without sending an email. Outcome: {determination_outcome}'
+            "A determination for <{link}|{submission_title}> was saved without sending an email. Outcome: {determination_outcome}"
         ).format(
             link=link,
             submission_title=submission.title,
@@ -256,14 +310,14 @@ class SlackAdapter(AdapterBase):
 
     def handle_batch_determination(self, sources, links, determinations, **kwargs):
         submissions = sources
-        submissions_links = ','.join(
+        submissions_links = ",".join(
             [self.slack_links(links, [submission]) for submission in submissions]
         )
 
         outcome = determinations[submissions[0].id].clean_outcome
 
         return _(
-            'Determinations of {outcome} was sent for: {submissions_links}'
+            "Determinations of {outcome} was sent for: {submissions_links}"
         ).format(
             outcome=outcome,
             submissions_links=submissions_links,
@@ -271,15 +325,15 @@ class SlackAdapter(AdapterBase):
 
     def handle_batch_delete_submission(self, sources, links, user, **kwargs):
         submissions = sources
-        submissions_text = ', '.join([submission.title for submission in submissions])
-        return _('{user} has deleted submissions: {title}').format(
+        submissions_text = ", ".join([submission.title for submission in submissions])
+        return _("{user} has deleted submissions: {title}").format(
             user=user, title=submissions_text
         )
 
     def handle_batch_archive_submission(self, sources, links, user, **kwargs):
         submissions = sources
-        submissions_text = ', '.join([submission.title for submission in submissions])
-        return _('{user} has archived submissions: {title}').format(
+        submissions_text = ", ".join([submission.title for submission in submissions])
+        return _("{user} has archived submissions: {title}").format(
             user=user, title=submissions_text
         )
 
@@ -290,10 +344,10 @@ class SlackAdapter(AdapterBase):
             if submission.phase.permissions.can_review(reviewer):
                 reviewers_to_notify.append(reviewer)
 
-        reviewers = ', '.join(str(reviewer) for reviewer in reviewers_to_notify)
+        reviewers = ", ".join(str(reviewer) for reviewer in reviewers_to_notify)
 
         return _(
-            '<{link}|{title}> is ready for review. The following are assigned as reviewers: {reviewers}'
+            "<{link}|{title}> is ready for review. The following are assigned as reviewers: {reviewers}"
         ).format(
             link=link,
             reviewers=reviewers,
@@ -301,27 +355,27 @@ class SlackAdapter(AdapterBase):
         )
 
     def batch_notify_reviewers(self, sources, links, **kwargs):
-        kwargs.pop('source')
-        kwargs.pop('link')
-        return '. '.join(
+        kwargs.pop("source")
+        kwargs.pop("link")
+        return ". ".join(
             self.notify_reviewers(source, link=links[source.id], **kwargs)
             for source in sources
         )
 
     def slack_id(self, user):
         if user is None:
-            return ''
+            return ""
 
         if not user.slack:
-            return ''
+            return ""
 
-        return f'<{user.slack}>'
+        return f"<{user.slack}>"
 
     def slack_channels(self, source, **kwargs):
         # Set the default room as a start.
         target_rooms = [self.target_room]
         try:
-            fund_slack_channel = source.get_from_parent('slack_channel').split(',')
+            fund_slack_channel = source.get_from_parent("slack_channel").split(",")
         except AttributeError:
             # Not a submission object.
             pass
@@ -332,7 +386,7 @@ class SlackAdapter(AdapterBase):
                 target_rooms = custom_rooms
 
         try:
-            comment = kwargs['comment']
+            comment = kwargs["comment"]
         except KeyError:
             # Not a comment, no extra rooms.
             pass
@@ -346,7 +400,7 @@ class SlackAdapter(AdapterBase):
 
         # Make sure each channel name starts with a "#".
         target_rooms = [
-            room.strip() if room.startswith('#') else '#' + room.strip()
+            room.strip() if room.startswith("#") else "#" + room.strip()
             for room in target_rooms
             if room
         ]
@@ -359,20 +413,20 @@ class SlackAdapter(AdapterBase):
         if not any(target_rooms) or not settings.SLACK_TOKEN:
             errors = []
             if not target_rooms:
-                errors.append('Room ID')
+                errors.append("Room ID")
             if not settings.SLACK_TOKEN:
-                errors.append('Slack Token')
-            return 'Missing configuration: {}'.format(', '.join(errors))
+                errors.append("Slack Token")
+            return "Missing configuration: {}".format(", ".join(errors))
 
-        message = ' '.join([recipient, message]).strip()
+        message = " ".join([recipient, message]).strip()
 
         data = {
             "message": message,
         }
         for room in target_rooms:
             try:
-                slack_message('messages/slack_message.html', data, channel=room)
+                slack_message("messages/slack_message.html", data, channel=room)
             except Exception as e:
                 logger.exception(e)
-                return '400: Bad Request'
-        return '200: OK'
+                return "400: Bad Request"
+        return "200: OK"
diff --git a/hypha/apply/activity/adapters/utils.py b/hypha/apply/activity/adapters/utils.py
index 6e4d3349ceab2870a765702fe92bbf5a1ca48214..ecaffde8a6712ab52d081a7b70f851bba64ba120 100644
--- a/hypha/apply/activity/adapters/utils.py
+++ b/hypha/apply/activity/adapters/utils.py
@@ -1,10 +1,20 @@
 from collections import defaultdict
 
+from django.conf import settings
 from django.db.models import Count
 from django.utils.translation import gettext as _
 
 from hypha.apply.activity.options import MESSAGES
 from hypha.apply.projects.models import ProjectSettings
+from hypha.apply.projects.models.payment import (
+    APPROVED_BY_FINANCE_1,
+    APPROVED_BY_FINANCE_2,
+    CHANGES_REQUESTED_BY_STAFF,
+    DECLINED,
+    PAID,
+    RESUBMITTED,
+    SUBMITTED,
+)
 from hypha.apply.users.groups import (
     CONTRACTING_GROUP_NAME,
     FINANCE_GROUP_NAME,
@@ -14,8 +24,8 @@ from hypha.apply.users.models import User
 
 
 def link_to(target, request):
-    if target and hasattr(target, 'get_absolute_url'):
-        return request.scheme + '://' + request.get_host() + target.get_absolute_url()
+    if target and hasattr(target, "get_absolute_url"):
+        return request.scheme + "://" + request.get_host() + target.get_absolute_url()
 
 
 def group_reviewers(reviewers):
@@ -28,10 +38,10 @@ def group_reviewers(reviewers):
 def reviewers_message(reviewers):
     messages = []
     for role, reviewers_ in group_reviewers(reviewers).items():
-        message = ', '.join(str(reviewer) for reviewer in reviewers_)
+        message = ", ".join(str(reviewer) for reviewer in reviewers_)
         if role:
-            message += _(' as {role}').format(role=str(role))
-        message += '.'
+            message += _(" as {role}").format(role=str(role))
+        message += "."
         messages.append(message)
     return messages
 
@@ -44,8 +54,29 @@ def is_ready_for_review(message_type):
     return message_type in [MESSAGES.READY_FOR_REVIEW, MESSAGES.BATCH_READY_FOR_REVIEW]
 
 
+def is_invoice_public_transition(invoice):
+    if invoice.status in [
+        SUBMITTED,
+        RESUBMITTED,
+        CHANGES_REQUESTED_BY_STAFF,
+        APPROVED_BY_FINANCE_2,
+        DECLINED,
+        PAID,
+    ]:
+        return True
+    if (
+        not settings.INVOICE_EXTENDED_WORKFLOW
+        and invoice.status == APPROVED_BY_FINANCE_1
+    ):
+        return True
+    return False
+
+
 def is_reviewer_update(message_type):
-    return message_type in [MESSAGES.REVIEWERS_UPDATED, MESSAGES.BATCH_REVIEWERS_UPDATED]
+    return message_type in [
+        MESSAGES.REVIEWERS_UPDATED,
+        MESSAGES.BATCH_REVIEWERS_UPDATED,
+    ]
 
 
 def get_compliance_email(target_user_gps=None):
@@ -93,12 +124,17 @@ def get_users_for_groups(groups, user_queryset=None, exact_match=False):
     if groups:
         if not user_queryset:
             if exact_match:
-                user_queryset = User.objects.active().annotate(group_count=Count('groups')).filter(group_count=len(groups), groups__name=groups.pop().name)
+                user_queryset = (
+                    User.objects.active()
+                    .annotate(group_count=Count("groups"))
+                    .filter(group_count=len(groups), groups__name=groups.pop().name)
+                )
             else:
-                user_queryset = User.objects.active().filter(groups__name=groups.pop().name)
+                user_queryset = User.objects.active().filter(
+                    groups__name=groups.pop().name
+                )
         else:
             user_queryset = user_queryset.filter(groups__name=groups.pop().name)
         return get_users_for_groups(groups, user_queryset=user_queryset)
     else:
         return user_queryset
-
diff --git a/hypha/apply/activity/admin.py b/hypha/apply/activity/admin.py
index e2c10512196d14598f4abd1d147da1bc293b2c2b..eba7b0ff8ae93f52ff0ac5e0c6a9351a7283b0c3 100644
--- a/hypha/apply/activity/admin.py
+++ b/hypha/apply/activity/admin.py
@@ -5,7 +5,7 @@ from .models import Event, Message
 
 class MessageInline(admin.TabularInline):
     model = Message
-    readonly_fields = ('type', 'recipient', 'content', 'status', 'external_id')
+    readonly_fields = ("type", "recipient", "content", "status", "external_id")
     can_delete = False
 
     def has_add_permission(self, request, obj):
@@ -13,9 +13,9 @@ class MessageInline(admin.TabularInline):
 
 
 class EventAdmin(admin.ModelAdmin):
-    list_display = ('type', 'by', 'when', 'source')
-    list_filter = ('type', 'when')
-    readonly_fields = ('type', 'source', 'when', 'by')
+    list_display = ("type", "by", "when", "source")
+    list_filter = ("type", "when")
+    readonly_fields = ("type", "source", "when", "by")
     inlines = (MessageInline,)
 
     def has_add_permission(self, request):
diff --git a/hypha/apply/activity/apps.py b/hypha/apply/activity/apps.py
index e031309956a30e7b0c6cf91cb11ac757999f7fb0..2202e11e755d320675c25ed9d9e062a94cc475b6 100644
--- a/hypha/apply/activity/apps.py
+++ b/hypha/apply/activity/apps.py
@@ -2,7 +2,7 @@ from django.apps import AppConfig
 
 
 class ActivityConfig(AppConfig):
-    name = 'hypha.apply.activity'
+    name = "hypha.apply.activity"
 
     def ready(self):
         from . import signals  # NOQA
diff --git a/hypha/apply/activity/context_processors.py b/hypha/apply/activity/context_processors.py
index f8b08f7ffad5e52e3858c2a581574d9ea1cdfa23..0a807d21ba7430e35b8b6735fc12d42ac48b9b00 100644
--- a/hypha/apply/activity/context_processors.py
+++ b/hypha/apply/activity/context_processors.py
@@ -3,7 +3,11 @@ from .models import Activity
 
 def notification_context(request):
     context_data = {}
-    if hasattr(request, 'user'):
+    if hasattr(request, "user"):
         if request.user.is_authenticated and request.user.is_apply_staff:
-            context_data['latest_notifications'] = Activity.objects.filter(current=True).latest().order_by('-timestamp')[:5]
+            context_data["latest_notifications"] = (
+                Activity.objects.filter(current=True)
+                .latest()
+                .order_by("-timestamp")[:5]
+            )
     return context_data
diff --git a/hypha/apply/activity/filters.py b/hypha/apply/activity/filters.py
index 899c5d5f533e0a77f8afca289760c49f2cbfcba6..b17fc2425819274d5da053d57eac0dfe9d7194cf 100644
--- a/hypha/apply/activity/filters.py
+++ b/hypha/apply/activity/filters.py
@@ -10,33 +10,40 @@ from .models import Activity
 
 class NotificationFilter(django_filters.FilterSet):
     timestamp_choices = [
-        ('today', _('Today')),
-        ('yesterday', _('Yesterday')),
-        ('week', _('Past 7 days')),
-        ('month', _('This month'))
+        ("today", _("Today")),
+        ("yesterday", _("Yesterday")),
+        ("week", _("Past 7 days")),
+        ("month", _("This month")),
     ]
     timestamp_filters = {
-        'today': lambda qs, name: qs.filter(**{
-            '%s__year' % name: now().year,
-            '%s__month' % name: now().month,
-            '%s__day' % name: now().day
-        }),
-        'yesterday': lambda qs, name: qs.filter(**{
-            '%s__year' % name: (now() - timedelta(days=1)).year,
-            '%s__month' % name: (now() - timedelta(days=1)).month,
-            '%s__day' % name: (now() - timedelta(days=1)).day,
-        }),
-        'week': lambda qs, name: qs.filter(**{
-            '%s__gte' % name: _truncate(now() - timedelta(days=7)),
-            '%s__lt' % name: _truncate(now() + timedelta(days=1)),
-        }),
-        'month': lambda qs, name: qs.filter(**{
-            '%s__year' % name: now().year,
-            '%s__month' % name: now().month
-        })
+        "today": lambda qs, name: qs.filter(
+            **{
+                "%s__year" % name: now().year,
+                "%s__month" % name: now().month,
+                "%s__day" % name: now().day,
+            }
+        ),
+        "yesterday": lambda qs, name: qs.filter(
+            **{
+                "%s__year" % name: (now() - timedelta(days=1)).year,
+                "%s__month" % name: (now() - timedelta(days=1)).month,
+                "%s__day" % name: (now() - timedelta(days=1)).day,
+            }
+        ),
+        "week": lambda qs, name: qs.filter(
+            **{
+                "%s__gte" % name: _truncate(now() - timedelta(days=7)),
+                "%s__lt" % name: _truncate(now() + timedelta(days=1)),
+            }
+        ),
+        "month": lambda qs, name: qs.filter(
+            **{"%s__year" % name: now().year, "%s__month" % name: now().month}
+        ),
     }
 
-    date = DateRangeFilter(field_name='timestamp', choices=timestamp_choices, filters=timestamp_filters)
+    date = DateRangeFilter(
+        field_name="timestamp", choices=timestamp_choices, filters=timestamp_filters
+    )
 
     class Meta:
         model = Activity
diff --git a/hypha/apply/activity/forms.py b/hypha/apply/activity/forms.py
index c623f92503a30bb7163e8ba2803fa6681033c2bc..ec7fc37632b2081c94c99de72e7aa55e006b855d 100644
--- a/hypha/apply/activity/forms.py
+++ b/hypha/apply/activity/forms.py
@@ -1,5 +1,4 @@
 from django import forms
-from django.core.exceptions import ValidationError
 from pagedown.widgets import PagedownWidget
 
 from .models import Activity
@@ -8,30 +7,29 @@ from .models import Activity
 class CommentForm(forms.ModelForm):
     class Meta:
         model = Activity
-        fields = ('message', 'visibility')
+        fields = ("message", "visibility")
         labels = {
-            'visibility': 'Visible to',
-            'message': 'Message',
+            "visibility": "Visible to",
+            "message": "Message",
+        }
+        help_texts = {
+            "visibility": "Select a relevant user role. Staff can view every comment."
         }
         widgets = {
-            'visibility': forms.RadioSelect(),
-            'message': PagedownWidget(),
+            "visibility": forms.RadioSelect(),
+            "message": PagedownWidget(),
         }
 
     def __init__(self, *args, user=None, **kwargs):
         super().__init__(*args, **kwargs)
-        self.allowed_visibility = self._meta.model.visibility_for(user)
         self.visibility_choices = self._meta.model.visibility_choices_for(user)
-        visibility = self.fields['visibility']
-        # Set default visibility to "team" for staff and to "applicant" for everyone else.
-        visibility.initial = self.visibility_choices[1] if user.is_apply_staff else self.visibility_choices[0]
+        visibility = self.fields["visibility"]
+        # Set default visibility to "Applicant" for staff and staff can view everything.
+        visibility.initial = self.visibility_choices[0]
         if len(self.visibility_choices) > 1:
             visibility.choices = self.visibility_choices
         else:
+            visibility.required = False
+            visibility.choices = self.visibility_choices
+            visibility.initial = visibility.initial[0]
             visibility.widget = forms.HiddenInput()
-
-    def clean_visibility(self):
-        choice = self.cleaned_data['visibility']
-        if choice not in self.allowed_visibility:
-            raise ValidationError('You do not have permission for that visibility.')
-        return choice
diff --git a/hypha/apply/activity/management/commands/migrate_comments.py b/hypha/apply/activity/management/commands/migrate_comments.py
index 728d795315b5f5b206c21857cb60d814aa231164..4ee27b28c8c48335143b10122201f20cfd53709e 100644
--- a/hypha/apply/activity/management/commands/migrate_comments.py
+++ b/hypha/apply/activity/management/commands/migrate_comments.py
@@ -16,11 +16,13 @@ class Command(BaseCommand):
     data = []
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             for id in self.data:
@@ -31,12 +33,14 @@ class Command(BaseCommand):
 
         try:
             activity = Activity.objects.create(
-                timestamp=datetime.fromtimestamp(int(comment['created']), timezone.utc),
-                user=self.get_user(comment['uid']),
-                submission=self.get_submission(comment['nid']),
-                message=self.get_message(comment['subject'], comment['comment_body']['value']),
-                type='comment',
-                visibility='internal',
+                timestamp=datetime.fromtimestamp(int(comment["created"]), timezone.utc),
+                user=self.get_user(comment["uid"]),
+                submission=self.get_submission(comment["nid"]),
+                message=self.get_message(
+                    comment["subject"], comment["comment_body"]["value"]
+                ),
+                type="comment",
+                visibility="internal",
             )
             # Disable auto_* on date fields so imported dates are used.
             for field in activity._meta.local_fields:
@@ -44,9 +48,13 @@ class Command(BaseCommand):
                     field.auto_now_add = False
             try:
                 activity.save()
-                self.stdout.write(f"Processed \"{comment['subject']}\" ({comment['cid']})")
+                self.stdout.write(
+                    f"Processed \"{comment['subject']}\" ({comment['cid']})"
+                )
             except IntegrityError:
-                self.stdout.write(f"Skipped \"{comment['subject']}\" ({comment['cid']}) due to IntegrityError")
+                self.stdout.write(
+                    f"Skipped \"{comment['subject']}\" ({comment['cid']}) due to IntegrityError"
+                )
                 pass
         except ValueError:
             pass
@@ -66,7 +74,7 @@ class Command(BaseCommand):
         try:
             return ApplicationSubmission.objects.get(drupal_id=nid)
         except ApplicationSubmission.DoesNotExist:
-            return 'None'
+            return "None"
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
diff --git a/hypha/apply/activity/management/commands/send_staff_email_digest.py b/hypha/apply/activity/management/commands/send_staff_email_digest.py
index a12b33fbc176e2776ef9ead0cf254403a748e309..2d4e846c1637a842e1a6fa324b6c27fb909b0ab7 100644
--- a/hypha/apply/activity/management/commands/send_staff_email_digest.py
+++ b/hypha/apply/activity/management/commands/send_staff_email_digest.py
@@ -69,9 +69,9 @@ def slack_message_to_markdown(msg):
 
     def to_href(match_obj):
         if match_obj.group() is not None:
-            return f'[{match_obj.group(2)}]({match_obj.group(1)})'
+            return f"[{match_obj.group(2)}]({match_obj.group(1)})"
 
-    return re.sub(r'<(.*)\|(.*)>', to_href, msg)
+    return re.sub(r"<(.*)\|(.*)>", to_href, msg)
 
 
 def prepare_and_send_activity_digest_email(to, subject, slack_messages):
@@ -84,19 +84,19 @@ def prepare_and_send_activity_digest_email(to, subject, slack_messages):
     messages = [m for m in slack_messages if m.id not in exclude_ids]
     total_count = len(slack_messages)
     ctx = {
-        'messages': messages,
-        'submissions': submissions,
-        'comments': comments,
-        'reviews': reviews,
-        'has_main_sections': bool(exclude_ids),
-        'total_count': total_count,
-        'ORG_LONG_NAME': settings.ORG_LONG_NAME,
-        'ORG_SHORT_NAME': settings.ORG_SHORT_NAME,
-        'ORG_URL': settings.ORG_URL,
+        "messages": messages,
+        "submissions": submissions,
+        "comments": comments,
+        "reviews": reviews,
+        "has_main_sections": bool(exclude_ids),
+        "total_count": total_count,
+        "ORG_LONG_NAME": settings.ORG_LONG_NAME,
+        "ORG_SHORT_NAME": settings.ORG_SHORT_NAME,
+        "ORG_URL": settings.ORG_URL,
     }
 
     if total_count:
-        email = MarkdownMail('messages/email/activity_summary.md')
+        email = MarkdownMail("messages/email/activity_summary.md")
         email.send(
             to=to,
             subject=subject,
@@ -105,7 +105,7 @@ def prepare_and_send_activity_digest_email(to, subject, slack_messages):
         )
         logger.info(f"Sent activity digest email to {to}")
     else:
-        logger.info('No email generated/sent, as there are no new activities.')
+        logger.info("No email generated/sent, as there are no new activities.")
 
 
 class Command(BaseCommand):
@@ -120,14 +120,14 @@ class Command(BaseCommand):
     to that fund or lab to that email.
     """
 
-    help = 'Sent email digest of all unsent activities (last 7 days) in hypha'
+    help = "Sent email digest of all unsent activities (last 7 days) in hypha"
     IGNORE_DAYS_BEFORE = 7
 
     def handle(self, *args, **options):
         slack_messages = (
             Message.objects.filter(type=SlackAdapter.adapter_type)
-            .select_related('event')
-            .order_by('-event__when')
+            .select_related("event")
+            .order_by("-event__when")
             .filter(sent_in_email_digest=False)
             .filter(
                 event__when__gte=(
@@ -143,7 +143,7 @@ class Command(BaseCommand):
         if settings.ACTIVITY_DIGEST_RECIPIENT_EMAILS:
             prepare_and_send_activity_digest_email(
                 to=settings.ACTIVITY_DIGEST_RECIPIENT_EMAILS,
-                subject=settings.EMAIL_SUBJECT_PREFIX + _('Summary of all activities'),
+                subject=settings.EMAIL_SUBJECT_PREFIX + _("Summary of all activities"),
                 slack_messages=slack_messages,
             )
         else:
@@ -154,12 +154,12 @@ class Command(BaseCommand):
         # Send digest of for funds that has "activity_digest_recipient_emails" set.
         for _id, messages in groupby_fund_lab_id(slack_messages):
             emails = extract_fund_or_lab_property(
-                messages[0].event, 'activity_digest_recipient_emails'
+                messages[0].event, "activity_digest_recipient_emails"
             )
             if not emails:
                 continue
-            title = extract_fund_or_lab_property(messages[0].event, 'title')
-            subject = settings.EMAIL_SUBJECT_PREFIX + _('Activities Summary - ') + title
+            title = extract_fund_or_lab_property(messages[0].event, "title")
+            subject = settings.EMAIL_SUBJECT_PREFIX + _("Activities Summary - ") + title
 
             prepare_and_send_activity_digest_email(
                 subject=subject,
diff --git a/hypha/apply/activity/messaging.py b/hypha/apply/activity/messaging.py
index 8856193aae05c119d2e3c6ccad4c3f86bf8f58cc..31e69cf7a0e90430b054ffdbbe4c62b714b3f567 100644
--- a/hypha/apply/activity/messaging.py
+++ b/hypha/apply/activity/messaging.py
@@ -18,14 +18,7 @@ class MessengerBackend:
         return self.send(*args, related=related, **kwargs)
 
     def send(
-        self,
-        message_type,
-        request,
-        user,
-        related,
-        source=None,
-        sources=None,
-        **kwargs
+        self, message_type, request, user, related, source=None, sources=None, **kwargs
     ):
         from .models import Event
 
diff --git a/hypha/apply/activity/migrations/0001_initial.py b/hypha/apply/activity/migrations/0001_initial.py
index 123a96d01492ebf7d8bbf918c3307736312fbf54..43dd338bb26f104ed2c059997985c16914daff33 100644
--- a/hypha/apply/activity/migrations/0001_initial.py
+++ b/hypha/apply/activity/migrations/0001_initial.py
@@ -8,27 +8,47 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('funds', '0025_update_with_file_blocks'),
+        ("funds", "0025_update_with_file_blocks"),
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Activity',
+            name="Activity",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('timestamp', models.DateTimeField(auto_now_add=True)),
-                ('message', models.TextField()),
-                ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationSubmission', related_name='activities')),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("timestamp", models.DateTimeField(auto_now_add=True)),
+                ("message", models.TextField()),
+                (
+                    "submission",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationSubmission",
+                        related_name="activities",
+                    ),
+                ),
+                (
+                    "user",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
             options={
-                'base_manager_name': 'objects',
-                'ordering': ['-timestamp'],
+                "base_manager_name": "objects",
+                "ordering": ["-timestamp"],
             },
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0002_activity_type.py b/hypha/apply/activity/migrations/0002_activity_type.py
index bc7ca42a580b691ee57c12663478579882542ebf..482a3550cdac56701181918ece14545f9624002b 100644
--- a/hypha/apply/activity/migrations/0002_activity_type.py
+++ b/hypha/apply/activity/migrations/0002_activity_type.py
@@ -6,16 +6,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0001_initial'),
+        ("activity", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='activity',
-            name='type',
-            field=models.CharField(choices=[('comment', 'Comment'), ('action', 'Action')], default='comment', max_length=30),
+            model_name="activity",
+            name="type",
+            field=models.CharField(
+                choices=[("comment", "Comment"), ("action", "Action")],
+                default="comment",
+                max_length=30,
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0003_activity_visibility.py b/hypha/apply/activity/migrations/0003_activity_visibility.py
index 5c0effb9789b83011b033551ab12fbd6f1e08a51..8f948615e4a7d23b1a3fb9b8f0ebddcc1f07bc09 100644
--- a/hypha/apply/activity/migrations/0003_activity_visibility.py
+++ b/hypha/apply/activity/migrations/0003_activity_visibility.py
@@ -6,15 +6,22 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0002_activity_type'),
+        ("activity", "0002_activity_type"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='activity',
-            name='visibility',
-            field=models.CharField(choices=[('public', 'Public'), ('reviewers', 'Reviewers'), ('internal', 'Internal')], default='public', max_length=10),
+            model_name="activity",
+            name="visibility",
+            field=models.CharField(
+                choices=[
+                    ("public", "Public"),
+                    ("reviewers", "Reviewers"),
+                    ("internal", "Internal"),
+                ],
+                default="public",
+                max_length=10,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0004_update_on_delete_django2.py b/hypha/apply/activity/migrations/0004_update_on_delete_django2.py
index 337cb2be284643dc703b0ba7e10c8b241fb53dea..4a802d4fb598be84fbd7385371492a1c30558cf5 100644
--- a/hypha/apply/activity/migrations/0004_update_on_delete_django2.py
+++ b/hypha/apply/activity/migrations/0004_update_on_delete_django2.py
@@ -6,15 +6,16 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0003_activity_visibility'),
+        ("activity", "0003_activity_visibility"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='activity',
-            name='user',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
+            model_name="activity",
+            name="user",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0005_event.py b/hypha/apply/activity/migrations/0005_event.py
index 635b8afef5ec4d6eea269dfc57432a461552773f..bff30aa4e5196cdc73d2feae8bfce216b9fbcfe5 100644
--- a/hypha/apply/activity/migrations/0005_event.py
+++ b/hypha/apply/activity/migrations/0005_event.py
@@ -6,20 +6,59 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0004_update_on_delete_django2'),
+        ("activity", "0004_update_on_delete_django2"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Event',
+            name="Event",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('when', models.DateTimeField(auto_now_add=True)),
-                ('type', models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('NEW_SUBMISSION', 'New Submission'), ('TRANSITION', 'Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission')], max_length=50)),
-                ('by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
-                ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationSubmission', related_name='+')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("when", models.DateTimeField(auto_now_add=True)),
+                (
+                    "type",
+                    models.CharField(
+                        choices=[
+                            ("UPDATE_LEAD", "Update Lead"),
+                            ("EDIT", "Edit"),
+                            ("NEW_SUBMISSION", "New Submission"),
+                            ("TRANSITION", "Transition"),
+                            ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                            ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                            ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                            ("READY_FOR_REVIEW", "Ready For Review"),
+                            ("NEW_REVIEW", "New Review"),
+                            ("COMMENT", "Comment"),
+                            ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                            ("OPENED_SEALED", "Opened Sealed Submission"),
+                        ],
+                        max_length=50,
+                    ),
+                ),
+                (
+                    "by",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "submission",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationSubmission",
+                        related_name="+",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0006_message.py b/hypha/apply/activity/migrations/0006_message.py
index a55cde2ee8a06bc60d5cc0942702881cb8f05922..e6a2ef6e8f00c20f69e2bd94224f469c2b5a4e4f 100644
--- a/hypha/apply/activity/migrations/0006_message.py
+++ b/hypha/apply/activity/migrations/0006_message.py
@@ -5,20 +5,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0005_event'),
+        ("activity", "0005_event"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Message',
+            name="Message",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('type', models.CharField(max_length=15)),
-                ('content', models.TextField()),
-                ('recipient', models.CharField(max_length=250)),
-                ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='activity.Event')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("type", models.CharField(max_length=15)),
+                ("content", models.TextField()),
+                ("recipient", models.CharField(max_length=250)),
+                (
+                    "event",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE, to="activity.Event"
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0007_message_status.py b/hypha/apply/activity/migrations/0007_message_status.py
index 64789fcf701a87958f36728fd6e26b2a7462bb49..aac58d15cf5424211820f86ff7288f5258ed81d1 100644
--- a/hypha/apply/activity/migrations/0007_message_status.py
+++ b/hypha/apply/activity/migrations/0007_message_status.py
@@ -4,16 +4,15 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0006_message'),
+        ("activity", "0006_message"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='message',
-            name='status',
-            field=models.TextField(default=''),
+            model_name="message",
+            name="status",
+            field=models.TextField(default=""),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0008_message_external_id.py b/hypha/apply/activity/migrations/0008_message_external_id.py
index 6e2d8d540611072566a8f401cb26c8c6d1be7a44..1c954de10bb97243fe51e4de669efd2a139ce8f9 100644
--- a/hypha/apply/activity/migrations/0008_message_external_id.py
+++ b/hypha/apply/activity/migrations/0008_message_external_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0007_message_status'),
+        ("activity", "0007_message_status"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='message',
-            name='external_id',
+            model_name="message",
+            name="external_id",
             field=models.CharField(blank=True, max_length=75, null=True),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0009_add_private_option.py b/hypha/apply/activity/migrations/0009_add_private_option.py
index 0f9a34f8934afaa82b123354936fc6490920edf6..826c03ee63c1870eeff243f1124a31065ce582da 100644
--- a/hypha/apply/activity/migrations/0009_add_private_option.py
+++ b/hypha/apply/activity/migrations/0009_add_private_option.py
@@ -4,15 +4,23 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0008_message_external_id'),
+        ("activity", "0008_message_external_id"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='activity',
-            name='visibility',
-            field=models.CharField(choices=[('private', 'Private'), ('reviewers', 'Reviewers and Staff'), ('internal', 'Internal'), ('public', 'Public')], default='public', max_length=10),
+            model_name="activity",
+            name="visibility",
+            field=models.CharField(
+                choices=[
+                    ("private", "Private"),
+                    ("reviewers", "Reviewers and Staff"),
+                    ("internal", "Internal"),
+                    ("public", "Public"),
+                ],
+                default="public",
+                max_length=10,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0011_add_new_event_type.py b/hypha/apply/activity/migrations/0011_add_new_event_type.py
index f423168963ce86288208efae163a005ccf4edc57..79dac1c7d11a5ee6935b148d4e0df57a37dea9fb 100644
--- a/hypha/apply/activity/migrations/0011_add_new_event_type.py
+++ b/hypha/apply/activity/migrations/0011_add_new_event_type.py
@@ -4,15 +4,31 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0009_add_private_option'),
+        ("activity", "0009_add_private_option"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('TRANSITION', 'Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("TRANSITION", "Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0012_add_generic_relation_to_activity.py b/hypha/apply/activity/migrations/0012_add_generic_relation_to_activity.py
index be9a21f8ab9e406dc485c86033e304fee85cdeb2..0b8e52e1fa52b7f7962bf3e1a820dc1102d319dc 100644
--- a/hypha/apply/activity/migrations/0012_add_generic_relation_to_activity.py
+++ b/hypha/apply/activity/migrations/0012_add_generic_relation_to_activity.py
@@ -5,21 +5,25 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contenttypes', '0002_remove_content_type_name'),
-        ('activity', '0011_add_new_event_type'),
+        ("contenttypes", "0002_remove_content_type_name"),
+        ("activity", "0011_add_new_event_type"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='activity',
-            name='content_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
+            model_name="activity",
+            name="content_type",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                to="contenttypes.ContentType",
+            ),
         ),
         migrations.AddField(
-            model_name='activity',
-            name='object_id',
+            model_name="activity",
+            name="object_id",
             field=models.PositiveIntegerField(blank=True, null=True),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0013_add_new_event_type_screening.py b/hypha/apply/activity/migrations/0013_add_new_event_type_screening.py
index 065b7afa51b2253c7411086c11f82d114c81c1e4..2040f65307f9ddf1412da4e49ed1b389a58b2ba1 100644
--- a/hypha/apply/activity/migrations/0013_add_new_event_type_screening.py
+++ b/hypha/apply/activity/migrations/0013_add_new_event_type_screening.py
@@ -4,15 +4,32 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0012_add_generic_relation_to_activity'),
+        ("activity", "0012_add_generic_relation_to_activity"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0014_add_batch_reviewer_message.py b/hypha/apply/activity/migrations/0014_add_batch_reviewer_message.py
index 261fc13324a2ad246101a82ddc10b9568855dc5f..c8e6ac98fedc5f8ceb1bd11fce33ecac24542807 100644
--- a/hypha/apply/activity/migrations/0014_add_batch_reviewer_message.py
+++ b/hypha/apply/activity/migrations/0014_add_batch_reviewer_message.py
@@ -4,15 +4,33 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0013_add_new_event_type_screening'),
+        ("activity", "0013_add_new_event_type_screening"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0015_add_batch_transition.py b/hypha/apply/activity/migrations/0015_add_batch_transition.py
index 539c08b218900e4610fe896aa84dcab174319b5c..c533cd7d8c5173e9fe7854d6bd8a07bbe43e2fc9 100644
--- a/hypha/apply/activity/migrations/0015_add_batch_transition.py
+++ b/hypha/apply/activity/migrations/0015_add_batch_transition.py
@@ -4,15 +4,34 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0014_add_batch_reviewer_message'),
+        ("activity", "0014_add_batch_reviewer_message"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0016_add_batch_ready.py b/hypha/apply/activity/migrations/0016_add_batch_ready.py
index 558e135df3df7c0eec8526e767c9ebf64f8854d6..d9f555aa2fb28229ae27d9297178561a8b2730c9 100644
--- a/hypha/apply/activity/migrations/0016_add_batch_ready.py
+++ b/hypha/apply/activity/migrations/0016_add_batch_ready.py
@@ -4,15 +4,35 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0015_add_batch_transition'),
+        ("activity", "0015_add_batch_transition"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0017_add_review_opinion.py b/hypha/apply/activity/migrations/0017_add_review_opinion.py
index c59a1458a577d05df0686a5b52dd5d9cfbb954c7..0c14e54488e6814fe1848b9cb749ae9648d9c0b2 100644
--- a/hypha/apply/activity/migrations/0017_add_review_opinion.py
+++ b/hypha/apply/activity/migrations/0017_add_review_opinion.py
@@ -4,15 +4,36 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0016_add_batch_ready'),
+        ("activity", "0016_add_batch_ready"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0018_add_batch_determine.py b/hypha/apply/activity/migrations/0018_add_batch_determine.py
index b6b3f9f1a8c0d34f2728bbd350d3e6e51d5004c8..1bca18d77445e78e86b9dffd9d88b08d8159d3ac 100644
--- a/hypha/apply/activity/migrations/0018_add_batch_determine.py
+++ b/hypha/apply/activity/migrations/0018_add_batch_determine.py
@@ -2,15 +2,37 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0017_add_review_opinion'),
+        ("activity", "0017_add_review_opinion"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0019_partner_field_event.py b/hypha/apply/activity/migrations/0019_partner_field_event.py
index 65dd47e142ac55ab9038d8e44ca14c9cb1c6ec01..6a8944d737a858e27acfdc1b2e1209677504ef3b 100644
--- a/hypha/apply/activity/migrations/0019_partner_field_event.py
+++ b/hypha/apply/activity/migrations/0019_partner_field_event.py
@@ -4,15 +4,38 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0018_add_batch_determine'),
+        ("activity", "0018_add_batch_determine"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0020_add_delete_event.py b/hypha/apply/activity/migrations/0020_add_delete_event.py
index 3dcc5648955156d954541c70e6d6db4e801cf50d..2539f8dcf12d904d2016e2c67ae642f03c20d596 100644
--- a/hypha/apply/activity/migrations/0020_add_delete_event.py
+++ b/hypha/apply/activity/migrations/0020_add_delete_event.py
@@ -4,15 +4,39 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0019_partner_field_event'),
+        ("activity", "0019_partner_field_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0021_add_review_delete_event.py b/hypha/apply/activity/migrations/0021_add_review_delete_event.py
index d549e1cd660fd78dda514f9bef037ad5fd335f7d..e5ce0fd188b9a08e382185c391b48c655c7510e9 100644
--- a/hypha/apply/activity/migrations/0021_add_review_delete_event.py
+++ b/hypha/apply/activity/migrations/0021_add_review_delete_event.py
@@ -4,15 +4,40 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0020_add_delete_event'),
+        ("activity", "0020_add_delete_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0022_add_versioning_to_comments.py b/hypha/apply/activity/migrations/0022_add_versioning_to_comments.py
index 10034b8d281f0e15ab24d0a15c7c44ce5499551d..4c27f665b34de35090ed893cda142f5d91c23345 100644
--- a/hypha/apply/activity/migrations/0022_add_versioning_to_comments.py
+++ b/hypha/apply/activity/migrations/0022_add_versioning_to_comments.py
@@ -5,30 +5,33 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0021_add_review_delete_event'),
+        ("activity", "0021_add_review_delete_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='activity',
-            name='timestamp',
+            model_name="activity",
+            name="timestamp",
             field=models.DateTimeField(),
         ),
         migrations.AddField(
-            model_name='activity',
-            name='current',
+            model_name="activity",
+            name="current",
             field=models.BooleanField(default=True),
         ),
         migrations.AddField(
-            model_name='activity',
-            name='edited',
+            model_name="activity",
+            name="edited",
             field=models.DateTimeField(default=None, null=True),
         ),
         migrations.AddField(
-            model_name='activity',
-            name='previous',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='activity.Activity'),
+            model_name="activity",
+            name="previous",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                to="activity.Activity",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0023_notify_partners.py b/hypha/apply/activity/migrations/0023_notify_partners.py
index 097c6f648a2cff56873bd0488fa8213e55019ad4..a300b6f0debe4fd86c44a985b331ee5f44130d49 100644
--- a/hypha/apply/activity/migrations/0023_notify_partners.py
+++ b/hypha/apply/activity/migrations/0023_notify_partners.py
@@ -4,15 +4,41 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0022_add_versioning_to_comments'),
+        ("activity", "0022_add_versioning_to_comments"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0024_add_review_edit_event.py b/hypha/apply/activity/migrations/0024_add_review_edit_event.py
index e1387495ab149a6d52d161c1b880e3b4bda4dadf..605a8ef83f82b68215c3f0af4ef78dbdd7c82f8f 100644
--- a/hypha/apply/activity/migrations/0024_add_review_edit_event.py
+++ b/hypha/apply/activity/migrations/0024_add_review_edit_event.py
@@ -4,15 +4,42 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0023_notify_partners'),
+        ("activity", "0023_notify_partners"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('EDIT_REVIEW', 'Edit Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0025_add_batch_lead_event.py b/hypha/apply/activity/migrations/0025_add_batch_lead_event.py
index 2e6c5ce399d35306efc4af6a1fbc8f4fc1c88dfe..19ba5158c1ad84b57580ce0e72765d498af6358e 100644
--- a/hypha/apply/activity/migrations/0025_add_batch_lead_event.py
+++ b/hypha/apply/activity/migrations/0025_add_batch_lead_event.py
@@ -4,15 +4,43 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0024_add_review_edit_event'),
+        ("activity", "0024_add_review_edit_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('EDIT_REVIEW', 'Edit Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0026_add_created_project_event.py b/hypha/apply/activity/migrations/0026_add_created_project_event.py
index 05053e4d20eb47adac7592943079fef55e4d11eb..815adbba276f92462de6cc96a61e2006b5b8e496 100644
--- a/hypha/apply/activity/migrations/0026_add_created_project_event.py
+++ b/hypha/apply/activity/migrations/0026_add_created_project_event.py
@@ -4,15 +4,44 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0025_add_batch_lead_event'),
+        ("activity", "0025_add_batch_lead_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('EDIT_REVIEW', 'Edit Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0026_update_visibility_options.py b/hypha/apply/activity/migrations/0026_update_visibility_options.py
index 895ec389af9bd6fec0c34466e56da20cdfb76f43..7059cfc8d0342894084e0f729e7c6653939f1416 100644
--- a/hypha/apply/activity/migrations/0026_update_visibility_options.py
+++ b/hypha/apply/activity/migrations/0026_update_visibility_options.py
@@ -6,16 +6,16 @@ from hypha.apply.activity.models import COMMENT, APPLICANT, TEAM, ALL
 
 
 def update_visibility_options(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
+    Activity = apps.get_model("activity", "Activity")
     for comment in Activity.objects.filter(type=COMMENT):
         updated = False
-        if comment.visibility == 'private':
+        if comment.visibility == "private":
             comment.visibility = APPLICANT
             updated = True
-        elif comment.visibility == 'internal':
+        elif comment.visibility == "internal":
             comment.visibility = TEAM
             updated = True
-        elif comment.visibility == 'public':
+        elif comment.visibility == "public":
             comment.visibility = ALL
             updated = True
 
@@ -24,16 +24,25 @@ def update_visibility_options(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0025_add_batch_lead_event'),
+        ("activity", "0025_add_batch_lead_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='activity',
-            name='visibility',
-            field=models.CharField(choices=[('applicant', 'Applicant(s)'), ('team', 'Team'), ('reviewers', 'Reviewers'), ('partners', 'Partners'), ('all', 'All')], default='applicant', max_length=30),
+            model_name="activity",
+            name="visibility",
+            field=models.CharField(
+                choices=[
+                    ("applicant", "Applicant(s)"),
+                    ("team", "Team"),
+                    ("reviewers", "Reviewers"),
+                    ("partners", "Partners"),
+                    ("all", "All"),
+                ],
+                default="applicant",
+                max_length=30,
+            ),
         ),
-        migrations.RunPython(update_visibility_options, migrations.RunPython.noop)
+        migrations.RunPython(update_visibility_options, migrations.RunPython.noop),
     ]
diff --git a/hypha/apply/activity/migrations/0027_add_update_project_lead.py b/hypha/apply/activity/migrations/0027_add_update_project_lead.py
index e10f100e188fadfe2c0e0a3cd70c79f1574a2427..13d0ac1fc8292350e6220a00d197f8ccb3f169be 100644
--- a/hypha/apply/activity/migrations/0027_add_update_project_lead.py
+++ b/hypha/apply/activity/migrations/0027_add_update_project_lead.py
@@ -4,15 +4,45 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0026_add_created_project_event'),
+        ("activity", "0026_add_created_project_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0027_update_visibility_options_2.py b/hypha/apply/activity/migrations/0027_update_visibility_options_2.py
index 3e2326065ace3e57be5197089215820160353e8d..8a951f167a01dcf2ca28badb1b32f9ccabe1aa45 100644
--- a/hypha/apply/activity/migrations/0027_update_visibility_options_2.py
+++ b/hypha/apply/activity/migrations/0027_update_visibility_options_2.py
@@ -6,13 +6,13 @@ from hypha.apply.activity.models import ACTION, TEAM, ALL
 
 
 def update_visibility_options(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
+    Activity = apps.get_model("activity", "Activity")
     for activity in Activity.objects.filter(type=ACTION):
         updated = False
-        if activity.visibility == 'public':
+        if activity.visibility == "public":
             activity.visibility = ALL
             updated = True
-        elif activity.visibility == 'internal':
+        elif activity.visibility == "internal":
             activity.visibility = TEAM
             updated = True
 
@@ -21,9 +21,8 @@ def update_visibility_options(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0026_update_visibility_options'),
+        ("activity", "0026_update_visibility_options"),
     ]
 
     operations = [
diff --git a/hypha/apply/activity/migrations/0028_add_new_generic_relation.py b/hypha/apply/activity/migrations/0028_add_new_generic_relation.py
index 545a19f6e63d9c25da3d839fffa4021b0d200f4f..6cdab5c02d53ef0720d738c4d7a1f12d985dbe7a 100644
--- a/hypha/apply/activity/migrations/0028_add_new_generic_relation.py
+++ b/hypha/apply/activity/migrations/0028_add_new_generic_relation.py
@@ -5,44 +5,60 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contenttypes', '0002_remove_content_type_name'),
-        ('activity', '0027_add_update_project_lead'),
+        ("contenttypes", "0002_remove_content_type_name"),
+        ("activity", "0027_add_update_project_lead"),
     ]
 
     operations = [
         # Updates to the existing GenericForeignKey to related objects
         migrations.RenameField(
-            model_name='activity',
-            old_name='object_id',
-            new_name='related_object_id',
+            model_name="activity",
+            old_name="object_id",
+            new_name="related_object_id",
         ),
         migrations.RenameField(
-            model_name='activity',
-            old_name='content_type',
-            new_name='related_content_type',
+            model_name="activity",
+            old_name="content_type",
+            new_name="related_content_type",
         ),
         migrations.AlterField(
-            model_name='activity',
-            name='related_content_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='activity_related', to='contenttypes.ContentType'),
+            model_name="activity",
+            name="related_content_type",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="activity_related",
+                to="contenttypes.ContentType",
+            ),
         ),
         # Add the new generic foreign key
         migrations.AddField(
-            model_name='activity',
-            name='source_content_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='activity_source', to='contenttypes.ContentType'),
+            model_name="activity",
+            name="source_content_type",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="activity_source",
+                to="contenttypes.ContentType",
+            ),
         ),
         migrations.AddField(
-            model_name='activity',
-            name='source_object_id',
+            model_name="activity",
+            name="source_object_id",
             field=models.PositiveIntegerField(blank=True, null=True),
         ),
         # Make the submission field nullable
         migrations.AlterField(
-            model_name='activity',
-            name='submission',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationSubmission', related_name='activities', null=True)
+            model_name="activity",
+            name="submission",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                to="funds.ApplicationSubmission",
+                related_name="activities",
+                null=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0028_migrate_messages_with_visibility.py b/hypha/apply/activity/migrations/0028_migrate_messages_with_visibility.py
index 63827c9aa0447079ce4ecbce105f2d6f8ba402ae..dccf979b35b7b083219256b48d0848e493102730 100644
--- a/hypha/apply/activity/migrations/0028_migrate_messages_with_visibility.py
+++ b/hypha/apply/activity/migrations/0028_migrate_messages_with_visibility.py
@@ -7,24 +7,24 @@ from hypha.apply.activity.models import ACTION, TEAM, ALL
 
 
 def forward_visibility_options(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
+    Activity = apps.get_model("activity", "Activity")
     for activity in Activity.objects.filter(type=ACTION):
         try:
             message = json.loads(activity.message)
         except json.JSONDecodeError:
             continue
 
-        if 'internal' in message and 'public' in message:
+        if "internal" in message and "public" in message:
             new_message = {
-                TEAM: message['internal'],
-                ALL: message['public'],
+                TEAM: message["internal"],
+                ALL: message["public"],
             }
             activity.message = json.dumps(new_message)
             activity.save()
 
 
 def backward_visibility_options(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
+    Activity = apps.get_model("activity", "Activity")
     for activity in Activity.objects.filter(type=ACTION):
         try:
             message = json.loads(activity.message)
@@ -32,17 +32,16 @@ def backward_visibility_options(apps, schema_editor):
             continue
 
         new_message = {
-            'internal': message[TEAM],
-            'public': message[ALL],
+            "internal": message[TEAM],
+            "public": message[ALL],
         }
         activity.message = json.dumps(new_message)
         activity.save()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0027_update_visibility_options_2'),
+        ("activity", "0027_update_visibility_options_2"),
     ]
 
     operations = [
diff --git a/hypha/apply/activity/migrations/0029_migrate_old_submission_relation.py b/hypha/apply/activity/migrations/0029_migrate_old_submission_relation.py
index 1c487b0f893f8f2f4cdc98e8592bea273cb2890d..c0e1971e6642cd559c7e0d9fe0f3bc797114f7d9 100644
--- a/hypha/apply/activity/migrations/0029_migrate_old_submission_relation.py
+++ b/hypha/apply/activity/migrations/0029_migrate_old_submission_relation.py
@@ -5,29 +5,28 @@ from django.db.models import F
 
 
 def submission_to_source(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
+    Activity = apps.get_model("activity", "Activity")
     if Activity.objects.exists():
-        ContentType = apps.get_model('contenttypes', 'ContentType')
-        content_type = ContentType.objects.get(model='applicationsubmission', app_label='funds')
+        ContentType = apps.get_model("contenttypes", "ContentType")
+        content_type = ContentType.objects.get(
+            model="applicationsubmission", app_label="funds"
+        )
         Activity.objects.update(
-            source_object_id=F('submission_id'),
+            source_object_id=F("submission_id"),
             source_content_type=content_type,
         )
 
 
 def source_to_submission(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
-    Activity.objects.update(submission_id=F('source_object_id'))
+    Activity = apps.get_model("activity", "Activity")
+    Activity.objects.update(submission_id=F("source_object_id"))
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0028_add_new_generic_relation'),
-        ('funds', '0065_applicationsubmission_meta_categories'),
-        ('contenttypes', '0002_remove_content_type_name'),
+        ("activity", "0028_add_new_generic_relation"),
+        ("funds", "0065_applicationsubmission_meta_categories"),
+        ("contenttypes", "0002_remove_content_type_name"),
     ]
 
-    operations = [
-        migrations.RunPython(submission_to_source, source_to_submission)
-    ]
+    operations = [migrations.RunPython(submission_to_source, source_to_submission)]
diff --git a/hypha/apply/activity/migrations/0030_remove_old_relation.py b/hypha/apply/activity/migrations/0030_remove_old_relation.py
index b5242315763380709c4e22a09c04c7fcbe7ed47b..9666d78a9ed3a0769f16d2d548785e7fad430265 100644
--- a/hypha/apply/activity/migrations/0030_remove_old_relation.py
+++ b/hypha/apply/activity/migrations/0030_remove_old_relation.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0029_migrate_old_submission_relation'),
+        ("activity", "0029_migrate_old_submission_relation"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='activity',
-            name='submission',
+            model_name="activity",
+            name="submission",
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0031_add_generic_fk_to_event.py b/hypha/apply/activity/migrations/0031_add_generic_fk_to_event.py
index f67b8a245e10d3dc927a2def3ca9ab80182200d9..abdcb8a6a93d7839260d35ce07ff2f745ea57ea3 100644
--- a/hypha/apply/activity/migrations/0031_add_generic_fk_to_event.py
+++ b/hypha/apply/activity/migrations/0031_add_generic_fk_to_event.py
@@ -5,26 +5,35 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('contenttypes', '0002_remove_content_type_name'),
-        ('activity', '0030_remove_old_relation'),
+        ("contenttypes", "0002_remove_content_type_name"),
+        ("activity", "0030_remove_old_relation"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='submission',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='funds.ApplicationSubmission'),
+            model_name="event",
+            name="submission",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="funds.ApplicationSubmission",
+            ),
         ),
         migrations.AddField(
-            model_name='event',
-            name='content_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
+            model_name="event",
+            name="content_type",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                to="contenttypes.ContentType",
+            ),
         ),
         migrations.AddField(
-            model_name='event',
-            name='object_id',
+            model_name="event",
+            name="object_id",
             field=models.PositiveIntegerField(blank=True, null=True),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0032_migrate_submission_to_generic_event.py b/hypha/apply/activity/migrations/0032_migrate_submission_to_generic_event.py
index 137d80d9c0c49a3955ad6bebc1242c2dc2d6c8e3..2e9c37311637b91a76329c340a7de3589330e603 100644
--- a/hypha/apply/activity/migrations/0032_migrate_submission_to_generic_event.py
+++ b/hypha/apply/activity/migrations/0032_migrate_submission_to_generic_event.py
@@ -5,29 +5,28 @@ from django.db.models import F
 
 
 def submission_to_source(apps, schema_editor):
-    Event = apps.get_model('activity', 'Event')
+    Event = apps.get_model("activity", "Event")
     if Event.objects.exists():
-        ContentType = apps.get_model('contenttypes', 'ContentType')
-        content_type = ContentType.objects.get(model='applicationsubmission', app_label='funds')
+        ContentType = apps.get_model("contenttypes", "ContentType")
+        content_type = ContentType.objects.get(
+            model="applicationsubmission", app_label="funds"
+        )
         Event.objects.update(
-            object_id=F('submission_id'),
+            object_id=F("submission_id"),
             content_type=content_type,
         )
 
 
 def source_to_submission(apps, schema_editor):
-    Event = apps.get_model('activity', 'Event')
-    Event.objects.update(submission_id=F('object_id'))
+    Event = apps.get_model("activity", "Event")
+    Event.objects.update(submission_id=F("object_id"))
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0031_add_generic_fk_to_event'),
-        ('funds', '0065_applicationsubmission_meta_categories'),
-        ('contenttypes', '0002_remove_content_type_name'),
+        ("activity", "0031_add_generic_fk_to_event"),
+        ("funds", "0065_applicationsubmission_meta_categories"),
+        ("contenttypes", "0002_remove_content_type_name"),
     ]
 
-    operations = [
-        migrations.RunPython(submission_to_source, source_to_submission)
-    ]
+    operations = [migrations.RunPython(submission_to_source, source_to_submission)]
diff --git a/hypha/apply/activity/migrations/0033_remove_old_submission_fk_event.py b/hypha/apply/activity/migrations/0033_remove_old_submission_fk_event.py
index 6e76833da651d60e66a2f5d0a57061c9955c58c2..11361bb14602e1a8b5852731210d516aba49b251 100644
--- a/hypha/apply/activity/migrations/0033_remove_old_submission_fk_event.py
+++ b/hypha/apply/activity/migrations/0033_remove_old_submission_fk_event.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0032_migrate_submission_to_generic_event'),
+        ("activity", "0032_migrate_submission_to_generic_event"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='event',
-            name='submission',
+            model_name="event",
+            name="submission",
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0034_add_send_for_approval.py b/hypha/apply/activity/migrations/0034_add_send_for_approval.py
index 4dcb14b42ac373f6837dca31c7a84ec74b1ef01d..ad732cc00904bfffda0160e01b91739e68107972 100644
--- a/hypha/apply/activity/migrations/0034_add_send_for_approval.py
+++ b/hypha/apply/activity/migrations/0034_add_send_for_approval.py
@@ -4,15 +4,46 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0033_remove_old_submission_fk_event'),
+        ("activity", "0033_remove_old_submission_fk_event"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0035_add_approve_project.py b/hypha/apply/activity/migrations/0035_add_approve_project.py
index c1ebdd9e7be7c7f4a635396b69c379c35ee1e891..26e17a34eb8758b46ad2d2a34dc0bb02570183f2 100644
--- a/hypha/apply/activity/migrations/0035_add_approve_project.py
+++ b/hypha/apply/activity/migrations/0035_add_approve_project.py
@@ -4,15 +4,47 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0034_add_send_for_approval'),
+        ("activity", "0034_add_send_for_approval"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0036_add_reject_project.py b/hypha/apply/activity/migrations/0036_add_reject_project.py
index 640d50dd02f33fe548e24d29d49056766fb341fe..5621e86d250245823b91c9a0589aae6761187226 100644
--- a/hypha/apply/activity/migrations/0036_add_reject_project.py
+++ b/hypha/apply/activity/migrations/0036_add_reject_project.py
@@ -4,15 +4,48 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0035_add_approve_project'),
+        ("activity", "0035_add_approve_project"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0037_add_upload_document.py b/hypha/apply/activity/migrations/0037_add_upload_document.py
index 6220a12883f325980e280180b82d442270229fdb..5eace58da072a439326609683c90f5bdaaef17ee 100644
--- a/hypha/apply/activity/migrations/0037_add_upload_document.py
+++ b/hypha/apply/activity/migrations/0037_add_upload_document.py
@@ -4,15 +4,49 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0036_add_reject_project'),
+        ("activity", "0036_add_reject_project"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REJECT_PROJECT', 'Project was Rejected'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REJECT_PROJECT", "Project was Rejected"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0038_auto_20190808_1142.py b/hypha/apply/activity/migrations/0038_auto_20190808_1142.py
index 47109db845f978f04c7889ca37c1e290ea0f4c15..40a59ac61aa27207dac386bc8e279743114cff77 100644
--- a/hypha/apply/activity/migrations/0038_auto_20190808_1142.py
+++ b/hypha/apply/activity/migrations/0038_auto_20190808_1142.py
@@ -4,15 +4,49 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0037_add_upload_document'),
+        ("activity", "0037_add_upload_document"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0039_add_remove_document.py b/hypha/apply/activity/migrations/0039_add_remove_document.py
index c3014c711c3e30a5e0cdb3b7c8cc87085c462d49..f23fbfebb9497b118bfcc3b9311ab9f4d066c9bc 100644
--- a/hypha/apply/activity/migrations/0039_add_remove_document.py
+++ b/hypha/apply/activity/migrations/0039_add_remove_document.py
@@ -4,15 +4,50 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0038_auto_20190808_1142'),
+        ("activity", "0038_auto_20190808_1142"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0040_merge_activity_update_and_generic_relations.py b/hypha/apply/activity/migrations/0040_merge_activity_update_and_generic_relations.py
index e9ba43047688e6c900a77cae589184bfba6f3a22..50a68480ce6b5cce66054f0671b6119d3f68ab98 100644
--- a/hypha/apply/activity/migrations/0040_merge_activity_update_and_generic_relations.py
+++ b/hypha/apply/activity/migrations/0040_merge_activity_update_and_generic_relations.py
@@ -4,11 +4,9 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0028_migrate_messages_with_visibility'),
-        ('activity', '0039_add_remove_document'),
+        ("activity", "0028_migrate_messages_with_visibility"),
+        ("activity", "0039_add_remove_document"),
     ]
 
-    operations = [
-    ]
+    operations = []
diff --git a/hypha/apply/activity/migrations/0041_add_upload_contract.py b/hypha/apply/activity/migrations/0041_add_upload_contract.py
index 6ff116ee9196e49d598ad9ad4c0971e8da0952ef..3c314d2c93cf0118b16c757ccdd064bd1e7e4d05 100644
--- a/hypha/apply/activity/migrations/0041_add_upload_contract.py
+++ b/hypha/apply/activity/migrations/0041_add_upload_contract.py
@@ -4,15 +4,51 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0040_merge_activity_update_and_generic_relations'),
+        ("activity", "0040_merge_activity_update_and_generic_relations"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0042_add_approve_contract.py b/hypha/apply/activity/migrations/0042_add_approve_contract.py
index 2eb0e19a20fa5ca4f24c581c04a303b635a26c19..a4270978e8eebcb2846f8ec992ea4a44c081b8f7 100644
--- a/hypha/apply/activity/migrations/0042_add_approve_contract.py
+++ b/hypha/apply/activity/migrations/0042_add_approve_contract.py
@@ -4,15 +4,52 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0041_add_upload_contract'),
+        ("activity", "0041_add_upload_contract"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0043_add_request_payment.py b/hypha/apply/activity/migrations/0043_add_request_payment.py
index 3544f9796c621640a424567e952b57e599c9c504..0bab69409326e6dadf6fbc2fa0066c2f73651094 100644
--- a/hypha/apply/activity/migrations/0043_add_request_payment.py
+++ b/hypha/apply/activity/migrations/0043_add_request_payment.py
@@ -4,15 +4,53 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0042_add_approve_contract'),
+        ("activity", "0042_add_approve_contract"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0044_add_update_payment_request_status.py b/hypha/apply/activity/migrations/0044_add_update_payment_request_status.py
index 22ebb62bf29a2f42465fdb3fe1889e82c37c806b..98effc877eb5d1790263f3f50b362852a6e99b9b 100644
--- a/hypha/apply/activity/migrations/0044_add_update_payment_request_status.py
+++ b/hypha/apply/activity/migrations/0044_add_update_payment_request_status.py
@@ -4,15 +4,54 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0043_add_request_payment'),
+        ("activity", "0043_add_request_payment"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0045_add_delete_payment_request.py b/hypha/apply/activity/migrations/0045_add_delete_payment_request.py
index 394919e34a3e6545257acfd4ffeee74a1283fdcd..3359567876b0b835a0e8ca596b64a3749fb1e828 100644
--- a/hypha/apply/activity/migrations/0045_add_delete_payment_request.py
+++ b/hypha/apply/activity/migrations/0045_add_delete_payment_request.py
@@ -4,15 +4,55 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0044_add_update_payment_request_status'),
+        ("activity", "0044_add_update_payment_request_status"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0046_add_sent_to_compliance.py b/hypha/apply/activity/migrations/0046_add_sent_to_compliance.py
index 3b9491d91dc38ab303436cbaf9f47c09b088501d..2bce1cbbf7b5b7a4719a2e071711ec0f8bc7e065 100644
--- a/hypha/apply/activity/migrations/0046_add_sent_to_compliance.py
+++ b/hypha/apply/activity/migrations/0046_add_sent_to_compliance.py
@@ -4,15 +4,56 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0045_add_delete_payment_request'),
+        ("activity", "0045_add_delete_payment_request"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0047_add_update_payment_request.py b/hypha/apply/activity/migrations/0047_add_update_payment_request.py
index 07e51482ea0d51f436c6d755b81dcf5e63449310..56897355571e8bda5c886a0cbda55e076b26eb67 100644
--- a/hypha/apply/activity/migrations/0047_add_update_payment_request.py
+++ b/hypha/apply/activity/migrations/0047_add_update_payment_request.py
@@ -4,15 +4,57 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0046_add_sent_to_compliance'),
+        ("activity", "0046_add_sent_to_compliance"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0048_add_project_transition.py b/hypha/apply/activity/migrations/0048_add_project_transition.py
index b576b1ed898cd36f307d48ee54be5225451e53da..2d671627814374a02bfdb3ae522e04be686fb71b 100644
--- a/hypha/apply/activity/migrations/0048_add_project_transition.py
+++ b/hypha/apply/activity/migrations/0048_add_project_transition.py
@@ -4,15 +4,58 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0047_add_update_payment_request'),
+        ("activity", "0047_add_update_payment_request"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0049_auto_20191112_1227.py b/hypha/apply/activity/migrations/0049_auto_20191112_1227.py
index a79cea17280b09635bf8065814ad359e3de3472d..b0fa092e50ccd612691d0c9f84d68697076fe690 100644
--- a/hypha/apply/activity/migrations/0049_auto_20191112_1227.py
+++ b/hypha/apply/activity/migrations/0049_auto_20191112_1227.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0048_add_project_transition'),
+        ("activity", "0048_add_project_transition"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='activity',
-            name='source_object_id',
+            model_name="activity",
+            name="source_object_id",
             field=models.PositiveIntegerField(blank=True, db_index=True, null=True),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0050_add_submit_report.py b/hypha/apply/activity/migrations/0050_add_submit_report.py
index 570a0e32ce1500f100c637294f1f60e126a8dc6f..d49201a9faf3d03052cd83bf38fc532e7833369c 100644
--- a/hypha/apply/activity/migrations/0050_add_submit_report.py
+++ b/hypha/apply/activity/migrations/0050_add_submit_report.py
@@ -4,15 +4,59 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0049_auto_20191112_1227'),
+        ("activity", "0049_auto_20191112_1227"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0051_add_report_skipping_activity.py b/hypha/apply/activity/migrations/0051_add_report_skipping_activity.py
index f410ec1db27371659722f6f4e1a1acfbce4759d8..0997d1e88b0fd87da7c893a407bbe79efbb8e37a 100644
--- a/hypha/apply/activity/migrations/0051_add_report_skipping_activity.py
+++ b/hypha/apply/activity/migrations/0051_add_report_skipping_activity.py
@@ -4,15 +4,60 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0050_add_submit_report'),
+        ("activity", "0050_add_submit_report"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0052_report_frequency_change.py b/hypha/apply/activity/migrations/0052_report_frequency_change.py
index e6db41b01524b9b90f92dfef51ccf72f896f1737..be013aaaf1833e02753e089d16a862bc6b6d82d3 100644
--- a/hypha/apply/activity/migrations/0052_report_frequency_change.py
+++ b/hypha/apply/activity/migrations/0052_report_frequency_change.py
@@ -4,15 +4,61 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0051_add_report_skipping_activity'),
+        ("activity", "0051_add_report_skipping_activity"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0053_nullable_by_report_notify.py b/hypha/apply/activity/migrations/0053_nullable_by_report_notify.py
index 5f4facc46b4c414e93c1110eff4f17060d8c23e7..b9d49a4131c317c6ea551fc52fec635ac52ca1aa 100644
--- a/hypha/apply/activity/migrations/0053_nullable_by_report_notify.py
+++ b/hypha/apply/activity/migrations/0053_nullable_by_report_notify.py
@@ -6,20 +6,71 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0052_report_frequency_change'),
+        ("activity", "0052_report_frequency_change"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='by',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
+            model_name="event",
+            name="by",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0054_add_create_reminder_delete_reminder_and_review_reminder.py b/hypha/apply/activity/migrations/0054_add_create_reminder_delete_reminder_and_review_reminder.py
index 34df18e2c618aab504d2a778a24ea5bde7b22c2c..893f9bcb952e0f5ded4aca9feee1677d181ce8d5 100644
--- a/hypha/apply/activity/migrations/0054_add_create_reminder_delete_reminder_and_review_reminder.py
+++ b/hypha/apply/activity/migrations/0054_add_create_reminder_delete_reminder_and_review_reminder.py
@@ -4,15 +4,65 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0053_nullable_by_report_notify'),
+        ("activity", "0053_nullable_by_report_notify"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0055_add_batch_delete_submission.py b/hypha/apply/activity/migrations/0055_add_batch_delete_submission.py
index fd10e524bced63fcd392f6fb7629e366e13bc7a4..29f250f0ed9d6679cd40ff7d3b83da8e6c788e0d 100644
--- a/hypha/apply/activity/migrations/0055_add_batch_delete_submission.py
+++ b/hypha/apply/activity/migrations/0055_add_batch_delete_submission.py
@@ -4,15 +4,66 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0054_add_create_reminder_delete_reminder_and_review_reminder'),
+        ("activity", "0054_add_create_reminder_delete_reminder_and_review_reminder"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0056_add_updated_vendor.py b/hypha/apply/activity/migrations/0056_add_updated_vendor.py
index f3c4416972b6f1a90e628f02d44b3b9fb6b5741a..0f35fe8c6ce1da3bed4d366690462a8ea8cce0e5 100644
--- a/hypha/apply/activity/migrations/0056_add_updated_vendor.py
+++ b/hypha/apply/activity/migrations/0056_add_updated_vendor.py
@@ -4,15 +4,67 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0055_add_batch_delete_submission'),
+        ("activity", "0055_add_batch_delete_submission"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Vendor'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Vendor"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0057_add_invoices.py b/hypha/apply/activity/migrations/0057_add_invoices.py
index ae053359206857af397190456b472e1d381ccfc4..f9c563bbe63702ec887b7aa33c6008eca677987b 100644
--- a/hypha/apply/activity/migrations/0057_add_invoices.py
+++ b/hypha/apply/activity/migrations/0057_add_invoices.py
@@ -4,15 +4,68 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0056_add_updated_vendor'),
+        ("activity", "0056_add_updated_vendor"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Vendor'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('CREATE_INVOICE', 'Invoice was created for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Vendor"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("CREATE_INVOICE", "Invoice was created for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0058_add_project_invoicing.py b/hypha/apply/activity/migrations/0058_add_project_invoicing.py
index d244da829a7c1867bf38e8c95e6f40619ff48fe4..17c4c736f8c873da4905d4a2c9444b25aa850ae7 100644
--- a/hypha/apply/activity/migrations/0058_add_project_invoicing.py
+++ b/hypha/apply/activity/migrations/0058_add_project_invoicing.py
@@ -4,15 +4,71 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0057_add_invoices'),
+        ("activity", "0057_add_invoices"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Vendor'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('CREATE_INVOICE', 'Invoice was created for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('UPDATE_INVOICE_STATUS', 'Updated Invoice Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('DELETE_INVOICE', 'Delete Invoice'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('UPDATE_INVOICE', 'Updated Invoice'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Vendor"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("CREATE_INVOICE", "Invoice was created for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("UPDATE_INVOICE_STATUS", "Updated Invoice Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("DELETE_INVOICE", "Delete Invoice"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("UPDATE_INVOICE", "Updated Invoice"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0059_rename_team_staff.py b/hypha/apply/activity/migrations/0059_rename_team_staff.py
index 0fe6adfccda1fb4f5b3b8f279060fdd2f9099887..577a1eb1c9cefbce2b526fc357d9811b271c53a2 100644
--- a/hypha/apply/activity/migrations/0059_rename_team_staff.py
+++ b/hypha/apply/activity/migrations/0059_rename_team_staff.py
@@ -4,15 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0058_add_project_invoicing'),
+        ("activity", "0058_add_project_invoicing"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='activity',
-            name='visibility',
-            field=models.CharField(choices=[('applicant', 'Applicant(s)'), ('team', 'Staff'), ('reviewers', 'Reviewers'), ('partners', 'Partners'), ('all', 'All')], default='applicant', max_length=30),
+            model_name="activity",
+            name="visibility",
+            field=models.CharField(
+                choices=[
+                    ("applicant", "Applicant(s)"),
+                    ("team", "Staff"),
+                    ("reviewers", "Reviewers"),
+                    ("partners", "Partners"),
+                    ("all", "All"),
+                ],
+                default="applicant",
+                max_length=30,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0060_contracting_name_update.py b/hypha/apply/activity/migrations/0060_contracting_name_update.py
index c1eca37913d5ef3f11817d2bbfcacf0f59689e7b..731c3ae0d1933abaad843bf3a2f8d5386ba4f910 100644
--- a/hypha/apply/activity/migrations/0060_contracting_name_update.py
+++ b/hypha/apply/activity/migrations/0060_contracting_name_update.py
@@ -4,15 +4,71 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0059_rename_team_staff'),
+        ("activity", "0059_rename_team_staff"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Contracting information'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('CREATE_INVOICE', 'Invoice was created for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('UPDATE_INVOICE_STATUS', 'Updated Invoice Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('DELETE_INVOICE', 'Delete Invoice'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('UPDATE_INVOICE', 'Updated Invoice'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("REQUEST_PAYMENT", "Payment was requested for Project"),
+                    ("CREATE_INVOICE", "Invoice was created for Project"),
+                    ("UPDATE_PAYMENT_REQUEST_STATUS", "Updated Payment Request Status"),
+                    ("UPDATE_INVOICE_STATUS", "Updated Invoice Status"),
+                    ("DELETE_PAYMENT_REQUEST", "Delete Payment Request"),
+                    ("DELETE_INVOICE", "Delete Invoice"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_PAYMENT_REQUEST", "Updated Payment Request"),
+                    ("UPDATE_INVOICE", "Updated Invoice"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0061_payment_requests_cleanup.py b/hypha/apply/activity/migrations/0061_payment_requests_cleanup.py
index a88fb085f462366095f752320f3785945aade594..22646dd7446c9e460eae0e7de4b99bdf4afe4c39 100644
--- a/hypha/apply/activity/migrations/0061_payment_requests_cleanup.py
+++ b/hypha/apply/activity/migrations/0061_payment_requests_cleanup.py
@@ -4,15 +4,67 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0060_contracting_name_update'),
+        ("activity", "0060_contracting_name_update"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Contracting information'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('CREATE_INVOICE', 'Invoice was created for Project'), ('UPDATE_INVOICE_STATUS', 'Updated Invoice Status'), ('DELETE_INVOICE', 'Delete Invoice'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_INVOICE', 'Updated Invoice'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("CREATE_INVOICE", "Invoice was created for Project"),
+                    ("UPDATE_INVOICE_STATUS", "Updated Invoice Status"),
+                    ("DELETE_INVOICE", "Delete Invoice"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_INVOICE", "Updated Invoice"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminde to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0062_remove_payment_requests_activities.py b/hypha/apply/activity/migrations/0062_remove_payment_requests_activities.py
index 6326f6c3e4170d1009bbb9d109e7cef96fd0fcbe..36da5f6c369dedbb59cb8cf7773c780630f09d5f 100644
--- a/hypha/apply/activity/migrations/0062_remove_payment_requests_activities.py
+++ b/hypha/apply/activity/migrations/0062_remove_payment_requests_activities.py
@@ -4,13 +4,13 @@ from django.db import migrations
 
 
 def remove_payment_request_activities(apps, schema_editor):
-    Activity = apps.get_model('activity', 'Activity')
-    Activity.objects.filter(related_content_type__model='paymentrequest').delete()
+    Activity = apps.get_model("activity", "Activity")
+    Activity.objects.filter(related_content_type__model="paymentrequest").delete()
 
-class Migration(migrations.Migration):
 
+class Migration(migrations.Migration):
     dependencies = [
-        ('activity', '0061_payment_requests_cleanup'),
+        ("activity", "0061_payment_requests_cleanup"),
     ]
 
     operations = [
diff --git a/hypha/apply/activity/migrations/0063_alter_event_type.py b/hypha/apply/activity/migrations/0063_alter_event_type.py
index 6bc9d7fcb4138858e23ed51e6b55d441368bb5ea..e6daffa1badefad74058f0918463e9eb2479f772 100644
--- a/hypha/apply/activity/migrations/0063_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0063_alter_event_type.py
@@ -4,15 +4,67 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0062_remove_payment_requests_activities'),
+        ("activity", "0062_remove_payment_requests_activities"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT_SUBMISSION', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Contracting information'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('CREATE_INVOICE', 'Invoice was created for Project'), ('UPDATE_INVOICE_STATUS', 'Updated Invoice Status'), ('DELETE_INVOICE', 'Delete Invoice'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_INVOICE', 'Updated Invoice'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminder to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT_SUBMISSION", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("CREATE_INVOICE", "Invoice was created for Project"),
+                    ("UPDATE_INVOICE_STATUS", "Updated Invoice Status"),
+                    ("DELETE_INVOICE", "Delete Invoice"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_INVOICE", "Updated Invoice"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminder to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0064_alter_event_type.py b/hypha/apply/activity/migrations/0064_alter_event_type.py
index 018d77d5e7e86c4aec87920e11f3c47ec424e022..2ac7c85dc89b6201b3945971ac80d22995518dd7 100644
--- a/hypha/apply/activity/migrations/0064_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0064_alter_event_type.py
@@ -4,15 +4,68 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0063_alter_event_type'),
+        ("activity", "0063_alter_event_type"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT_SUBMISSION', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Contracting information'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_FINAL_APPROVAL', 'Send for Final Approval'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('CREATE_INVOICE', 'Invoice was created for Project'), ('UPDATE_INVOICE_STATUS', 'Updated Invoice Status'), ('DELETE_INVOICE', 'Delete Invoice'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_INVOICE', 'Updated Invoice'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminder to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "Update Lead"),
+                    ("BATCH_UPDATE_LEAD", "Batch Update Lead"),
+                    ("EDIT_SUBMISSION", "Edit"),
+                    ("APPLICANT_EDIT", "Applicant Edit"),
+                    ("NEW_SUBMISSION", "New Submission"),
+                    ("SCREENING", "Screening"),
+                    ("TRANSITION", "Transition"),
+                    ("BATCH_TRANSITION", "Batch Transition"),
+                    ("DETERMINATION_OUTCOME", "Determination Outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "Batch Determination Outcome"),
+                    ("INVITED_TO_PROPOSAL", "Invited To Proposal"),
+                    ("REVIEWERS_UPDATED", "Reviewers Updated"),
+                    ("BATCH_REVIEWERS_UPDATED", "Batch Reviewers Updated"),
+                    ("PARTNERS_UPDATED", "Partners Updated"),
+                    ("PARTNERS_UPDATED_PARTNER", "Partners Updated Partner"),
+                    ("READY_FOR_REVIEW", "Ready For Review"),
+                    ("BATCH_READY_FOR_REVIEW", "Batch Ready For Review"),
+                    ("NEW_REVIEW", "New Review"),
+                    ("COMMENT", "Comment"),
+                    ("PROPOSAL_SUBMITTED", "Proposal Submitted"),
+                    ("OPENED_SEALED", "Opened Sealed Submission"),
+                    ("REVIEW_OPINION", "Review Opinion"),
+                    ("DELETE_SUBMISSION", "Delete Submission"),
+                    ("DELETE_REVIEW", "Delete Review"),
+                    ("CREATED_PROJECT", "Created Project"),
+                    ("UPDATED_VENDOR", "Updated Contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "Update Project Lead"),
+                    ("EDIT_REVIEW", "Edit Review"),
+                    ("SEND_FOR_APPROVAL", "Send for Approval"),
+                    ("APPROVE_PROJECT", "Project was Approved"),
+                    ("PROJECT_FINAL_APPROVAL", "Send for Final Approval"),
+                    ("PROJECT_TRANSITION", "Project was Transitioned"),
+                    ("REQUEST_PROJECT_CHANGE", "Project change requested"),
+                    ("UPLOAD_DOCUMENT", "Document was Uploaded to Project"),
+                    ("REMOVE_DOCUMENT", "Document was Removed from Project"),
+                    ("UPLOAD_CONTRACT", "Contract was Uploaded to Project"),
+                    ("APPROVE_CONTRACT", "Contract was Approved"),
+                    ("CREATE_INVOICE", "Invoice was created for Project"),
+                    ("UPDATE_INVOICE_STATUS", "Updated Invoice Status"),
+                    ("DELETE_INVOICE", "Delete Invoice"),
+                    ("SENT_TO_COMPLIANCE", "Project was sent to Compliance"),
+                    ("UPDATE_INVOICE", "Updated Invoice"),
+                    ("SUBMIT_REPORT", "Submit Report"),
+                    ("SKIPPED_REPORT", "Skipped Report"),
+                    ("REPORT_FREQUENCY_CHANGED", "Report Frequency Changed"),
+                    ("REPORT_NOTIFY", "Report Notify"),
+                    ("CREATE_REMINDER", "Reminder Created"),
+                    ("DELETE_REMINDER", "Reminder Deleted"),
+                    ("REVIEW_REMINDER", "Reminder to Review"),
+                    ("BATCH_DELETE_SUBMISSION", "Delete Batch Submissions"),
+                ],
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0065_auto_20221006_1115.py b/hypha/apply/activity/migrations/0065_auto_20221006_1115.py
index b14314f7fd2549c196b105770ce65a4017360047..686819b685d9d630d87902a5f3cd2db9723be05e 100644
--- a/hypha/apply/activity/migrations/0065_auto_20221006_1115.py
+++ b/hypha/apply/activity/migrations/0065_auto_20221006_1115.py
@@ -4,20 +4,76 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0064_alter_event_type'),
+        ("activity", "0064_alter_event_type"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='message',
-            name='sent_in_email_digest',
+            model_name="message",
+            name="sent_in_email_digest",
             field=models.BooleanField(default=False),
         ),
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('PROJECT_FINAL_APPROVAL', 'sent project for final approval'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("PROJECT_FINAL_APPROVAL", "sent project for final approval"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0066_alter_event_type.py b/hypha/apply/activity/migrations/0066_alter_event_type.py
index 30c955eaf74a1baad839c84a478d5c41625bdd56..f6143babf1bedee7492e61ff1c5b19a3ce48fa16 100644
--- a/hypha/apply/activity/migrations/0066_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0066_alter_event_type.py
@@ -4,15 +4,72 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0065_auto_20221006_1115'),
+        ("activity", "0065_auto_20221006_1115"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('PROJECT_FINAL_APPROVAL', 'sent project for final approval'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("PROJECT_FINAL_APPROVAL", "sent project for final approval"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0067_add_draft_submission.py b/hypha/apply/activity/migrations/0067_add_draft_submission.py
index 4dc804087f29fdbab5e49cf9a6226dcc60f7b936..a9c09dac90389b73cb28f807dc420872adc24329 100644
--- a/hypha/apply/activity/migrations/0067_add_draft_submission.py
+++ b/hypha/apply/activity/migrations/0067_add_draft_submission.py
@@ -4,15 +4,73 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0066_alter_event_type'),
+        ("activity", "0066_alter_event_type"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('PROJECT_FINAL_APPROVAL', 'sent project for final approval'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("PROJECT_FINAL_APPROVAL", "sent project for final approval"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0068_add_archive_unarchive.py b/hypha/apply/activity/migrations/0068_add_archive_unarchive.py
index 7184a51b60d0b3e967dc646df0e0533d7ad92ad9..c18b137501bf9b1501ca9087ca129b65add88dd7 100644
--- a/hypha/apply/activity/migrations/0068_add_archive_unarchive.py
+++ b/hypha/apply/activity/migrations/0068_add_archive_unarchive.py
@@ -4,15 +4,75 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0067_add_draft_submission'),
+        ("activity", "0067_add_draft_submission"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('PROJECT_FINAL_APPROVAL', 'sent project for final approval'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("PROJECT_FINAL_APPROVAL", "sent project for final approval"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0069_alter_event_type_add_disable_reporting.py b/hypha/apply/activity/migrations/0069_alter_event_type_add_disable_reporting.py
index 84738cd306ce40a1f08bff2c3c4fb3bed7cec544..40b865c966c5c8c491c57acf300fdd759383b52b 100644
--- a/hypha/apply/activity/migrations/0069_alter_event_type_add_disable_reporting.py
+++ b/hypha/apply/activity/migrations/0069_alter_event_type_add_disable_reporting.py
@@ -4,15 +4,76 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0068_add_archive_unarchive'),
+        ("activity", "0068_add_archive_unarchive"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('PROJECT_FINAL_APPROVAL', 'sent project for final approval'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('DISABLED_REPORTING', 'disabled reporting'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("PROJECT_FINAL_APPROVAL", "sent project for final approval"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("DISABLED_REPORTING", "disabled reporting"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0070_alter_event_type.py b/hypha/apply/activity/migrations/0070_alter_event_type.py
index 73ee812a017a530ced127f6f22c6d065d0e528cc..19f25fc28bd4761b57f6852ac16f0882eed71a98 100644
--- a/hypha/apply/activity/migrations/0070_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0070_alter_event_type.py
@@ -4,15 +4,77 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0069_alter_event_type_add_disable_reporting'),
+        ("activity", "0069_alter_event_type_add_disable_reporting"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('APPROVE_PAF', 'approved paf'), ('PROJECT_FINAL_APPROVAL', 'sent project for final approval'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('DISABLED_REPORTING', 'disabled reporting'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("APPROVE_PAF", "approved paf"),
+                    ("PROJECT_FINAL_APPROVAL", "sent project for final approval"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("DISABLED_REPORTING", "disabled reporting"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0071_alter_event_type.py b/hypha/apply/activity/migrations/0071_alter_event_type.py
index 9c13d2709c4adf69ef4fa690eadbab93a8450ca1..3c08dcdb62b6ce06969a56c4ae1bd7f64fe42fc1 100644
--- a/hypha/apply/activity/migrations/0071_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0071_alter_event_type.py
@@ -4,15 +4,76 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0070_alter_event_type'),
+        ("activity", "0070_alter_event_type"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('APPROVE_PAF', 'approved paf'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('DISABLED_REPORTING', 'disabled reporting'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("APPROVE_PAF", "approved paf"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("DISABLED_REPORTING", "disabled reporting"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0072_alter_event_type.py b/hypha/apply/activity/migrations/0072_alter_event_type.py
index 0220d0716610fdf95754476456cfed43d473feb1..96a6865f74332d2c65fae66f97a7aa30286dbf28 100644
--- a/hypha/apply/activity/migrations/0072_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0072_alter_event_type.py
@@ -4,15 +4,77 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0071_alter_event_type'),
+        ("activity", "0071_alter_event_type"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('APPROVE_PAF', 'approved paf'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('SUBMIT_CONTRACT_DOCUMENTS', 'submitted contract documents'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('DISABLED_REPORTING', 'disabled reporting'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("APPROVE_PAF", "approved paf"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("SUBMIT_CONTRACT_DOCUMENTS", "submitted contract documents"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("DISABLED_REPORTING", "disabled reporting"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0073_add_approve_invoice.py b/hypha/apply/activity/migrations/0073_add_approve_invoice.py
index 3bfea040506001e0499df07081a9f72a56676938..e12dc8b7beb4d8737e035fa6e83a98e567ab0368 100644
--- a/hypha/apply/activity/migrations/0073_add_approve_invoice.py
+++ b/hypha/apply/activity/migrations/0073_add_approve_invoice.py
@@ -4,15 +4,78 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0072_alter_event_type'),
+        ("activity", "0072_alter_event_type"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('APPROVE_PAF', 'approved paf'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('SUBMIT_CONTRACT_DOCUMENTS', 'submitted contract documents'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('APPROVE_INVOICE', 'approve invoice'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('DISABLED_REPORTING', 'disabled reporting'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("APPROVE_PAF", "approved paf"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("SUBMIT_CONTRACT_DOCUMENTS", "submitted contract documents"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("APPROVE_INVOICE", "approve invoice"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("DISABLED_REPORTING", "disabled reporting"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0074_alter_event_type.py b/hypha/apply/activity/migrations/0074_alter_event_type.py
index ecca83337ba6dce13d81c72b7a4458f1d504689d..520f91264b47f69e34280a36cbc787fdf90f2588 100644
--- a/hypha/apply/activity/migrations/0074_alter_event_type.py
+++ b/hypha/apply/activity/migrations/0074_alter_event_type.py
@@ -4,15 +4,79 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('activity', '0073_add_approve_invoice'),
+        ("activity", "0073_add_approve_invoice"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='event',
-            name='type',
-            field=models.CharField(choices=[('UPDATE_LEAD', 'updated lead'), ('BATCH_UPDATE_LEAD', 'batch updated lead'), ('EDIT_SUBMISSION', 'edited submission'), ('APPLICANT_EDIT', 'edited applicant'), ('NEW_SUBMISSION', 'submitted new submission'), ('DRAFT_SUBMISSION', 'submitted new draft submission'), ('SCREENING', 'screened'), ('TRANSITION', 'transitioned'), ('BATCH_TRANSITION', 'batch transitioned'), ('DETERMINATION_OUTCOME', 'sent determination outcome'), ('BATCH_DETERMINATION_OUTCOME', 'sent batch determination outcome'), ('INVITED_TO_PROPOSAL', 'invited to proposal'), ('REVIEWERS_UPDATED', 'updated reviewers'), ('BATCH_REVIEWERS_UPDATED', 'batch updated reviewers'), ('PARTNERS_UPDATED', 'updated partners'), ('PARTNERS_UPDATED_PARTNER', 'partners updated partner'), ('READY_FOR_REVIEW', 'marked ready for review'), ('BATCH_READY_FOR_REVIEW', 'marked batch ready for review'), ('NEW_REVIEW', 'added new review'), ('COMMENT', 'added comment'), ('PROPOSAL_SUBMITTED', 'submitted proposal'), ('OPENED_SEALED', 'opened sealed submission'), ('REVIEW_OPINION', 'reviewed opinion'), ('DELETE_SUBMISSION', 'deleted submission'), ('DELETE_REVIEW', 'deleted review'), ('CREATED_PROJECT', 'created project'), ('UPDATED_VENDOR', 'updated contracting information'), ('UPDATE_PROJECT_LEAD', 'updated project lead'), ('EDIT_REVIEW', 'edited review'), ('SEND_FOR_APPROVAL', 'sent for approval'), ('APPROVE_PROJECT', 'approved project'), ('ASSIGN_PAF_APPROVER', 'assign paf approver'), ('APPROVE_PAF', 'approved paf'), ('PROJECT_TRANSITION', 'transitioned project'), ('REQUEST_PROJECT_CHANGE', 'requested project change'), ('SUBMIT_CONTRACT_DOCUMENTS', 'submitted contract documents'), ('UPLOAD_DOCUMENT', 'uploaded document to project'), ('REMOVE_DOCUMENT', 'removed document from project'), ('UPLOAD_CONTRACT', 'uploaded contract to project'), ('APPROVE_CONTRACT', 'approved contract'), ('CREATE_INVOICE', 'created invoice for project'), ('UPDATE_INVOICE_STATUS', 'updated invoice status'), ('APPROVE_INVOICE', 'approve invoice'), ('DELETE_INVOICE', 'deleted invoice'), ('SENT_TO_COMPLIANCE', 'sent project to compliance'), ('UPDATE_INVOICE', 'updated invoice'), ('SUBMIT_REPORT', 'submitted report'), ('SKIPPED_REPORT', 'skipped report'), ('REPORT_FREQUENCY_CHANGED', 'changed report frequency'), ('DISABLED_REPORTING', 'disabled reporting'), ('REPORT_NOTIFY', 'notified report'), ('CREATE_REMINDER', 'created reminder'), ('DELETE_REMINDER', 'deleted reminder'), ('REVIEW_REMINDER', 'reminder to review'), ('BATCH_DELETE_SUBMISSION', 'batch deleted submissions'), ('BATCH_ARCHIVE_SUBMISSION', 'batch archive submissions'), ('STAFF_ACCOUNT_CREATED', 'created new account'), ('STAFF_ACCOUNT_EDITED', 'edited account'), ('ARCHIVE_SUBMISSION', 'archived submission'), ('UNARCHIVE_SUBMISSION', 'unarchived submission')], max_length=50, verbose_name='verb'),
+            model_name="event",
+            name="type",
+            field=models.CharField(
+                choices=[
+                    ("UPDATE_LEAD", "updated lead"),
+                    ("BATCH_UPDATE_LEAD", "batch updated lead"),
+                    ("EDIT_SUBMISSION", "edited submission"),
+                    ("APPLICANT_EDIT", "edited applicant"),
+                    ("NEW_SUBMISSION", "submitted new submission"),
+                    ("DRAFT_SUBMISSION", "submitted new draft submission"),
+                    ("SCREENING", "screened"),
+                    ("TRANSITION", "transitioned"),
+                    ("BATCH_TRANSITION", "batch transitioned"),
+                    ("DETERMINATION_OUTCOME", "sent determination outcome"),
+                    ("BATCH_DETERMINATION_OUTCOME", "sent batch determination outcome"),
+                    ("INVITED_TO_PROPOSAL", "invited to proposal"),
+                    ("REVIEWERS_UPDATED", "updated reviewers"),
+                    ("BATCH_REVIEWERS_UPDATED", "batch updated reviewers"),
+                    ("PARTNERS_UPDATED", "updated partners"),
+                    ("PARTNERS_UPDATED_PARTNER", "partners updated partner"),
+                    ("READY_FOR_REVIEW", "marked ready for review"),
+                    ("BATCH_READY_FOR_REVIEW", "marked batch ready for review"),
+                    ("NEW_REVIEW", "added new review"),
+                    ("COMMENT", "added comment"),
+                    ("PROPOSAL_SUBMITTED", "submitted proposal"),
+                    ("OPENED_SEALED", "opened sealed submission"),
+                    ("REVIEW_OPINION", "reviewed opinion"),
+                    ("DELETE_SUBMISSION", "deleted submission"),
+                    ("DELETE_REVIEW", "deleted review"),
+                    ("CREATED_PROJECT", "created project"),
+                    ("UPDATED_VENDOR", "updated contracting information"),
+                    ("UPDATE_PROJECT_LEAD", "updated project lead"),
+                    ("EDIT_REVIEW", "edited review"),
+                    ("SEND_FOR_APPROVAL", "sent for approval"),
+                    ("APPROVE_PROJECT", "approved project"),
+                    ("ASSIGN_PAF_APPROVER", "assign paf approver"),
+                    ("APPROVE_PAF", "approved paf"),
+                    ("PROJECT_TRANSITION", "transitioned project"),
+                    ("REQUEST_PROJECT_CHANGE", "requested project change"),
+                    ("SUBMIT_CONTRACT_DOCUMENTS", "submitted contract documents"),
+                    ("UPLOAD_DOCUMENT", "uploaded document to project"),
+                    ("REMOVE_DOCUMENT", "removed document from project"),
+                    ("UPLOAD_CONTRACT", "uploaded contract to project"),
+                    ("APPROVE_CONTRACT", "approved contract"),
+                    ("CREATE_INVOICE", "created invoice for project"),
+                    ("UPDATE_INVOICE_STATUS", "updated invoice status"),
+                    ("APPROVE_INVOICE", "approve invoice"),
+                    ("DELETE_INVOICE", "deleted invoice"),
+                    ("SENT_TO_COMPLIANCE", "sent project to compliance"),
+                    ("UPDATE_INVOICE", "updated invoice"),
+                    ("SUBMIT_REPORT", "submitted report"),
+                    ("SKIPPED_REPORT", "skipped report"),
+                    ("REPORT_FREQUENCY_CHANGED", "changed report frequency"),
+                    ("DISABLED_REPORTING", "disabled reporting"),
+                    ("REPORT_NOTIFY", "notified report"),
+                    ("CREATE_REMINDER", "created reminder"),
+                    ("DELETE_REMINDER", "deleted reminder"),
+                    ("REVIEW_REMINDER", "reminder to review"),
+                    ("BATCH_DELETE_SUBMISSION", "batch deleted submissions"),
+                    ("BATCH_ARCHIVE_SUBMISSION", "batch archive submissions"),
+                    ("STAFF_ACCOUNT_CREATED", "created new account"),
+                    ("STAFF_ACCOUNT_EDITED", "edited account"),
+                    ("ARCHIVE_SUBMISSION", "archived submission"),
+                    ("UNARCHIVE_SUBMISSION", "unarchived submission"),
+                ],
+                max_length=50,
+                verbose_name="verb",
+            ),
         ),
     ]
diff --git a/hypha/apply/activity/migrations/0075_alter_activity_visibility.py b/hypha/apply/activity/migrations/0075_alter_activity_visibility.py
new file mode 100644
index 0000000000000000000000000000000000000000..33378f4f31b5dd573dd16c92b65188925b8ebbdb
--- /dev/null
+++ b/hypha/apply/activity/migrations/0075_alter_activity_visibility.py
@@ -0,0 +1,27 @@
+# Generated by Django 3.2.19 on 2023-07-18 10:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("activity", "0074_alter_event_type"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="activity",
+            name="visibility",
+            field=models.CharField(
+                choices=[
+                    ("applicant", "Applicants"),
+                    ("team", "Staff only"),
+                    ("reviewers", "Reviewers"),
+                    ("partners", "Partners"),
+                    ("all", "All"),
+                ],
+                default="applicant",
+                max_length=30,
+            ),
+        ),
+    ]
diff --git a/hypha/apply/activity/models.py b/hypha/apply/activity/models.py
index eadc6e5104b296860324e39e3a98aa429297b164..0e438c7061a0eb791c3be794c7ecf62b970ffa44 100644
--- a/hypha/apply/activity/models.py
+++ b/hypha/apply/activity/models.py
@@ -9,26 +9,26 @@ from django.utils.translation import gettext as _
 
 from .options import MESSAGES
 
-COMMENT = 'comment'
-ACTION = 'action'
+COMMENT = "comment"
+ACTION = "action"
 
 ACTIVITY_TYPES = {
-    COMMENT: 'Comment',
-    ACTION: 'Action',
+    COMMENT: "Comment",
+    ACTION: "Action",
 }
 
-APPLICANT = 'applicant'
-TEAM = 'team'
-REVIEWER = 'reviewers'
-PARTNER = 'partners'
-ALL = 'all'
+APPLICANT = "applicant"
+TEAM = "team"
+REVIEWER = "reviewers"
+PARTNER = "partners"
+ALL = "all"
 
 VISIBILITY = {
-    APPLICANT: 'Applicant(s)',
-    TEAM: 'Staff',
-    REVIEWER: 'Reviewers',
-    PARTNER: 'Partners',
-    ALL: 'All',
+    APPLICANT: "Applicants",
+    TEAM: "Staff only",
+    REVIEWER: "Reviewers",
+    PARTNER: "Partners",
+    ALL: "All",
 }
 
 
@@ -37,11 +37,12 @@ class BaseActivityQuerySet(models.QuerySet):
         # To hide reviews from the applicant's activity feed
         # Todo: It is just for historic data and not be needed for new data after this.
         from .messaging import ActivityAdapter
+
         messages = ActivityAdapter.messages
         if user.is_applicant:
-            return self.exclude(
-                message=messages.get(MESSAGES.NEW_REVIEW)
-            ).filter(visibility__in=self.model.visibility_for(user))
+            return self.exclude(message=messages.get(MESSAGES.NEW_REVIEW)).filter(
+                visibility__in=self.model.visibility_for(user)
+            )
 
         return self.filter(visibility__in=self.model.visibility_for(user))
 
@@ -57,7 +58,9 @@ class ActivityQuerySet(BaseActivityQuerySet):
         return self.filter(type=ACTION)
 
     def latest(self):
-        return self.filter(timestamp__gte=(timezone.now() - timezone.timedelta(days=30)))
+        return self.filter(
+            timestamp__gte=(timezone.now() - timezone.timedelta(days=30))
+        )
 
 
 class ActivityBaseManager(models.Manager):
@@ -66,9 +69,13 @@ class ActivityBaseManager(models.Manager):
         return super().create(**kwargs)
 
     def get_queryset(self):
-        return super().get_queryset().filter(
-            type=self.type,
-            current=True,
+        return (
+            super()
+            .get_queryset()
+            .filter(
+                type=self.type,
+                current=True,
+            )
         )
 
 
@@ -93,12 +100,20 @@ class Activity(models.Model):
     type = models.CharField(choices=ACTIVITY_TYPES.items(), max_length=30)
     user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
 
-    source_content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.CASCADE, related_name='activity_source')
+    source_content_type = models.ForeignKey(
+        ContentType,
+        blank=True,
+        null=True,
+        on_delete=models.CASCADE,
+        related_name="activity_source",
+    )
     source_object_id = models.PositiveIntegerField(blank=True, null=True, db_index=True)
-    source = GenericForeignKey('source_content_type', 'source_object_id')
+    source = GenericForeignKey("source_content_type", "source_object_id")
 
     message = models.TextField()
-    visibility = models.CharField(choices=list(VISIBILITY.items()), default=APPLICANT, max_length=30)
+    visibility = models.CharField(
+        choices=list(VISIBILITY.items()), default=APPLICANT, max_length=30
+    )
 
     # Fields for handling versioning of the comment activity models
     edited = models.DateTimeField(default=None, null=True)
@@ -106,9 +121,15 @@ class Activity(models.Model):
     previous = models.ForeignKey("self", on_delete=models.CASCADE, null=True)
 
     # Fields for generic relations to other objects. related_object should implement `get_absolute_url`
-    related_content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.CASCADE, related_name='activity_related')
+    related_content_type = models.ForeignKey(
+        ContentType,
+        blank=True,
+        null=True,
+        on_delete=models.CASCADE,
+        related_name="activity_related",
+    )
     related_object_id = models.PositiveIntegerField(blank=True, null=True)
-    related_object = GenericForeignKey('related_content_type', 'related_object_id')
+    related_object = GenericForeignKey("related_content_type", "related_object_id")
 
     objects = models.Manager.from_queryset(ActivityQuerySet)()
     comments = CommentManger.from_queryset(CommentQueryset)()
@@ -117,8 +138,8 @@ class Activity(models.Model):
     wagtail_reference_index_ignore = True
 
     class Meta:
-        ordering = ['-timestamp']
-        base_manager_name = 'objects'
+        ordering = ["-timestamp"]
+        base_manager_name = "objects"
 
     @property
     def priviledged(self):
@@ -136,35 +157,60 @@ class Activity(models.Model):
     @classmethod
     def visibility_for(cls, user):
         if user.is_apply_staff:
-            return [APPLICANT, TEAM, REVIEWER, PARTNER, ALL]
+            return [TEAM, APPLICANT, REVIEWER, PARTNER, ALL]
         if user.is_reviewer:
             return [REVIEWER, ALL]
-        if user.is_partner:
-            return [PARTNER, ALL]
-
-        return [APPLICANT, ALL]
+        if user.is_finance or user.is_contracting:
+            # for project part
+            return [TEAM, APPLICANT, REVIEWER, PARTNER, ALL]
+        if user.is_applicant or user.is_partner:
+            return [
+                APPLICANT,
+                PARTNER,
+                ALL,
+            ]  # using partner just for existing activities.
+
+        return [ALL]
 
     @classmethod
     def visibility_choices_for(cls, user):
-        return [(choice, VISIBILITY[choice]) for choice in cls.visibility_for(user)]
+        if user.is_applicant or user.is_partner:
+            return [(APPLICANT, VISIBILITY[APPLICANT])]
+        if user.is_reviewer:
+            return [(REVIEWER, VISIBILITY[REVIEWER])]
+        if user.is_apply_staff:
+            return [
+                (TEAM, VISIBILITY[TEAM]),
+                (APPLICANT, VISIBILITY[APPLICANT]),
+                (REVIEWER, VISIBILITY[REVIEWER]),
+                (ALL, VISIBILITY[ALL]),
+            ]
+        if user.is_finance or user.is_contracting:
+            return [(TEAM, VISIBILITY[TEAM]), (APPLICANT, VISIBILITY[APPLICANT])]
+        return [(ALL, VISIBILITY[ALL])]
 
 
 class Event(models.Model):
     """Model to track when messages are triggered"""
+
     wagtail_reference_index_ignore = True
 
     when = models.DateTimeField(auto_now_add=True)
     type = models.CharField(_("verb"), choices=MESSAGES.choices, max_length=50)
-    by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, null=True)
-    content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.CASCADE)
+    by = models.ForeignKey(
+        settings.AUTH_USER_MODEL, on_delete=models.PROTECT, null=True
+    )
+    content_type = models.ForeignKey(
+        ContentType, blank=True, null=True, on_delete=models.CASCADE
+    )
     object_id = models.PositiveIntegerField(blank=True, null=True)
-    source = GenericForeignKey('content_type', 'object_id')
+    source = GenericForeignKey("content_type", "object_id")
 
     def __str__(self):
         if self.source and hasattr(self.source, "title"):
-            return f'{self.by} {self.get_type_display()} - {self.source.title }'
+            return f"{self.by} {self.get_type_display()} - {self.source.title }"
         else:
-            return f'{self.by} {self.get_type_display()}'
+            return f"{self.by} {self.get_type_display()}"
 
 
 class MessagesQueryset(models.QuerySet):
@@ -172,9 +218,9 @@ class MessagesQueryset(models.QuerySet):
         if status:
             return self.update(
                 status=Case(
-                    When(status='', then=Value(status)),
-                    default=Concat('status', Value('<br />' + status)),
-                    output_field=models.TextField()
+                    When(status="", then=Value(status)),
+                    default=Concat("status", Value("<br />" + status)),
+                    output_field=models.TextField(),
                 ),
             )
 
@@ -189,18 +235,20 @@ class Message(models.Model):
     recipient = models.CharField(max_length=250)
     event = models.ForeignKey(Event, on_delete=models.CASCADE)
     status = models.TextField()
-    external_id = models.CharField(max_length=75, null=True, blank=True)  # Stores the id of the object from an external system
+    external_id = models.CharField(
+        max_length=75, null=True, blank=True
+    )  # Stores the id of the object from an external system
     sent_in_email_digest = models.BooleanField(default=False)
     objects = MessagesQueryset.as_manager()
 
     def __str__(self):
-        return f'[{self.type}][{self.status}] {self.content}'
+        return f"[{self.type}][{self.status}] {self.content}"
 
     def update_status(self, status):
         if status:
             self.status = Case(
-                When(status='', then=Value(status)),
-                default=Concat('status', Value('<br />' + status)),
-                output_field=models.TextField()
+                When(status="", then=Value(status)),
+                default=Concat("status", Value("<br />" + status)),
+                output_field=models.TextField(),
             )
             self.save()
diff --git a/hypha/apply/activity/options.py b/hypha/apply/activity/options.py
index 7ba8bba056b6d30a88b6cb274713eb9d20fb5d8e..bb3861fa7ed90ae0ac1f825a1ef8c11be1dcabb4 100644
--- a/hypha/apply/activity/options.py
+++ b/hypha/apply/activity/options.py
@@ -4,63 +4,71 @@ from django.utils.translation import gettext as _
 
 class MESSAGES(TextChoices):
     # Format: {Python Value} = {DB Value} {Display Text or Verb}
-    UPDATE_LEAD = 'UPDATE_LEAD', _('updated lead')
-    BATCH_UPDATE_LEAD = 'BATCH_UPDATE_LEAD', _('batch updated lead')
-    EDIT_SUBMISSION = 'EDIT_SUBMISSION', _('edited submission')
-    APPLICANT_EDIT = 'APPLICANT_EDIT', _("edited applicant")
-    NEW_SUBMISSION = 'NEW_SUBMISSION', _('submitted new submission')
-    DRAFT_SUBMISSION = 'DRAFT_SUBMISSION', _('submitted new draft submission')
-    SCREENING = 'SCREENING', _('screened')
-    TRANSITION = 'TRANSITION', _('transitioned')
-    BATCH_TRANSITION = 'BATCH_TRANSITION', _('batch transitioned')
-    DETERMINATION_OUTCOME = 'DETERMINATION_OUTCOME', _('sent determination outcome')
-    BATCH_DETERMINATION_OUTCOME = 'BATCH_DETERMINATION_OUTCOME', _('sent batch determination outcome')
-    INVITED_TO_PROPOSAL = 'INVITED_TO_PROPOSAL', _('invited to proposal')
-    REVIEWERS_UPDATED = 'REVIEWERS_UPDATED', _('updated reviewers')
-    BATCH_REVIEWERS_UPDATED = 'BATCH_REVIEWERS_UPDATED', _('batch updated reviewers')
-    PARTNERS_UPDATED = 'PARTNERS_UPDATED', _('updated partners')
-    PARTNERS_UPDATED_PARTNER = 'PARTNERS_UPDATED_PARTNER', _('partners updated partner')
-    READY_FOR_REVIEW = 'READY_FOR_REVIEW', _('marked ready for review')
-    BATCH_READY_FOR_REVIEW = 'BATCH_READY_FOR_REVIEW', _('marked batch ready for review')
-    NEW_REVIEW = 'NEW_REVIEW', _('added new review')
-    COMMENT = 'COMMENT', _('added comment')
-    PROPOSAL_SUBMITTED = 'PROPOSAL_SUBMITTED', _('submitted proposal')
-    OPENED_SEALED = 'OPENED_SEALED', _('opened sealed submission')
-    REVIEW_OPINION = 'REVIEW_OPINION', _('reviewed opinion')
-    DELETE_SUBMISSION = 'DELETE_SUBMISSION', _('deleted submission')
-    DELETE_REVIEW = 'DELETE_REVIEW', _('deleted review')
-    CREATED_PROJECT = 'CREATED_PROJECT', _('created project')
-    UPDATED_VENDOR = 'UPDATED_VENDOR', _('updated contracting information')
-    UPDATE_PROJECT_LEAD = 'UPDATE_PROJECT_LEAD', _('updated project lead')
-    EDIT_REVIEW = 'EDIT_REVIEW', _('edited review')
-    SEND_FOR_APPROVAL = 'SEND_FOR_APPROVAL', _('sent for approval')
-    APPROVE_PROJECT = 'APPROVE_PROJECT', _('approved project')
-    ASSIGN_PAF_APPROVER = 'ASSIGN_PAF_APPROVER', _('assign paf approver')
-    APPROVE_PAF = 'APPROVE_PAF', _('approved paf')
-    PROJECT_TRANSITION = 'PROJECT_TRANSITION', _('transitioned project')
-    REQUEST_PROJECT_CHANGE = 'REQUEST_PROJECT_CHANGE', _('requested project change')
-    SUBMIT_CONTRACT_DOCUMENTS = 'SUBMIT_CONTRACT_DOCUMENTS', _('submitted contract documents')
-    UPLOAD_DOCUMENT = 'UPLOAD_DOCUMENT', _('uploaded document to project')
-    REMOVE_DOCUMENT = 'REMOVE_DOCUMENT', _('removed document from project')
-    UPLOAD_CONTRACT = 'UPLOAD_CONTRACT', _('uploaded contract to project')
-    APPROVE_CONTRACT = 'APPROVE_CONTRACT', _('approved contract')
-    CREATE_INVOICE = 'CREATE_INVOICE', _('created invoice for project')
-    UPDATE_INVOICE_STATUS = 'UPDATE_INVOICE_STATUS', _('updated invoice status')
-    APPROVE_INVOICE = 'APPROVE_INVOICE', _('approve invoice')
-    DELETE_INVOICE = 'DELETE_INVOICE', _('deleted invoice')
-    SENT_TO_COMPLIANCE = 'SENT_TO_COMPLIANCE', _('sent project to compliance')
-    UPDATE_INVOICE = 'UPDATE_INVOICE', _('updated invoice')
-    SUBMIT_REPORT = 'SUBMIT_REPORT', _('submitted report')
-    SKIPPED_REPORT = 'SKIPPED_REPORT', _('skipped report')
-    REPORT_FREQUENCY_CHANGED = 'REPORT_FREQUENCY_CHANGED', _('changed report frequency')
-    DISABLED_REPORTING = 'DISABLED_REPORTING', _('disabled reporting')
-    REPORT_NOTIFY = 'REPORT_NOTIFY', _('notified report')
-    CREATE_REMINDER = 'CREATE_REMINDER', _('created reminder')
-    DELETE_REMINDER = 'DELETE_REMINDER', _('deleted reminder')
-    REVIEW_REMINDER = 'REVIEW_REMINDER', _('reminder to review')
-    BATCH_DELETE_SUBMISSION = 'BATCH_DELETE_SUBMISSION', _('batch deleted submissions')
-    BATCH_ARCHIVE_SUBMISSION = 'BATCH_ARCHIVE_SUBMISSION', _('batch archive submissions')
-    STAFF_ACCOUNT_CREATED = 'STAFF_ACCOUNT_CREATED', _('created new account')
-    STAFF_ACCOUNT_EDITED = 'STAFF_ACCOUNT_EDITED', _('edited account')
-    ARCHIVE_SUBMISSION = 'ARCHIVE_SUBMISSION', _('archived submission')
-    UNARCHIVE_SUBMISSION = 'UNARCHIVE_SUBMISSION', _('unarchived submission')
+    UPDATE_LEAD = "UPDATE_LEAD", _("updated lead")
+    BATCH_UPDATE_LEAD = "BATCH_UPDATE_LEAD", _("batch updated lead")
+    EDIT_SUBMISSION = "EDIT_SUBMISSION", _("edited submission")
+    APPLICANT_EDIT = "APPLICANT_EDIT", _("edited applicant")
+    NEW_SUBMISSION = "NEW_SUBMISSION", _("submitted new submission")
+    DRAFT_SUBMISSION = "DRAFT_SUBMISSION", _("submitted new draft submission")
+    SCREENING = "SCREENING", _("screened")
+    TRANSITION = "TRANSITION", _("transitioned")
+    BATCH_TRANSITION = "BATCH_TRANSITION", _("batch transitioned")
+    DETERMINATION_OUTCOME = "DETERMINATION_OUTCOME", _("sent determination outcome")
+    BATCH_DETERMINATION_OUTCOME = "BATCH_DETERMINATION_OUTCOME", _(
+        "sent batch determination outcome"
+    )
+    INVITED_TO_PROPOSAL = "INVITED_TO_PROPOSAL", _("invited to proposal")
+    REVIEWERS_UPDATED = "REVIEWERS_UPDATED", _("updated reviewers")
+    BATCH_REVIEWERS_UPDATED = "BATCH_REVIEWERS_UPDATED", _("batch updated reviewers")
+    PARTNERS_UPDATED = "PARTNERS_UPDATED", _("updated partners")
+    PARTNERS_UPDATED_PARTNER = "PARTNERS_UPDATED_PARTNER", _("partners updated partner")
+    READY_FOR_REVIEW = "READY_FOR_REVIEW", _("marked ready for review")
+    BATCH_READY_FOR_REVIEW = "BATCH_READY_FOR_REVIEW", _(
+        "marked batch ready for review"
+    )
+    NEW_REVIEW = "NEW_REVIEW", _("added new review")
+    COMMENT = "COMMENT", _("added comment")
+    PROPOSAL_SUBMITTED = "PROPOSAL_SUBMITTED", _("submitted proposal")
+    OPENED_SEALED = "OPENED_SEALED", _("opened sealed submission")
+    REVIEW_OPINION = "REVIEW_OPINION", _("reviewed opinion")
+    DELETE_SUBMISSION = "DELETE_SUBMISSION", _("deleted submission")
+    DELETE_REVIEW = "DELETE_REVIEW", _("deleted review")
+    CREATED_PROJECT = "CREATED_PROJECT", _("created project")
+    UPDATED_VENDOR = "UPDATED_VENDOR", _("updated contracting information")
+    UPDATE_PROJECT_LEAD = "UPDATE_PROJECT_LEAD", _("updated project lead")
+    EDIT_REVIEW = "EDIT_REVIEW", _("edited review")
+    SEND_FOR_APPROVAL = "SEND_FOR_APPROVAL", _("sent for approval")
+    APPROVE_PROJECT = "APPROVE_PROJECT", _("approved project")
+    ASSIGN_PAF_APPROVER = "ASSIGN_PAF_APPROVER", _("assign paf approver")
+    APPROVE_PAF = "APPROVE_PAF", _("approved paf")
+    PROJECT_TRANSITION = "PROJECT_TRANSITION", _("transitioned project")
+    REQUEST_PROJECT_CHANGE = "REQUEST_PROJECT_CHANGE", _("requested project change")
+    SUBMIT_CONTRACT_DOCUMENTS = "SUBMIT_CONTRACT_DOCUMENTS", _(
+        "submitted contract documents"
+    )
+    UPLOAD_DOCUMENT = "UPLOAD_DOCUMENT", _("uploaded document to project")
+    REMOVE_DOCUMENT = "REMOVE_DOCUMENT", _("removed document from project")
+    UPLOAD_CONTRACT = "UPLOAD_CONTRACT", _("uploaded contract to project")
+    APPROVE_CONTRACT = "APPROVE_CONTRACT", _("approved contract")
+    CREATE_INVOICE = "CREATE_INVOICE", _("created invoice for project")
+    UPDATE_INVOICE_STATUS = "UPDATE_INVOICE_STATUS", _("updated invoice status")
+    APPROVE_INVOICE = "APPROVE_INVOICE", _("approve invoice")
+    DELETE_INVOICE = "DELETE_INVOICE", _("deleted invoice")
+    SENT_TO_COMPLIANCE = "SENT_TO_COMPLIANCE", _("sent project to compliance")
+    UPDATE_INVOICE = "UPDATE_INVOICE", _("updated invoice")
+    SUBMIT_REPORT = "SUBMIT_REPORT", _("submitted report")
+    SKIPPED_REPORT = "SKIPPED_REPORT", _("skipped report")
+    REPORT_FREQUENCY_CHANGED = "REPORT_FREQUENCY_CHANGED", _("changed report frequency")
+    DISABLED_REPORTING = "DISABLED_REPORTING", _("disabled reporting")
+    REPORT_NOTIFY = "REPORT_NOTIFY", _("notified report")
+    CREATE_REMINDER = "CREATE_REMINDER", _("created reminder")
+    DELETE_REMINDER = "DELETE_REMINDER", _("deleted reminder")
+    REVIEW_REMINDER = "REVIEW_REMINDER", _("reminder to review")
+    BATCH_DELETE_SUBMISSION = "BATCH_DELETE_SUBMISSION", _("batch deleted submissions")
+    BATCH_ARCHIVE_SUBMISSION = "BATCH_ARCHIVE_SUBMISSION", _(
+        "batch archive submissions"
+    )
+    STAFF_ACCOUNT_CREATED = "STAFF_ACCOUNT_CREATED", _("created new account")
+    STAFF_ACCOUNT_EDITED = "STAFF_ACCOUNT_EDITED", _("edited account")
+    ARCHIVE_SUBMISSION = "ARCHIVE_SUBMISSION", _("archived submission")
+    UNARCHIVE_SUBMISSION = "UNARCHIVE_SUBMISSION", _("unarchived submission")
diff --git a/hypha/apply/activity/services.py b/hypha/apply/activity/services.py
index e91c5114570eb8032cb43f914e6c538bc7f26430..af3dcf2f3f552c90998ecc0a03968caa7690aa41 100644
--- a/hypha/apply/activity/services.py
+++ b/hypha/apply/activity/services.py
@@ -16,9 +16,9 @@ def get_related_actions_for_user(obj, user):
 
     return (
         Activity.actions.filter(**{related_query: obj})
-        .select_related('user')
+        .select_related("user")
         .prefetch_related(
-            'related_object',
+            "related_object",
         )
         .visible_to(user)
     )
@@ -39,9 +39,9 @@ def get_related_comments_for_user(obj, user):
 
     return (
         Activity.comments.filter(**{related_query: obj})
-        .select_related('user')
+        .select_related("user")
         .prefetch_related(
-            'related_object',
+            "related_object",
         )
         .visible_to(user)
     )
diff --git a/hypha/apply/activity/signals.py b/hypha/apply/activity/signals.py
index 11794ddc176125d54042351611b39b5bcd290ce9..ebb0b6b4bcbff13f377c9423b76384c5f626c811 100644
--- a/hypha/apply/activity/signals.py
+++ b/hypha/apply/activity/signals.py
@@ -6,7 +6,7 @@ from .models import Message
 
 @receiver(tracking)
 def handle_event(sender, event, esp_name, **kwargs):
-    status = 'Webhook received: {} [{}]'.format(event.event_type, event.timestamp)
+    status = "Webhook received: {} [{}]".format(event.event_type, event.timestamp)
     if event.description:
-        status += ' ' + event.description
+        status += " " + event.description
     Message.objects.get(external_id=event.message_id).update_status(status)
diff --git a/hypha/apply/activity/tasks.py b/hypha/apply/activity/tasks.py
index cc4c13f21a9fc974f11b26b4e832d68ec0d38d84..07995731c0603c79c57eb895e2b1b7280930fa45 100644
--- a/hypha/apply/activity/tasks.py
+++ b/hypha/apply/activity/tasks.py
@@ -2,9 +2,9 @@ from celery import Celery
 from django.conf import settings
 from django.core.mail import EmailMessage
 
-app = Celery('tasks')
+app = Celery("tasks")
 
-app.config_from_object(settings, namespace='CELERY', force=True)
+app.config_from_object(settings, namespace="CELERY", force=True)
 
 
 def send_mail(subject, message, from_address, recipients, logs=None):
@@ -13,10 +13,10 @@ def send_mail(subject, message, from_address, recipients, logs=None):
     # Convenience method to wrap the tasks and handle the callback
     send_mail_task.apply_async(
         kwargs={
-            'subject': subject,
-            'body': message,
-            'from_email': from_address,
-            'to': recipients,
+            "subject": subject,
+            "body": message,
+            "from_email": from_address,
+            "to": recipients,
         },
         link=update_message_status.s([log.pk for log in logs]),
     )
@@ -24,20 +24,20 @@ def send_mail(subject, message, from_address, recipients, logs=None):
 
 @app.task
 def send_mail_task(**kwargs):
-    response = {'status': '', 'id': None}
+    response = {"status": "", "id": None}
     email = EmailMessage(**kwargs)
     try:
         email.send()
     except Exception as e:
-        response['status'] = 'Error: ' + str(e)
+        response["status"] = "Error: " + str(e)
     else:
         try:
             return {
-                'status': email.anymail_status.status.pop(),
-                'id': email.anymail_status.message_id,
+                "status": email.anymail_status.status.pop(),
+                "id": email.anymail_status.message_id,
             }
         except AttributeError:
-            response['status'] = 'sent'
+            response["status"] = "sent"
 
     return response
 
@@ -45,6 +45,7 @@ def send_mail_task(**kwargs):
 @app.task
 def update_message_status(response, message_pks):
     from .models import Message
+
     messages = Message.objects.filter(pk__in=message_pks)
-    messages.update(external_id=response['id'])
-    messages.update_status(response['status'])
+    messages.update(external_id=response["id"])
+    messages.update_status(response["status"])
diff --git a/hypha/apply/activity/templates/activity/include/action_list.html b/hypha/apply/activity/templates/activity/include/action_list.html
index 858131d59d4817cc8d9212c5f6e48a32180c2981..e1028e5bc15d9eb2e4659d09736ce9df3f25c518 100644
--- a/hypha/apply/activity/templates/activity/include/action_list.html
+++ b/hypha/apply/activity/templates/activity/include/action_list.html
@@ -2,5 +2,5 @@
 {% for action in actions %}
     {% include "activity/include/listing_base.html" with activity=action %}
 {% empty %}
-{% trans "There are no actions." %}
+    {% trans "There are no actions." %}
 {% endfor %}
diff --git a/hypha/apply/activity/templates/activity/include/comment_form.html b/hypha/apply/activity/templates/activity/include/comment_form.html
index e12a5c87116c7e105ecb7b81f95f38a19c0f9f7d..4dc4dcffc41d17affb87e52f9f0f4b512ca6bd6e 100644
--- a/hypha/apply/activity/templates/activity/include/comment_form.html
+++ b/hypha/apply/activity/templates/activity/include/comment_form.html
@@ -1,6 +1,6 @@
 {% load i18n %}
 
-<h4>Add communication</h4>
+<h4 class="m-0">Add communication</h4>
 <div class="wrapper wrapper--comments">
     {% trans "Submit" as submit %}
     {% include "funds/includes/delegated_form_base.html" with form=comment_form value=submit extra_classes="form__comments" %}
diff --git a/hypha/apply/activity/templates/activity/include/listing_base.html b/hypha/apply/activity/templates/activity/include/listing_base.html
index 00926d64fb11fe248c4e5e5641912c0c01809956..450b1dc5b7e154cf32848f485238b35a2b273920 100644
--- a/hypha/apply/activity/templates/activity/include/listing_base.html
+++ b/hypha/apply/activity/templates/activity/include/listing_base.html
@@ -1,12 +1,12 @@
 {% load i18n activity_tags bleach_tags markdown_tags submission_tags apply_tags %}
-<div class="feed__item feed__item--{{ activity.type }}">
+<div class="feed__item feed__item--{{ activity.type }}" id="communications#{{ activity.id }}">
     <div class="feed__pre-content">
         <p class="feed__label feed__label--{{ activity.type }}">{{ activity.type|capfirst }}</p>
     </div>
     <div class="feed__content js-feed-content">
         <div class="feed__meta js-feed-meta">
             <p class="feed__label feed__label--{{ activity.type }} feed__label--mobile">{{ activity.type|capfirst }}</p>
-            <p class="feed__meta-item"><span>{{ activity|display_author:request.user }}</span> <relative-time class="text-gray-500 text-sm" datetime={{ activity.timestamp|date:"c" }}>{{ activity.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time> </p>
+            <p class="feed__meta-item"><span>{{ activity|display_author:request.user }}</span> <relative-time class="text-fg-muted text-sm" datetime={{ activity.timestamp|date:"c" }}>{{ activity.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time> </p>
 
             {% if editable %}
                 {% if activity.user == request.user %}
@@ -22,10 +22,10 @@
                 </p>
             {% endif %}
 
-                <p class="feed__meta-item feed__meta-item--right" {% if not activity.private %} hidden {% endif %}>
-                    <svg class="icon icon--eye"><use xlink:href="#eye"></use></svg>
-                    <span class="js-comment-visibility">{{ activity.visibility }}</span>
-                </p>
+            <p class="feed__meta-item feed__meta-item--right" {% if not activity.private %} hidden {% endif %}>
+                <svg class="icon icon--eye"><use xlink:href="#eye"></use></svg>
+                <span class="js-comment-visibility">{{ activity.visibility|visibility_display:request.user }}</span>
+            </p>
         </div>
 
         <p class="feed__heading">
@@ -35,9 +35,9 @@
 
             {% if editable %}
                 <div class="feed__comment js-comment" data-id="{{activity.id}}" data-comment="{{activity|display_for:request.user|to_markdown}}"
-                data-visibility-options="{{activity|visibility_options:activity.user}}"
-                data-visibility="{{activity.visibility}}"
-                data-edit-url="{% url 'api:v1:comments-edit' pk=activity.pk %}">
+                     data-visibility-options="{{activity|visibility_options:activity.user}}"
+                     data-visibility="{{activity.visibility}}"
+                     data-edit-url="{% url 'api:v1:comments-edit' pk=activity.pk %}">
                     {{ activity|display_for:request.user|submission_links|markdown|bleach }}
                 </div>
 
@@ -49,9 +49,9 @@
             {% if not submission_title and activity|user_can_see_related:request.user %}
                 {% with url=activity.related_object.get_absolute_url %}
                     {% if url %}
-                    <a href="{{ url }}" target="_blank" class="feed__related-item">
-                        {{ activity.related_object|model_verbose_name }} <svg class="icon"><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-                    </a>
+                        <a href="{{ url }}" target="_blank" class="feed__related-item">
+                            {% trans "View " %}{{ activity.related_object|model_verbose_name }} <svg class="icon"><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                        </a>
                     {% endif %}
                 {% endwith %}
             {% endif %}
diff --git a/hypha/apply/activity/templates/activity/include/notifications_dropdown.html b/hypha/apply/activity/templates/activity/include/notifications_dropdown.html
index a1c538d4da5b5a5ccea6ffe81c45fa7c1b0314a4..65d7830fbac72b004565e03d1ad0bf8d40cc7b3c 100644
--- a/hypha/apply/activity/templates/activity/include/notifications_dropdown.html
+++ b/hypha/apply/activity/templates/activity/include/notifications_dropdown.html
@@ -8,12 +8,12 @@
         </div>
 
         {% for activity in latest_notifications %}
-        <p class="notifications__item">
-            <strong>{{ activity.source_content_type.name|source_type }} </strong>
-            <a href="{{ activity.source.get_absolute_url }}{% if activity.type == 'comment' %}#communications{% endif %}">{{ activity.source.title|capfirst|truncatechars:15 }}</a>
-            : {{ activity.user.get_full_name }} {% if activity.type == 'comment' %}{% trans "made a comment" %}{% else %} {{ activity|display_for:request.user }}{% endif %}
-            {% if activity.related_object %}<a href="{{ activity.related_object.get_absolute_url }}">{{ activity.related_object|model_verbose_name }}</a>{% endif %}
-        </p>
+            <p class="notifications__item">
+                <strong>{{ activity.source_content_type.name|source_type }} </strong>
+                <a href="{{ activity.source.get_absolute_url }}{% if activity.type == 'comment' %}#communications{% endif %}">{{ activity.source.title|capfirst|truncatechars:15 }}</a>
+                : {{ activity.user.get_full_name }} {% if activity.type == 'comment' %}{% trans "made a comment" %}{% else %} {{ activity|display_for:request.user }}{% endif %}
+                {% if activity.related_object %}<a href="{{ activity.related_object.get_absolute_url }}">{{ activity.related_object|model_verbose_name }}</a>{% endif %}
+            </p>
         {% endfor %}
 
     </div>
diff --git a/hypha/apply/activity/templates/activity/notifications.html b/hypha/apply/activity/templates/activity/notifications.html
index 811ecabaeb4170b12bd9c02e0e8e3d3ba059d41b..ebe60b9a8b6f2cd1be350d57c860456de824088c 100644
--- a/hypha/apply/activity/templates/activity/notifications.html
+++ b/hypha/apply/activity/templates/activity/notifications.html
@@ -2,68 +2,68 @@
 {% load i18n static activity_tags apply_tags bleach_tags markdown_tags submission_tags %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <div class="admin-bar__inner--with-button">
-            <h1 class="gamma heading heading--no-margin heading--bold">{% trans "Notifications" %}</h1>
-            <form class="form notifications__filters" method="get">
-                {{ filter.form }}
-                <button class="button button--primary" type="submit" value="Filter">{% trans "Filter" %}</button>
-            </form>
-        </div>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <div class="admin-bar__inner--with-button">
+                <h1 class="gamma heading heading--no-margin heading--bold">{% trans "Notifications" %}</h1>
+                <form class="form notifications__filters" method="get">
+                    {{ filter.form }}
+                    <button class="button button--primary" type="submit" value="Filter">{% trans "Filter" %}</button>
+                </form>
+            </div>
 
-        <div class="tabs js-tabs">
-            <div class="tabs__container">
-                <a class="tab__item" href="#comments" data-tab="tab-1">
-                    {% trans "Communications" %}
-                </a>
+            <div class="tabs js-tabs">
+                <div class="tabs__container">
+                    <a class="tab__item" href="#comments" data-tab="tab-1">
+                        {% trans "Communications" %}
+                    </a>
 
-                <a class="tab__item" href="#actions" data-tab="tab-2">
-                    {% trans "Activity Feed" %}
-                </a>
+                    <a class="tab__item" href="#actions" data-tab="tab-2">
+                        {% trans "Activity Feed" %}
+                    </a>
+                </div>
             </div>
         </div>
     </div>
-</div>
 
-<div class="wrapper wrapper--large wrapper--tabs js-tabs-content">
+    <div class="wrapper wrapper--large wrapper--tabs js-tabs-content">
     {# Tab 1 #}
-    <div class="tabs__content" id="tab-1">
-        {% for activity in object_list %}
-            {% if activity.type == 'comment' %}
-                <div class="feed__item feed__item--{{ activity.type }}">
-                    <div class="feed__pre-content">
-                        <p class="feed__label feed__label--{{ activity.source_content_type.name|source_type|lower }}">{{ activity.source_content_type.name|source_type }}</p>
-                    </div>
-                    <div class="feed__content js-feed-content">
-                        <div class="feed__meta js-feed-meta">
-                            <p class="feed__meta-item"><a href="{{ activity.source.get_absolute_url }}#communications">{{ activity.source.title|capfirst }}</a>
-                                : {{ activity.user.get_full_name }} {% trans "made a comment" %} <relative-time class="text-gray-500 text-sm" datetime={{ activity.timestamp|date:"c" }}>{{ activity.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time></p>
+        <div class="tabs__content" id="tab-1">
+            {% for activity in object_list %}
+                {% if activity.type == 'comment' %}
+                    <div class="feed__item feed__item--{{ activity.type }}">
+                        <div class="feed__pre-content">
+                            <p class="feed__label feed__label--{{ activity.source_content_type.name|source_type|lower }}">{{ activity.source_content_type.name|source_type }}</p>
+                        </div>
+                        <div class="feed__content js-feed-content">
+                            <div class="feed__meta js-feed-meta">
+                                <p class="feed__meta-item"><a href="{{ activity.source.get_absolute_url }}#communications">{{ activity.source.title|capfirst }}</a>
+                                    : {{ activity.user.get_full_name }} {% trans "made a comment" %} <relative-time class="text-fg-muted text-sm" datetime={{ activity.timestamp|date:"c" }}>{{ activity.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time></p>
+                            </div>
                         </div>
                     </div>
-                </div>
-            {% endif %}
-        {% endfor %}
-    </div>
+                {% endif %}
+            {% endfor %}
+        </div>
     {# Tab 2 #}
-    <div class="tabs__content" id="tab-2">
-        {% for activity in object_list %}
-            {% if activity.type == 'action' %}
-                <div class="feed__item feed__item--{{ activity.type }}">
-                    <div class="feed__pre-content">
-                        <p class="feed__label feed__label--{{ activity.source_content_type.name|source_type|lower }}">{{ activity.source_content_type.name|source_type }}</p>
-                    </div>
-                    <div class="feed__content js-feed-content">
-                        <div class="feed__meta js-feed-meta">
-                            <p class="feed__meta-item"><a href="{{ activity.source.get_absolute_url }}">{{ activity.source.title|capfirst }}</a>
-                                : {{ activity.user.get_full_name }} {{ activity|display_for:request.user }} <relative-time class="text-gray-500 text-sm" datetime={{ activity.timestamp|date:"c" }}>{{ activity.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time> {% if activity.related_object %}<a href="{{ activity.related_object.get_absolute_url }}" class="feed__related-item">{{ activity.related_object|model_verbose_name }} <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg></a>{% endif %}</p>
+        <div class="tabs__content" id="tab-2">
+            {% for activity in object_list %}
+                {% if activity.type == 'action' %}
+                    <div class="feed__item feed__item--{{ activity.type }}">
+                        <div class="feed__pre-content">
+                            <p class="feed__label feed__label--{{ activity.source_content_type.name|source_type|lower }}">{{ activity.source_content_type.name|source_type }}</p>
+                        </div>
+                        <div class="feed__content js-feed-content">
+                            <div class="feed__meta js-feed-meta">
+                                <p class="feed__meta-item"><a href="{{ activity.source.get_absolute_url }}">{{ activity.source.title|capfirst }}</a>
+                                    : {{ activity.user.get_full_name }} {{ activity|display_for:request.user }} <relative-time class="text-fg-muted text-sm" datetime={{ activity.timestamp|date:"c" }}>{{ activity.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time> {% if activity.related_object %}<a href="{{ activity.related_object.get_absolute_url }}" class="feed__related-item">{{ activity.related_object|model_verbose_name }} <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg></a>{% endif %}</p>
+                            </div>
                         </div>
                     </div>
-                </div>
-            {% endif %}
-        {% endfor %}
+                {% endif %}
+            {% endfor %}
+        </div>
     </div>
-</div>
 
 {% endblock %}
 
diff --git a/hypha/apply/activity/templates/messages/email/applicant_base.html b/hypha/apply/activity/templates/messages/email/applicant_base.html
index 636c74b1e151fc3fe58c71b684fc18a921933cdb..add652564c28e562b2b420d7ebed13094991e867 100644
--- a/hypha/apply/activity/templates/messages/email/applicant_base.html
+++ b/hypha/apply/activity/templates/messages/email/applicant_base.html
@@ -4,8 +4,8 @@
 {% block salutation %}{% blocktrans with name=source.user.get_full_name|default:"applicant" %}Dear {{ name }},{% endblocktrans %}{% endblock %}
 
 {% block more_info %}{% trans "Link to your application" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
-{% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
+    {% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
 
-{% trans "See our guide for more information" %}: {{ ORG_GUIDE_URL }}
+    {% trans "See our guide for more information" %}: {{ ORG_GUIDE_URL }}
 
-{% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}{% endblock %}
+    {% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/assign_paf_approvers.html b/hypha/apply/activity/templates/messages/email/assign_paf_approvers.html
index e87757f02a2ab35725d07c94407964a4eb2bf292..260d98bbf7ede78d2609190dc432133c569c63ef 100644
--- a/hypha/apply/activity/templates/messages/email/assign_paf_approvers.html
+++ b/hypha/apply/activity/templates/messages/email/assign_paf_approvers.html
@@ -4,11 +4,11 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "Project documents are ready to be assigned for approval." %}
+    {% trans "Project documents are ready to be assigned for approval." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
-{% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
+    {% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/base.html b/hypha/apply/activity/templates/messages/email/base.html
index 32d0a614dc983a5d62c6c5598225644c0dec5e4b..d1d595f06cc8482563aba563351d79b20bc1f7f3 100644
--- a/hypha/apply/activity/templates/messages/email/base.html
+++ b/hypha/apply/activity/templates/messages/email/base.html
@@ -6,9 +6,9 @@
 {% block more_info %}{% endblock %}
 
 {% blocktrans %}Kind Regards,
-The {{ ORG_SHORT_NAME }} Team{% endblocktrans %}
+    The {{ ORG_SHORT_NAME }} Team{% endblocktrans %}
 
--- 
+--
 {{ ORG_LONG_NAME }}
 {% if PUBLIC_SITE.root_url %}{{ PUBLIC_SITE.root_url }}{% elif ORG_URL %}{{ ORG_URL }}{% endif %}
 {% block post_signature_content %}{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/batch_ready_to_review.html b/hypha/apply/activity/templates/messages/email/batch_ready_to_review.html
index 476ec5111cb774c3670bf9c573c9f14ec5592dc8..acdb60888da913bef42f68b50fdb7cf2ff2bc4ce 100644
--- a/hypha/apply/activity/templates/messages/email/batch_ready_to_review.html
+++ b/hypha/apply/activity/templates/messages/email/batch_ready_to_review.html
@@ -4,11 +4,11 @@
 {% block salutation %}{% trans "Dear Reviewer," %}{% endblock %}
 
 {% block content %}
-{% trans "New applications have been added to your review list." %}
-{% for submission in sources %}
+    {% trans "New applications have been added to your review list." %}
+    {% for submission in sources %}
 
-{% trans "Title" %}: {{ submission.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
-{% endfor %}
+        {% trans "Title" %}: {{ submission.title }}
+        {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
+    {% endfor %}
 
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/comment.html b/hypha/apply/activity/templates/messages/email/comment.html
index 10c9c2d76a4aa6dfdf8e4e3ae4b57130e5dcaf8b..adcc0d0a0756789abb67f872d2cc272b5f823709 100644
--- a/hypha/apply/activity/templates/messages/email/comment.html
+++ b/hypha/apply/activity/templates/messages/email/comment.html
@@ -3,8 +3,8 @@
 {% load i18n %}
 {% block content %}{% blocktrans with title=source.title user=comment.user %}There has been a new comment on "{{ title }}" by {{ user }}.{% endblocktrans %}
 
-{% trans "Read the full comment here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications{% endblock %}
+    {% trans "Read the full comment here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications{% endblock %}
 
 {% block more_info %}
-{% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}
+    {% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/contract_uploaded.html b/hypha/apply/activity/templates/messages/email/contract_uploaded.html
index 682a449cee9183f1532adb1459852d4ea1ad683c..efe88ae8faed5093459f7164b3e3f269a1c9f4ef 100644
--- a/hypha/apply/activity/templates/messages/email/contract_uploaded.html
+++ b/hypha/apply/activity/templates/messages/email/contract_uploaded.html
@@ -3,33 +3,33 @@
 {% load i18n %}
 
 {% block salutation %}
-{% if request.user != source.user %}
-{% blocktrans with name=source.user.get_full_name|default:"applicant" %}Dear {{ name }},{% endblocktrans %}
-{% endif %}
+    {% if request.user != source.user %}
+        {% blocktrans with name=source.user.get_full_name|default:"vendor" %}Dear {{ name }},{% endblocktrans %}
+    {% endif %}
 {% endblock %}
 
 {% block content %}
 
-{% trans "A new contract has been added to your Project" %}:
+    {% trans "A new contract has been added to your Project" %}:
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 
-{% if contract.is_signed %}
-{% trans "This contract has already been signed and there is no action for you to take." %}
-{% else %}
-{% blocktrans %}Please review the contract and sign it before reuploading it to your Project page for the {{ ORG_SHORT_NAME }} Team to approve.{% endblocktrans %}
-{% endif %}
+    {% if contract.is_signed %}
+        {% trans "This contract has already been signed and there is no action for you to take." %}
+    {% else %}
+        {% blocktrans %}Please review the contract and sign it before reuploading it to your Project page for the {{ ORG_SHORT_NAME }} Team to approve.{% endblocktrans %}
+    {% endif %}
 {% endblock %}
 
 
 {% block more_info %}
-{% if request.user != source.user %}
-{% trans "Link to your application" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
-{% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
+    {% if request.user != source.user %}
+        {% trans "Link to your application" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+        {% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
 
-{% trans "See our guide for more information" %}: {{ ORG_GUIDE_URL }}
+        {% trans "See our guide for more information" %}: {{ ORG_GUIDE_URL }}
 
-{% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}
-{% endif %}
+        {% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}
+    {% endif %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/determination.html b/hypha/apply/activity/templates/messages/email/determination.html
index f47f293f49d52e94de7aa7986024706b8fbf4cff..99f53547de21d00620e0a0f17d9a68ca8fa82808 100644
--- a/hypha/apply/activity/templates/messages/email/determination.html
+++ b/hypha/apply/activity/templates/messages/email/determination.html
@@ -3,6 +3,6 @@
 
 {% block content %}{% trans "Your application has been reviewed and the outcome is" %}: {{ determination.clean_outcome }}
 
-{{ determination.message|bleach|striptags }}
+    {{ determination.message|bleach|striptags }}
 
-{% trans "Read the full determination here" %}: {{ request.scheme }}://{{ request.get_host }}{{ determination.get_absolute_url }}{% endblock %}
+    {% trans "Read the full determination here" %}: {{ request.scheme }}://{{ request.get_host }}{{ determination.get_absolute_url }}{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/invited_to_proposal.html b/hypha/apply/activity/templates/messages/email/invited_to_proposal.html
index 27bac4f1bed69573ca2a4c88774eea65d8dde9c7..02bf64edc45b40142275c7060d6ac98b6de3f6ca 100644
--- a/hypha/apply/activity/templates/messages/email/invited_to_proposal.html
+++ b/hypha/apply/activity/templates/messages/email/invited_to_proposal.html
@@ -3,11 +3,11 @@
 {% load i18n %}
 {% block content %}{% blocktrans %}We’ve reviewed your Concept note and think it could be a good fit for {{ ORG_SHORT_NAME }} funding. We would like to invite you to submit a Proposal with more details about your project. You will receive a second email linking to a determination message with detailed feedback.{% endblocktrans %}
 
-{% blocktrans %}Please review our Proposal Guide at {{ ORG_GUIDE_URL }} to learn more about the information we’d like to see. In the proposal please also address the feedback we provided in the concept note determination.{% endblocktrans %}{% endblock %}
+    {% blocktrans %}Please review our Proposal Guide at {{ ORG_GUIDE_URL }} to learn more about the information we’d like to see. In the proposal please also address the feedback we provided in the concept note determination.{% endblocktrans %}{% endblock %}
 
 {% block more_info %}{% trans "Here is the link to start creating your proposal" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
-{% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
+    {% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
 
-{% blocktrans %}The system will allow you to save a draft of your proposal as you work on it. When you feel it is ready for our review, please click the “Submit” button and we’ll know to take a look at it. We’ll reply to you with feedback on your Proposal as quickly as possible.{% endblocktrans %}
+    {% blocktrans %}The system will allow you to save a draft of your proposal as you work on it. When you feel it is ready for our review, please click the “Submit” button and we’ll know to take a look at it. We’ll reply to you with feedback on your Proposal as quickly as possible.{% endblocktrans %}
 
-{% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}{% endblock %}
+    {% blocktrans %}If you have any issues accessing the submission system or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/invoice_approved.html b/hypha/apply/activity/templates/messages/email/invoice_approved.html
index bfd469580ee34bc162486d4098de4b3dcc1476ee..722cb477e45144ba7f78a915f6ccbc3559d7f500 100644
--- a/hypha/apply/activity/templates/messages/email/invoice_approved.html
+++ b/hypha/apply/activity/templates/messages/email/invoice_approved.html
@@ -4,11 +4,11 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "An Invoice is waiting for your approval." %}
+    {% trans "An Invoice is waiting for your approval." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ invoice.get_absolute_url }}
-{% trans "Project" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ invoice.get_absolute_url }}
+    {% trans "Project" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/invoice_status_updated.html b/hypha/apply/activity/templates/messages/email/invoice_status_updated.html
index 70c02082cb30e6f5628b81fe954c993a55af85f2..0aeba8e538035629a31340b51850bc327ccebe3f 100644
--- a/hypha/apply/activity/templates/messages/email/invoice_status_updated.html
+++ b/hypha/apply/activity/templates/messages/email/invoice_status_updated.html
@@ -1,18 +1,19 @@
 {% extends "messages/email/applicant_base.html" %}
 
-{% load i18n %}
+{% load i18n invoice_tools %}
 {% block content %}
-{% blocktrans with title=source.title date_from=invoice.date_from date_to=invoice.date_to %}An {{ ORG_SHORT_NAME }} staff member has updated your invoice for {{ title }} for period {{ date_from }} to {{ date_to }}.{% endblocktrans %}
+    {% display_invoice_status_for_user source.user invoice as invoice_status %}
+    {% blocktrans with title=source.title date_from=invoice.date_from date_to=invoice.date_to %}An {{ ORG_SHORT_NAME }} staff member has updated your invoice for {{ title }} for period {{ date_from }} to {{ date_to }}.{% endblocktrans %}
 
-{% blocktrans with status=invoice.get_status_display %}It is now {{ status }}.{% endblocktrans %}
+    {% blocktrans %}It is now {{ invoice_status }}.{% endblocktrans %}
 
-{% if has_changes_requested and invoice.comment %}
-{% trans "The staff member left this comment" %}:
+    {% if has_changes_requested and invoice.comment %}
+        {% trans "The staff member left this comment" %}:
 
-    {{ invoice.comment }}
-{% endif %}
+        {{ invoice.comment }}
+    {% endif %}
 
-{% trans "Invoice Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ invoice.get_absolute_url }}
-{% trans "Title" %}: {{ source.title }}
-{% trans "Project Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Invoice Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ invoice.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Project Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/invoice_updated.html b/hypha/apply/activity/templates/messages/email/invoice_updated.html
index 3824eec30fc04235b1bea6ad484adbcd661ab853..df64ca24cf6b53d46dc481d910dfdf8c333ac495 100644
--- a/hypha/apply/activity/templates/messages/email/invoice_updated.html
+++ b/hypha/apply/activity/templates/messages/email/invoice_updated.html
@@ -1,11 +1,12 @@
 {% extends "messages/email/applicant_base.html" %}
 
-{% load i18n %}
+{% load i18n invoice_tools %}
 {% block content %}
+    {% display_invoice_status_for_user source.user invoice as invoice_status %}
 
-{% blocktrans with title=source.title date_from=invoice.date_from date_to=invoice.date_to %}An {{ ORG_SHORT_NAME }} staff member has updated your invoice for {{ title }} for period {{ date_from }} to {{ date_to }}.{% endblocktrans %}
-{% blocktrans with status=invoice.get_status_display %}It is now {{ status }}.{% endblocktrans %}
+    {% blocktrans with title=source.title date_from=invoice.date_from date_to=invoice.date_to %}An {{ ORG_SHORT_NAME }} staff member has updated your invoice for {{ title }} for period {{ date_from }} to {{ date_to }}.{% endblocktrans %}
+    {% blocktrans %}It is now {{ invoice_status }}.{% endblocktrans %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/paf_for_approval.html b/hypha/apply/activity/templates/messages/email/paf_for_approval.html
index 628b6a7e608ad10bc57d0e07178f8f6e1cb34f80..979e0d694541dd5e8747439bef19d724cc7e67ab 100644
--- a/hypha/apply/activity/templates/messages/email/paf_for_approval.html
+++ b/hypha/apply/activity/templates/messages/email/paf_for_approval.html
@@ -4,11 +4,11 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "A Project is awaiting your review." %}
+    {% trans "A Project is awaiting your review." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
-{% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
+    {% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/partners_update_applicant.html b/hypha/apply/activity/templates/messages/email/partners_update_applicant.html
index 494b7d34b091a9454f466c90cb46b6339b15830c..bb32ef59dc3513ced49ba717eafef946146274c3 100644
--- a/hypha/apply/activity/templates/messages/email/partners_update_applicant.html
+++ b/hypha/apply/activity/templates/messages/email/partners_update_applicant.html
@@ -2,10 +2,10 @@
 
 {% load i18n %}
 {% block content %}
-{% trans "New partner(s) has been added to your submission." %}
-{% for partner in added %}
-* {{ partner }}
-{% endfor %}
-{% trans "Title" %}: {{ submission.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
+    {% trans "New partner(s) has been added to your submission." %}
+    {% for partner in added %}
+        * {{ partner }}
+    {% endfor %}
+    {% trans "Title" %}: {{ submission.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/partners_update_partner.html b/hypha/apply/activity/templates/messages/email/partners_update_partner.html
index 4707dc924a1cac3e2016b6811f7e43294973c089..e81705377bbf832aba98cac1b3cc36328a56aa95 100644
--- a/hypha/apply/activity/templates/messages/email/partners_update_partner.html
+++ b/hypha/apply/activity/templates/messages/email/partners_update_partner.html
@@ -4,8 +4,8 @@
 {% block salutation %}{% trans "Dear Partner," %}{% endblock %}
 
 {% block content %}
-{% trans "You have been added as a partner the following submission." %}
+    {% trans "You have been added as a partner the following submission." %}
 
-{% trans "Title" %}: {{ submission.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
+    {% trans "Title" %}: {{ submission.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ submission.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/project_final_approval.html b/hypha/apply/activity/templates/messages/email/project_final_approval.html
index 762e63e1a1063c0b47b6637a8a1953bb50f0b58f..84a31ca594e6341a0a2d056d1155b7f07d0ca15a 100644
--- a/hypha/apply/activity/templates/messages/email/project_final_approval.html
+++ b/hypha/apply/activity/templates/messages/email/project_final_approval.html
@@ -4,11 +4,11 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "A Project is awaiting final approval." %}
+    {% trans "A Project is awaiting final approval." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
-{% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
+    {% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/project_request_change.html b/hypha/apply/activity/templates/messages/email/project_request_change.html
index 64bf7ae516b727557788ebb7137fbfa257b6cbbe..1482407df7d6feaf019e2f3957b288fd97161aad 100644
--- a/hypha/apply/activity/templates/messages/email/project_request_change.html
+++ b/hypha/apply/activity/templates/messages/email/project_request_change.html
@@ -4,9 +4,9 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "A Project has been rejected by PAF reviewers, please update it accordingly and resubmit it to the reviewers." %}
+    {% trans "A Project has been rejected by PAF reviewers, please update it accordingly and resubmit it to the reviewers." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:detail' pk=source.pk %}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:detail' pk=source.pk %}
 
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/ready_for_contracting.html b/hypha/apply/activity/templates/messages/email/ready_for_contracting.html
index 9748a6c5ae59a66bc7da6e81f22dc7ee6d203f43..a1065fa4a829ffda8b618ae835bf50c9c59144e6 100644
--- a/hypha/apply/activity/templates/messages/email/ready_for_contracting.html
+++ b/hypha/apply/activity/templates/messages/email/ready_for_contracting.html
@@ -4,12 +4,12 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "A Project is waiting for contract" %}
+    {% trans "A Project is waiting for contract" %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:detail' pk=source.pk %}
-{% trans "Project Approval Form" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
-{% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:detail' pk=source.pk %}
+    {% trans "Project Approval Form" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
+    {% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/ready_for_invoicing.html b/hypha/apply/activity/templates/messages/email/ready_for_invoicing.html
index bae568e1f14f29443c837167c033f39e71d923e5..6e9d1d1c8e13667ea379eb4347cf7f1b01bef45f 100644
--- a/hypha/apply/activity/templates/messages/email/ready_for_invoicing.html
+++ b/hypha/apply/activity/templates/messages/email/ready_for_invoicing.html
@@ -4,8 +4,8 @@
 {% block content %}{% blocktrans with title=source.title %}The contract for your project "{{ title }}" has approved. Now, your project is ready for invoicing.{% endblocktrans %}{% endblock %}
 
 {% block more_info %}{% trans "Link to your project" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
-{% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
+    {% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
 
-{% trans "See our guide for more information" %}: {{ ORG_GUIDE_URL }}
+    {% trans "See our guide for more information" %}: {{ ORG_GUIDE_URL }}
 
-{% blocktrans %}If you have any issues accessing the project or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}{% endblock %}
+    {% blocktrans %}If you have any issues accessing the project or other general inquiries, please email us at {{ ORG_EMAIL }}{% endblocktrans %}{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/ready_to_review.html b/hypha/apply/activity/templates/messages/email/ready_to_review.html
index 0e2174d775102cf5aac50525b15fa9718e09da49..1938cea4e9b1cdcd1cb432e7b90a1bd606959d2d 100644
--- a/hypha/apply/activity/templates/messages/email/ready_to_review.html
+++ b/hypha/apply/activity/templates/messages/email/ready_to_review.html
@@ -3,14 +3,14 @@
 {% load i18n %}
 {% block salutation %}{% trans "Dear Reviewer," %}{% endblock %}
 {% block content %}
-{% trans "This application is awaiting your review." %}
+    {% trans "This application is awaiting your review." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% if related.title %}
-{% trans "Reminder Title" %}: {{ related.title }}
-{% endif %}
-{% if related.description %}
-{% trans "Reminder Description" %}: {{ related.description }}
-{% endif %}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% if related.title %}
+        {% trans "Reminder Title" %}: {{ related.title }}
+    {% endif %}
+    {% if related.description %}
+        {% trans "Reminder Description" %}: {{ related.description }}
+    {% endif %}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/report_frequency.html b/hypha/apply/activity/templates/messages/email/report_frequency.html
index 63633b9404436d33470340d7633384ad61c52cbc..6d7f92bbd241374ccf9cb16c3d361ee4a5fbf653 100644
--- a/hypha/apply/activity/templates/messages/email/report_frequency.html
+++ b/hypha/apply/activity/templates/messages/email/report_frequency.html
@@ -3,12 +3,12 @@
 {% load i18n %}
 {% block content %}
 
-{% blocktrans with title=source.title %}An {{ ORG_SHORT_NAME }} staff member has changed the reporting frequency of {{ title }}.{% endblocktrans %}
+    {% blocktrans with title=source.title %}An {{ ORG_SHORT_NAME }} staff member has changed the reporting frequency of {{ title }}.{% endblocktrans %}
 
-{% trans "The new schedule is" %}: {{ config.get_frequency_display }}
+    {% trans "The new schedule is" %}: {{ config.get_frequency_display }}
 
-{% trans "The next report is due" %}: {{ config.current_due_report.end_date }}
+    {% trans "The next report is due" %}: {{ config.current_due_report.end_date }}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/report_notify.html b/hypha/apply/activity/templates/messages/email/report_notify.html
index 0bb6cfb002711c6bfb48b475f50787cfcf0debf1..5cf3ca270bfe49ff9b62b0fe571a5b63ea74fc5e 100644
--- a/hypha/apply/activity/templates/messages/email/report_notify.html
+++ b/hypha/apply/activity/templates/messages/email/report_notify.html
@@ -3,9 +3,9 @@
 {% load i18n %}
 {% block content %}
 
-{% blocktrans with title=source.title end_date=report.end_date %}A report is due for {{ title }} on {{ end_date }}.{% endblocktrans %}
+    {% blocktrans with title=source.title end_date=report.end_date %}A report is due for {{ title }} on {{ end_date }}.{% endblocktrans %}
 
-{% blocktrans %}More information can be found on the project page:{% endblocktrans %}
-{{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% blocktrans %}More information can be found on the project page:{% endblocktrans %}
+    {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/report_skipped.html b/hypha/apply/activity/templates/messages/email/report_skipped.html
index 0b86d857489cef4707bb2ac58d2d66b507435046..7419063f1b76970de80c59099946fa9d2045ba7a 100644
--- a/hypha/apply/activity/templates/messages/email/report_skipped.html
+++ b/hypha/apply/activity/templates/messages/email/report_skipped.html
@@ -3,12 +3,12 @@
 {% load i18n %}
 {% block content %}
 
-{% blocktrans %}An {{ ORG_SHORT_NAME }} staff member has marked a report as {% endblocktrans %}{% if report.skipped %}{% trans "no longer required" %}{% else %}{% trans "required" %}{% endif %}{% blocktrans with title=source.title start_date=report.start_date end_date=report.end_date %} for {{ title }} for period {{ start_date }} to {{ end_date }}.{% endblocktrans %}
+    {% blocktrans %}An {{ ORG_SHORT_NAME }} staff member has marked a report as {% endblocktrans %}{% if report.skipped %}{% trans "no longer required" %}{% else %}{% trans "required" %}{% endif %}{% blocktrans with title=source.title start_date=report.start_date end_date=report.end_date %} for {{ title }} for period {{ start_date }} to {{ end_date }}.{% endblocktrans %}
 
-{% if not report.skipped %}
-{% trans "This report was previously not required. Please ensure you now complete the report." %}
-{% endif %}
+    {% if not report.skipped %}
+        {% trans "This report was previously not required. Please ensure you now complete the report." %}
+    {% endif %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/report_submitted.html b/hypha/apply/activity/templates/messages/email/report_submitted.html
index d948fff052bd23d5bb104ba2e8a39f9d1e46538c..c67a17bc74528a946ffe957edf1ca6f35aee0857 100644
--- a/hypha/apply/activity/templates/messages/email/report_submitted.html
+++ b/hypha/apply/activity/templates/messages/email/report_submitted.html
@@ -2,10 +2,10 @@
 
 {% load i18n %}
 {% block content %}
-{% blocktrans with title=source.title start_date=report.start_date end_date=report.end_date %}An {{ ORG_SHORT_NAME }} staff member has submitted a report for {{ title }} for period {{ start_date }} to {{ end_date }}.{% endblocktrans %}
+    {% blocktrans with title=source.title start_date=report.start_date end_date=report.end_date %}An {{ ORG_SHORT_NAME }} staff member has submitted a report for {{ title }} for period {{ start_date }} to {{ end_date }}.{% endblocktrans %}
 
-{% trans "You can review the report here" %}: {{ request.scheme }}://{{ request.get_host }}{{ report.get_absolute_url }}
+    {% trans "You can review the report here" %}: {{ request.scheme }}://{{ request.get_host }}{{ report.get_absolute_url }}
 
-{% trans "Project" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Project" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/sent_to_compliance.html b/hypha/apply/activity/templates/messages/email/sent_to_compliance.html
index 628b6a7e608ad10bc57d0e07178f8f6e1cb34f80..979e0d694541dd5e8747439bef19d724cc7e67ab 100644
--- a/hypha/apply/activity/templates/messages/email/sent_to_compliance.html
+++ b/hypha/apply/activity/templates/messages/email/sent_to_compliance.html
@@ -4,11 +4,11 @@
 {% block salutation %}{% endblock %}
 
 {% block content %}
-{% trans "A Project is awaiting your review." %}
+    {% trans "A Project is awaiting your review." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
-{% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:projects:approval' pk=source.pk %}
+    {% trans "Original Submission" %}: {{ request.scheme }}://{{ request.get_host }}{% url 'apply:submissions:simplified' pk=source.submission.pk %}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/submission_confirmation.html b/hypha/apply/activity/templates/messages/email/submission_confirmation.html
index d33e67ee663d41a4e7a48f16cf6130e828324fb8..1a4a97222cd086ce3dd0f70c93256db3ef53e304 100644
--- a/hypha/apply/activity/templates/messages/email/submission_confirmation.html
+++ b/hypha/apply/activity/templates/messages/email/submission_confirmation.html
@@ -3,14 +3,14 @@
 {% load i18n %}
 {% block content %}{% blocktrans with title=source.title %}We appreciate your {{ title }} application submission to the {{ ORG_LONG_NAME }}.{% endblocktrans %}
 
-{% if source.is_draft %}{% trans "Please note that it is not submitted for review because it's still in draft." %} {% trans "You can access the draft at" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}{% else %}{% trans "We will review and reply to your submission as quickly as possible." %}{% endif %}
+    {% if source.is_draft %}{% trans "Please note that it is not submitted for review because it's still in draft." %} {% trans "You can access the draft at" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}{% else %}{% trans "We will review and reply to your submission as quickly as possible." %}{% endif %}
 
-{% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
+    {% trans "If you have any questions, please submit them here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications
 
-{% blocktrans %}If you have issues accessing the submission system or general inquiries, please email us at {{ ORG_EMAIL }}.{% endblocktrans %}
+    {% blocktrans %}If you have issues accessing the submission system or general inquiries, please email us at {{ ORG_EMAIL }}.{% endblocktrans %}
 
-{% with email_context=source.page.specific %}{{ email_context.confirmation_text_extra }}{% endwith %}
+    {% with email_context=source.page.specific %}{{ email_context.confirmation_text_extra }}{% endwith %}
 
-{% trans "Project name" %}: {{ source.title }}
-{% trans "Contact name" %}: {{ source.user.get_full_name }}
-{% trans "Contact email" %}: {{ source.user.email }}{% endblock %}
+    {% trans "Project name" %}: {{ source.title }}
+    {% trans "Contact name" %}: {{ source.user.get_full_name }}
+    {% trans "Contact email" %}: {{ source.user.email }}{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/submission_edit.html b/hypha/apply/activity/templates/messages/email/submission_edit.html
index 3ffec0193805c7b289f0cca9a14ecd9434ec8b1b..a5148a24a5f38f787eaa9275fa1d1ffe87042de2 100644
--- a/hypha/apply/activity/templates/messages/email/submission_edit.html
+++ b/hypha/apply/activity/templates/messages/email/submission_edit.html
@@ -2,5 +2,5 @@
 
 {% load i18n %}
 {% block content %}
-{% trans "Your submission has been edited by a member of staff." %}
+    {% trans "Your submission has been edited by a member of staff." %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/submit_contract_documents.html b/hypha/apply/activity/templates/messages/email/submit_contract_documents.html
index 1d2840ebff60386a2d02324e970823bc0d763af1..83d6401da513de05045c6f5f1bee7474e2d9b94d 100644
--- a/hypha/apply/activity/templates/messages/email/submit_contract_documents.html
+++ b/hypha/apply/activity/templates/messages/email/submit_contract_documents.html
@@ -6,10 +6,10 @@
 {% endblock %}
 
 {% block content %}
-{% trans "A Project's contract is awaiting your review." %}
+    {% trans "A Project's contract is awaiting your review." %}
 
-{% trans "Title" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Title" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 
-{% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
+    {% blocktrans with lead=source.lead email=source.lead.email %}Please contact {{ lead }} - {{ email }} if you have any questions.{% endblocktrans %}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/transition.html b/hypha/apply/activity/templates/messages/email/transition.html
index 4188597a6802f485ffaffb2125c34da05d504aae..ebb78fb8171992ca0afaec052bd9bb0bca8e0d81 100644
--- a/hypha/apply/activity/templates/messages/email/transition.html
+++ b/hypha/apply/activity/templates/messages/email/transition.html
@@ -3,4 +3,4 @@
 {% load i18n %}
 {% block content %}{% blocktrans with old_status=old_phase.public_name new_status=source.phase.public_name %}Your application is now in "{{ new_status }}" status (progressed from "{{ old_status }}").{% endblocktrans %}
 
-{% trans "Please submit any questions related to your application here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications{% endblock %}
+    {% trans "Please submit any questions related to your application here" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}#communications{% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/vendor_setup_needed.html b/hypha/apply/activity/templates/messages/email/vendor_setup_needed.html
index 53d1339fdb75910fdf0a42dc3a6bb6428e9eea47..15e6267b8a71208137d11923ce99379d2a56e4cd 100644
--- a/hypha/apply/activity/templates/messages/email/vendor_setup_needed.html
+++ b/hypha/apply/activity/templates/messages/email/vendor_setup_needed.html
@@ -2,11 +2,11 @@
 
 {% load i18n %}
 {% block content %}
-{% blocktrans %}A Project has been created for your submission on {{ ORG_SHORT_NAME }}.{% endblocktrans %}
+    {% blocktrans %}A Project has been created for your submission on {{ ORG_SHORT_NAME }}.{% endblocktrans %}
 
-{% trans "Next step is to complete Contracting Information by visiting project detail page." %}
+    {% trans "Next step is to complete Contracting Information by visiting project detail page." %}
 
-{% trans "Project" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
-{% trans "Submission" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.submission.get_absolute_url }}
+    {% trans "Project" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Submission" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.submission.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/email/vendor_updated.html b/hypha/apply/activity/templates/messages/email/vendor_updated.html
index 818cb1afb22d19fad0c41ec240fa7884faed89b7..a585c5a53fd19914e72e45c0989ca22cd49d8bb5 100644
--- a/hypha/apply/activity/templates/messages/email/vendor_updated.html
+++ b/hypha/apply/activity/templates/messages/email/vendor_updated.html
@@ -2,8 +2,8 @@
 
 {% load i18n %}
 {% block content %}
-{% blocktrans with title=source.title %}Contracting Information has been updated on {{ title }}.{% endblocktrans %}
+    {% blocktrans with title=source.title %}Contracting Information has been updated on {{ title }}.{% endblocktrans %}
 
-{% trans "Project" %}: {{ source.title }}
-{% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
+    {% trans "Project" %}: {{ source.title }}
+    {% trans "Link" %}: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }}
 {% endblock %}
diff --git a/hypha/apply/activity/templates/messages/slack_message.html b/hypha/apply/activity/templates/messages/slack_message.html
index 1974748d10599f1f3950bac5009d9f22736b1ab2..61cc29ce675547deb96d9f3cd3b6fcaa6e2af6a8 100644
--- a/hypha/apply/activity/templates/messages/slack_message.html
+++ b/hypha/apply/activity/templates/messages/slack_message.html
@@ -2,5 +2,5 @@
 <!--Template required for django-slack. We can customize it for channels, endpoint_url, etc as per the requirements.-->
 
 {% block text %}
-{{ message|safe }}
+    {{ message|safe }}
 {% endblock %}
diff --git a/hypha/apply/activity/templatetags/activity_tags.py b/hypha/apply/activity/templatetags/activity_tags.py
index bb11442bc086e398890f3fe6b3df025c450d08d0..d514d3c44cdd7f48247aea8d4dd40809b10b2b16 100644
--- a/hypha/apply/activity/templatetags/activity_tags.py
+++ b/hypha/apply/activity/templatetags/activity_tags.py
@@ -1,6 +1,7 @@
 import json
 
 from django import template
+from django.conf import settings
 
 from hypha.apply.determinations.models import Determination
 from hypha.apply.projects.models import Contract
@@ -13,8 +14,14 @@ register = template.Library()
 
 @register.filter
 def display_author(activity, user):
+    if user.is_applicant and (
+        activity.user.is_apply_staff
+        or activity.user.is_finance
+        or activity.user.is_contracting
+    ):
+        return settings.ORG_LONG_NAME
     if isinstance(activity.related_object, Review) and activity.source.user == user:
-        return 'Reviewer'
+        return "Reviewer"
     return activity.user.get_full_name_with_group()
 
 
@@ -57,6 +64,15 @@ def visibility_options(activity, user):
     return json.dumps(choices)
 
 
+@register.filter
+def visibility_display(visibility, user):
+    if not user.is_apply_staff and not user.is_finance and not user.is_contracting:
+        return f"{visibility} + {settings.ORG_SHORT_NAME} team"
+    if visibility != TEAM:
+        return f"{visibility} + team"
+    return visibility
+
+
 @register.filter
 def source_type(value):
     if value and "submission" in value:
diff --git a/hypha/apply/activity/tests/factories.py b/hypha/apply/activity/tests/factories.py
index 34bbce84be95aeb4357f73b592206f68a32b2e72..6f98839cee8f5d75c63da428675c3cf9dbcf87fc 100644
--- a/hypha/apply/activity/tests/factories.py
+++ b/hypha/apply/activity/tests/factories.py
@@ -25,7 +25,7 @@ class ActivityFactory(factory.django.DjangoModelFactory):
 
     source = factory.SubFactory(ApplicationSubmissionFactory)
     user = factory.SubFactory(UserFactory)
-    message = factory.Faker('sentence')
+    message = factory.Faker("sentence")
     timestamp = factory.LazyFunction(timezone.now)
 
 
@@ -48,8 +48,8 @@ class MessageFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Message
 
-    type = 'Email'
-    content = factory.Faker('sentence')
-    recipient = factory.Faker('email')
+    type = "Email"
+    content = factory.Faker("sentence")
+    recipient = factory.Faker("email")
     event = factory.SubFactory(EventFactory)
-    external_id = factory.LazyFunction(lambda: '<{}>'.format(uuid.uuid4()))
+    external_id = factory.LazyFunction(lambda: "<{}>".format(uuid.uuid4()))
diff --git a/hypha/apply/activity/tests/test_messaging.py b/hypha/apply/activity/tests/test_messaging.py
index 35dfd159db5a8552dbf0eca06067bac24bd064ef..79ef43c63529fd8efab3c3770e765d145bb7b9db 100644
--- a/hypha/apply/activity/tests/test_messaging.py
+++ b/hypha/apply/activity/tests/test_messaging.py
@@ -34,11 +34,9 @@ from .factories import CommentFactory, EventFactory, MessageFactory
 
 class TestAdapter(AdapterBase):
     """A test class which will pass the message type to send_message"""
-    adapter_type = 'Test Adapter'
-    messages = {
-        enum: enum.value
-        for enum in MESSAGES.__members__.values()
-    }
+
+    adapter_type = "Test Adapter"
+    messages = {enum: enum.value for enum in MESSAGES.__members__.values()}
 
     def send_message(self, message, **kwargs):
         pass
@@ -50,22 +48,22 @@ class TestAdapter(AdapterBase):
         pass
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class AdapterMixin(TestCase):
     adapter = None
     source_factory = None
 
     def process_kwargs(self, message_type, **kwargs):
-        if 'user' not in kwargs:
-            kwargs['user'] = UserFactory()
-        if 'source' not in kwargs:
-            kwargs['source'] = self.source_factory()
-        if 'request' not in kwargs:
-            kwargs['request'] = make_request()
+        if "user" not in kwargs:
+            kwargs["user"] = UserFactory()
+        if "source" not in kwargs:
+            kwargs["source"] = self.source_factory()
+        if "request" not in kwargs:
+            kwargs["request"] = make_request()
         if message_type in neat_related:
-            kwargs['related'] = kwargs.get('related', 'a thing')
+            kwargs["related"] = kwargs.get("related", "a thing")
         else:
-            kwargs['related'] = None
+            kwargs["related"] = None
 
         return kwargs
 
@@ -73,7 +71,7 @@ class AdapterMixin(TestCase):
         if not adapter:
             adapter = self.adapter
         kwargs = self.process_kwargs(message_type, **kwargs)
-        event = EventFactory(source=kwargs['source'])
+        event = EventFactory(source=kwargs["source"])
         adapter.process(message_type, event=event, **kwargs)
 
 
@@ -82,10 +80,10 @@ class TestBaseAdapter(AdapterMixin, TestCase):
     source_factory = ApplicationSubmissionFactory
 
     def setUp(self):
-        patched_class = patch.object(TestAdapter, 'send_message')
+        patched_class = patch.object(TestAdapter, "send_message")
         self.mock_adapter = patched_class.start()
         self.adapter = TestAdapter()
-        self.adapter.send_message.return_value = 'dummy_message'
+        self.adapter.send_message.return_value = "dummy_message"
         self.addCleanup(patched_class.stop)
 
     def test_can_send_a_message(self):
@@ -96,13 +94,13 @@ class TestBaseAdapter(AdapterMixin, TestCase):
         self.assertEqual(self.adapter.send_message.call_args[0], (message_type.value,))
 
     def test_doesnt_send_a_message_if_not_configured(self):
-        self.adapter_process('this_is_not_a_message_type')
+        self.adapter_process("this_is_not_a_message_type")
 
         self.adapter.send_message.assert_not_called()
 
     def test_calls_method_if_avaliable(self):
-        method_name = 'new_method'
-        return_message = 'Returned message'
+        method_name = "new_method"
+        return_message = "Returned message"
         setattr(self.adapter, method_name, lambda **kw: return_message)
         self.adapter.messages[method_name] = method_name
 
@@ -113,7 +111,7 @@ class TestBaseAdapter(AdapterMixin, TestCase):
 
     def test_that_kwargs_passed_to_send_message(self):
         message_type = MESSAGES.UPDATE_LEAD
-        kwargs = {'test': 'that', 'these': 'exist'}
+        kwargs = {"test": "that", "these": "exist"}
         self.adapter_process(message_type, **kwargs)
 
         self.adapter.send_message.assert_called_once()
@@ -122,9 +120,9 @@ class TestBaseAdapter(AdapterMixin, TestCase):
 
     def test_that_message_is_formatted(self):
         message_type = MESSAGES.UPDATE_LEAD
-        message = 'message value'
+        message = "message value"
 
-        with patch.dict(self.adapter.messages, {message_type: '{message_to_format}'}):
+        with patch.dict(self.adapter.messages, {message_type: "{message_to_format}"}):
             self.adapter_process(message_type, message_to_format=message)
 
         self.adapter.send_message.assert_called_once()
@@ -133,12 +131,14 @@ class TestBaseAdapter(AdapterMixin, TestCase):
     def test_can_include_extra_kwargs(self):
         message_type = MESSAGES.UPDATE_LEAD
 
-        with patch.dict(self.adapter.messages, {message_type: '{extra}'}):
-            with patch.object(self.adapter, 'extra_kwargs', return_value={'extra': 'extra'}):
+        with patch.dict(self.adapter.messages, {message_type: "{extra}"}):
+            with patch.object(
+                self.adapter, "extra_kwargs", return_value={"extra": "extra"}
+            ):
                 self.adapter_process(message_type)
 
         self.adapter.send_message.assert_called_once()
-        self.assertTrue('extra' in self.adapter.send_message.call_args[1])
+        self.assertTrue("extra" in self.adapter.send_message.call_args[1])
 
     @override_settings(SEND_MESSAGES=False)
     def test_django_messages_used(self):
@@ -158,10 +158,10 @@ class TestMessageBackendApplication(TestCase):
         self.mocked_adapter = Mock(AdapterBase)
         self.backend = MessengerBackend
         self.kwargs = {
-            'related': None,
-            'request': None,
-            'user': UserFactory(),
-            'source': self.source_factory(),
+            "related": None,
+            "request": None,
+            "user": UserFactory(),
+            "source": self.source_factory(),
         }
 
     def test_message_sent_to_adapter(self):
@@ -170,7 +170,9 @@ class TestMessageBackendApplication(TestCase):
 
         messenger(MESSAGES.UPDATE_LEAD, **self.kwargs)
 
-        adapter.process.assert_called_once_with(MESSAGES.UPDATE_LEAD, Event.objects.first(), **self.kwargs)
+        adapter.process.assert_called_once_with(
+            MESSAGES.UPDATE_LEAD, Event.objects.first(), **self.kwargs
+        )
 
     def test_message_sent_to_all_adapter(self):
         adapters = [self.mocked_adapter(), self.mocked_adapter()]
@@ -191,7 +193,9 @@ class TestMessageBackendApplication(TestCase):
 
         self.assertEqual(Event.objects.count(), 1)
         self.assertEqual(Event.objects.first().type, MESSAGES.UPDATE_LEAD.name)
-        self.assertEqual(Event.objects.first().get_type_display(), MESSAGES.UPDATE_LEAD.label)
+        self.assertEqual(
+            Event.objects.first().get_type_display(), MESSAGES.UPDATE_LEAD.label
+        )
         self.assertEqual(Event.objects.first().by, user)
 
 
@@ -205,11 +209,13 @@ class TestActivityAdapter(TestCase):
         self.adapter = ActivityAdapter()
 
     def test_activity_created(self):
-        message = 'test message'
+        message = "test message"
         user = UserFactory()
         submission = ApplicationSubmissionFactory()
 
-        self.adapter.send_message(message, user=user, source=submission, sources=[], related=None)
+        self.adapter.send_message(
+            message, user=user, source=submission, sources=[], related=None
+        )
 
         self.assertEqual(Activity.objects.count(), 1)
         activity = Activity.objects.first()
@@ -222,24 +228,24 @@ class TestActivityAdapter(TestCase):
 
         message = self.adapter.reviewers_updated([assigned_reviewer], [])
 
-        self.assertTrue('Added' in message)
-        self.assertFalse('Removed' in message)
+        self.assertTrue("Added" in message)
+        self.assertFalse("Removed" in message)
         self.assertTrue(str(assigned_reviewer.reviewer) in message)
 
     def test_reviewers_message_no_added(self):
         assigned_reviewer = AssignedReviewersFactory()
         message = self.adapter.reviewers_updated([], [assigned_reviewer])
 
-        self.assertFalse('Added' in message)
-        self.assertTrue('Removed' in message)
+        self.assertFalse("Added" in message)
+        self.assertTrue("Removed" in message)
         self.assertTrue(str(assigned_reviewer.reviewer) in message)
 
     def test_reviewers_message_both(self):
         added, removed = AssignedReviewersFactory.create_batch(2)
         message = self.adapter.reviewers_updated([added], [removed])
 
-        self.assertTrue('Added' in message)
-        self.assertTrue('Removed' in message)
+        self.assertTrue("Added" in message)
+        self.assertTrue("Removed" in message)
         self.assertTrue(str(added.reviewer) in message)
         self.assertTrue(str(removed.reviewer) in message)
 
@@ -258,19 +264,23 @@ class TestActivityAdapter(TestCase):
         self.assertTrue(str(without_role.reviewer) in message)
 
     def test_internal_transition_kwarg_for_invisible_transition(self):
-        submission = ApplicationSubmissionFactory(status='post_review_discussion')
-        kwargs = self.adapter.extra_kwargs(MESSAGES.TRANSITION, source=submission, sources=None)
+        submission = ApplicationSubmissionFactory(status="post_review_discussion")
+        kwargs = self.adapter.extra_kwargs(
+            MESSAGES.TRANSITION, source=submission, sources=None
+        )
 
-        self.assertEqual(kwargs['visibility'], TEAM)
+        self.assertEqual(kwargs["visibility"], TEAM)
 
     def test_public_transition_kwargs(self):
         submission = ApplicationSubmissionFactory()
-        kwargs = self.adapter.extra_kwargs(MESSAGES.TRANSITION, source=submission, sources=None)
+        kwargs = self.adapter.extra_kwargs(
+            MESSAGES.TRANSITION, source=submission, sources=None
+        )
 
-        self.assertNotIn('visibility', kwargs)
+        self.assertNotIn("visibility", kwargs)
 
     def test_handle_transition_public_to_public(self):
-        submission = ApplicationSubmissionFactory(status='more_info')
+        submission = ApplicationSubmissionFactory(status="more_info")
         old_phase = submission.workflow.phases_for()[0]
 
         message = self.adapter.handle_transition(old_phase, submission)
@@ -282,7 +292,7 @@ class TestActivityAdapter(TestCase):
         self.assertIn(old_phase.public_name, message[ALL])
 
     def test_handle_transition_to_private_to_public(self):
-        submission = ApplicationSubmissionFactory(status='more_info')
+        submission = ApplicationSubmissionFactory(status="more_info")
         old_phase = submission.workflow.phases_for()[1]
 
         message = self.adapter.handle_transition(old_phase, submission)
@@ -294,7 +304,7 @@ class TestActivityAdapter(TestCase):
         self.assertIn(old_phase.public_name, message[ALL])
 
     def test_handle_transition_to_public_to_private(self):
-        submission = ApplicationSubmissionFactory(status='internal_review')
+        submission = ApplicationSubmissionFactory(status="internal_review")
         old_phase = submission.workflow.phases_for()[0]
 
         message = self.adapter.handle_transition(old_phase, submission)
@@ -305,14 +315,16 @@ class TestActivityAdapter(TestCase):
     def test_lead_saved_on_activity(self):
         submission = ApplicationSubmissionFactory()
         user = UserFactory()
-        self.adapter.send_message('a message', user=user, source=submission, sources=[], related=user)
+        self.adapter.send_message(
+            "a message", user=user, source=submission, sources=[], related=user
+        )
         activity = Activity.objects.first()
         self.assertEqual(activity.related_object, user)
 
     def test_review_saved_on_activity(self):
         review = ReviewFactory()
         self.adapter.send_message(
-            'a message',
+            "a message",
             user=review.author.reviewer,
             source=review.submission,
             sources=[],
@@ -325,10 +337,10 @@ class TestActivityAdapter(TestCase):
 class TestSlackAdapter(AdapterMixin, TestCase):
     source_factory = ApplicationSubmissionFactory
 
-    backend = 'django_slack.backends.TestBackend'
-    target_url = 'https://my-slack-backend.com/incoming/my-very-secret-key'
-    target_room = '#<ROOM ID>'
-    token = 'fake-token'
+    backend = "django_slack.backends.TestBackend"
+    target_url = "https://my-slack-backend.com/incoming/my-very-secret-key"
+    target_room = "#<ROOM ID>"
+    token = "fake-token"
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
@@ -340,7 +352,7 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         error_message = "Missing configuration: Room ID"
         adapter = SlackAdapter()
         submission = ApplicationSubmissionFactory()
-        messages = adapter.send_message('my message', '', source=submission)
+        messages = adapter.send_message("my message", "", source=submission)
         self.assertEqual(messages, error_message)
 
     @override_settings(
@@ -353,7 +365,7 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         error_message = "Missing configuration: Slack Token"
         adapter = SlackAdapter()
         submission = ApplicationSubmissionFactory()
-        messages = adapter.send_message('my message', '', source=submission)
+        messages = adapter.send_message("my message", "", source=submission)
         self.assertEqual(messages, error_message)
 
     @override_settings(
@@ -367,12 +379,12 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         backend.reset_messages()
         submission = ApplicationSubmissionFactory()
         adapter = SlackAdapter()
-        message = 'my message'
-        adapter.send_message(message, '', source=submission)
+        message = "my message"
+        adapter.send_message(message, "", source=submission)
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 1)
-        message_payload = json.loads(messages[0]['payload'])
-        self.assertEqual(message_payload['text'], message)
+        message_payload = json.loads(messages[0]["payload"])
+        self.assertEqual(message_payload["text"], message)
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
@@ -383,16 +395,16 @@ class TestSlackAdapter(AdapterMixin, TestCase):
     def test_fund_custom_slack_channel(self):
         backend = get_backend()
         backend.reset_messages()
-        responses.add(responses.POST, self.target_url, status=200, body='OK')
-        submission = ApplicationSubmissionFactory(round__parent__slack_channel='dummy')
+        responses.add(responses.POST, self.target_url, status=200, body="OK")
+        submission = ApplicationSubmissionFactory(round__parent__slack_channel="dummy")
         adapter = SlackAdapter()
-        message = 'my message'
-        adapter.send_message(message, '', source=submission)
+        message = "my message"
+        adapter.send_message(message, "", source=submission)
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 1)
-        message_payload = json.loads(messages[0]['payload'])
-        self.assertEqual(message_payload['text'], message)
-        self.assertEqual(message_payload['channel'], '#dummy')
+        message_payload = json.loads(messages[0]["payload"])
+        self.assertEqual(message_payload["text"], message)
+        self.assertEqual(message_payload["channel"], "#dummy")
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
@@ -403,27 +415,33 @@ class TestSlackAdapter(AdapterMixin, TestCase):
     def test_fund_multiple_custom_slack_channel(self):
         backend = get_backend()
         backend.reset_messages()
-        submission = ApplicationSubmissionFactory(round__parent__slack_channel='dummy1, dummy2')
+        submission = ApplicationSubmissionFactory(
+            round__parent__slack_channel="dummy1, dummy2"
+        )
         adapter = SlackAdapter()
-        message = 'my message'
-        adapter.send_message(message, '', source=submission)
+        message = "my message"
+        adapter.send_message(message, "", source=submission)
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 2)
         for index, sent_message in enumerate(messages):
-            message_payload = json.loads(sent_message['payload'])
-            self.assertEqual(message_payload['text'], message)
-            self.assertEqual(message_payload['channel'], '#dummy' + str(index + 1))
+            message_payload = json.loads(sent_message["payload"])
+            self.assertEqual(message_payload["text"], message)
+            self.assertEqual(message_payload["channel"], "#dummy" + str(index + 1))
 
     def test_gets_lead_if_slack_set(self):
         adapter = SlackAdapter()
         submission = ApplicationSubmissionFactory()
-        recipients = adapter.recipients(MESSAGES.COMMENT, source=submission, related=None)
+        recipients = adapter.recipients(
+            MESSAGES.COMMENT, source=submission, related=None
+        )
         self.assertTrue(submission.lead.slack in recipients[0])
 
     def test_gets_blank_if_slack_not_set(self):
         adapter = SlackAdapter()
-        submission = ApplicationSubmissionFactory(lead__slack='')
-        recipients = adapter.recipients(MESSAGES.COMMENT, source=submission, related=None)
+        submission = ApplicationSubmissionFactory(lead__slack="")
+        recipients = adapter.recipients(
+            MESSAGES.COMMENT, source=submission, related=None
+        )
         self.assertTrue(submission.lead.slack in recipients[0])
 
     @override_settings(
@@ -437,8 +455,11 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         self.adapter_process(MESSAGES.NEW_SUBMISSION)
         self.assertEqual(Message.objects.count(), 1)
         sent_message = Message.objects.first()
-        self.assertEqual(sent_message.content[0:10], self.adapter.messages[MESSAGES.NEW_SUBMISSION][0:10])
-        self.assertEqual(sent_message.status, '200: OK')
+        self.assertEqual(
+            sent_message.content[0:10],
+            self.adapter.messages[MESSAGES.NEW_SUBMISSION][0:10],
+        )
+        self.assertEqual(sent_message.status, "200: OK")
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
@@ -451,11 +472,11 @@ class TestSlackAdapter(AdapterMixin, TestCase):
         backend.reset_messages()
         submission = ApplicationSubmissionFactory()
         adapter = SlackAdapter()
-        message = ''
-        message_status = adapter.send_message(message, '', source=submission)
+        message = ""
+        message_status = adapter.send_message(message, "", source=submission)
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 0)
-        self.assertEqual(message_status, '400: Bad Request')
+        self.assertEqual(message_status, "400: Bad Request")
 
 
 @override_settings(SEND_MESSAGES=True)
@@ -480,58 +501,67 @@ class TestEmailAdapter(AdapterMixin, TestCase):
         application = ApplicationSubmissionFactory()
         comment = CommentFactory(user=application.user, source=application)
 
-        self.adapter_process(MESSAGES.COMMENT, related=comment, user=comment.user, source=comment.source)
+        self.adapter_process(
+            MESSAGES.COMMENT, related=comment, user=comment.user, source=comment.source
+        )
         self.assertEqual(len(mail.outbox), 0)
 
     def test_reviewers_email(self):
         reviewers = ReviewerFactory.create_batch(4)
-        submission = ApplicationSubmissionFactory(status='external_review', reviewers=reviewers, workflow_stages=2)
+        submission = ApplicationSubmissionFactory(
+            status="external_review", reviewers=reviewers, workflow_stages=2
+        )
         self.adapter_process(MESSAGES.READY_FOR_REVIEW, source=submission)
 
         self.assertEqual(len(mail.outbox), 4)
-        self.assertTrue(mail.outbox[0].subject, 'ready to review')
+        self.assertTrue(mail.outbox[0].subject, "ready to review")
 
     def test_reviewer_update_email(self):
         reviewers = ReviewerFactory.create_batch(4)
-        submission = ApplicationSubmissionFactory(status='external_review', reviewers=reviewers, workflow_stages=2)
+        submission = ApplicationSubmissionFactory(
+            status="external_review", reviewers=reviewers, workflow_stages=2
+        )
         added = [AssignedReviewersFactory(submission=submission, reviewer=reviewers[0])]
         self.adapter_process(MESSAGES.REVIEWERS_UPDATED, source=submission, added=added)
 
         self.assertEqual(len(mail.outbox), 1)
-        self.assertTrue(mail.outbox[0].subject, 'ready to review')
+        self.assertTrue(mail.outbox[0].subject, "ready to review")
 
     def test_email_sent(self):
         self.adapter_process(MESSAGES.NEW_SUBMISSION)
         self.assertEqual(Message.objects.count(), 1)
         sent_message = Message.objects.first()
-        self.assertEqual(sent_message.status, 'sent')
+        self.assertEqual(sent_message.status, "sent")
 
     def test_email_failed(self):
-        with patch('django.core.mail.backends.locmem.EmailBackend.send_messages', side_effect=Exception('An error occurred')):
+        with patch(
+            "django.core.mail.backends.locmem.EmailBackend.send_messages",
+            side_effect=Exception("An error occurred"),
+        ):
             self.adapter_process(MESSAGES.NEW_SUBMISSION)
 
         self.assertEqual(Message.objects.count(), 1)
         sent_message = Message.objects.first()
-        self.assertEqual(sent_message.status, 'Error: An error occurred')
+        self.assertEqual(sent_message.status, "Error: An error occurred")
 
 
 @override_settings(
     SEND_MESSAGES=True,
-    EMAIL_BACKEND='anymail.backends.test.EmailBackend',
+    EMAIL_BACKEND="anymail.backends.test.EmailBackend",
 )
 class TestAnyMailBehaviour(AdapterMixin, TestCase):
     adapter = EmailAdapter()
-    TEST_API_KEY = 'TEST_API_KEY'
+    TEST_API_KEY = "TEST_API_KEY"
 
     # from: https://github.com/anymail/django-anymail/blob/7d8dbdace92d8addfcf0a517be0aaf481da11952/tests/test_mailgun_webhooks.py#L19
     def mailgun_sign(self, data, api_key=TEST_API_KEY):
         """Add a Mailgun webhook signature to data dict"""
         # Modifies the dict in place
-        data.setdefault('timestamp', '1234567890')
-        data.setdefault('token', '1234567890abcdef1234567890abcdef')
-        data['signature'] = hmac.new(
-            key=api_key.encode('ascii'),
-            msg='{timestamp}{token}'.format(**data).encode('ascii'),
+        data.setdefault("timestamp", "1234567890")
+        data.setdefault("token", "1234567890abcdef1234567890abcdef")
+        data["signature"] = hmac.new(
+            key=api_key.encode("ascii"),
+            msg="{timestamp}{token}".format(**data).encode("ascii"),
             digestmod=hashlib.sha256,
         ).hexdigest()
 
@@ -544,45 +574,46 @@ class TestAnyMailBehaviour(AdapterMixin, TestCase):
         self.assertEqual(len(mail.outbox), 1)
         self.assertEqual(mail.outbox[0].to, [submission.user.email])
         message = Message.objects.first()
-        self.assertEqual(message.status, 'sent')
+        self.assertEqual(message.status, "sent")
         # Anymail test Backend uses the index of the email as id: '0'
-        self.assertEqual(message.external_id, '0')
+        self.assertEqual(message.external_id, "0")
 
     @override_settings(ANYMAIL_MAILGUN_API_KEY=TEST_API_KEY)
     def test_webhook_updates_status(self):
         message = MessageFactory()
         response = self.client.post(
-            '/activity/anymail/mailgun/tracking/',
-            data=self.mailgun_sign({
-                'event': 'delivered',
-                'Message-Id': message.external_id
-            }),
+            "/activity/anymail/mailgun/tracking/",
+            data=self.mailgun_sign(
+                {"event": "delivered", "Message-Id": message.external_id}
+            ),
             secure=True,
             json=True,
         )
         self.assertEqual(response.status_code, 200)
         message.refresh_from_db()
-        self.assertTrue('delivered' in message.status)
+        self.assertTrue("delivered" in message.status)
 
     @override_settings(ANYMAIL_MAILGUN_API_KEY=TEST_API_KEY)
     def test_webhook_adds_reject_reason(self):
         message = MessageFactory()
         response = self.client.post(
-            '/activity/anymail/mailgun/tracking/',
-            data=self.mailgun_sign({
-                'event': 'dropped',
-                'reason': 'hardfail',
-                'code': 607,
-                'description': 'Marked as spam',
-                'Message-Id': message.external_id
-            }),
+            "/activity/anymail/mailgun/tracking/",
+            data=self.mailgun_sign(
+                {
+                    "event": "dropped",
+                    "reason": "hardfail",
+                    "code": 607,
+                    "description": "Marked as spam",
+                    "Message-Id": message.external_id,
+                }
+            ),
             secure=True,
             json=True,
         )
         self.assertEqual(response.status_code, 200)
         message.refresh_from_db()
-        self.assertTrue('rejected' in message.status)
-        self.assertTrue('spam' in message.status)
+        self.assertTrue("rejected" in message.status)
+        self.assertTrue("spam" in message.status)
 
 
 class TestAdaptersForProject(AdapterMixin, TestCase):
@@ -590,10 +621,10 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
     activity = ActivityAdapter
     source_factory = ProjectFactory
     # Slack
-    backend = 'django_slack.backends.TestBackend'
-    target_url = 'https://my-slack-backend.com/incoming/my-very-secret-key'
-    target_room = '#<ROOM ID>'
-    token = 'fake-token'
+    backend = "django_slack.backends.TestBackend"
+    target_url = "https://my-slack-backend.com/incoming/my-very-secret-key"
+    target_room = "#<ROOM ID>"
+    token = "fake-token"
 
     def test_activity_lead_change(self):
         old_lead = UserFactory()
@@ -615,11 +646,11 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
             MESSAGES.UPDATE_PROJECT_LEAD,
             adapter=self.activity(),
             source=project,
-            related='Unassigned',
+            related="Unassigned",
         )
         self.assertEqual(Activity.objects.count(), 1)
         activity = Activity.objects.first()
-        self.assertIn(str('Unassigned'), activity.message)
+        self.assertIn(str("Unassigned"), activity.message)
         self.assertIn(str(project.lead), activity.message)
 
     def test_activity_created(self):
@@ -654,9 +685,9 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         )
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 1)
-        message_payload = json.loads(messages[0]['payload'])
-        self.assertIn(str(user), message_payload['text'])
-        self.assertIn(str(project), message_payload['text'])
+        message_payload = json.loads(messages[0]["payload"])
+        self.assertIn(str(user), message_payload["text"])
+        self.assertIn(str(project), message_payload["text"])
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
@@ -678,9 +709,9 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         )
         messages = backend.retrieve_messages()
         self.assertEqual(len(messages), 1)
-        message_payload = json.loads(messages[0]['payload'])
-        self.assertIn(str(user), message_payload['text'])
-        self.assertIn(str(project), message_payload['text'])
+        message_payload = json.loads(messages[0]["payload"])
+        self.assertIn(str(user), message_payload["text"])
+        self.assertIn(str(project), message_payload["text"])
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
@@ -705,9 +736,9 @@ class TestAdaptersForProject(AdapterMixin, TestCase):
         messages = backend.retrieve_messages()
 
         self.assertEqual(len(messages), 1)
-        message_payload = json.loads(messages[0]['payload'])
-        self.assertIn(str(applicant), message_payload['text'])
-        self.assertIn(str(project), message_payload['text'])
+        message_payload = json.loads(messages[0]["payload"])
+        self.assertIn(str(applicant), message_payload["text"])
+        self.assertIn(str(project), message_payload["text"])
 
     @override_settings(
         SLACK_ENDPOINT_URL=target_url,
diff --git a/hypha/apply/activity/tests/test_tasks.py b/hypha/apply/activity/tests/test_tasks.py
index 1be7c93335d17aa5573b95f1ae071332d2b89588..ece65d0a8ef518a48cf0cbd48f79ad213d9a4465 100644
--- a/hypha/apply/activity/tests/test_tasks.py
+++ b/hypha/apply/activity/tests/test_tasks.py
@@ -7,19 +7,19 @@ from .factories import MessageFactory
 
 
 class TestSendEmail(TestCase):
-    @patch('hypha.apply.activity.tasks.EmailMessage', autospec=True)
+    @patch("hypha.apply.activity.tasks.EmailMessage", autospec=True)
     def test_args_passed_to_django(self, email_mock):
         kwargs = {
-            'subject': 'subject',
-            'body': 'body',
-            'from_email': 'from_email',
-            'to': 'to',
+            "subject": "subject",
+            "body": "body",
+            "from_email": "from_email",
+            "to": "to",
         }
-        with self.settings(EMAIL_SUBJECT_PREFIX=''):
+        with self.settings(EMAIL_SUBJECT_PREFIX=""):
             send_mail(*kwargs, logs=[MessageFactory()])
             email_mock.assert_called_once_with(**kwargs)
 
-        with self.settings(EMAIL_SUBJECT_PREFIX='[PREFIX] '):
+        with self.settings(EMAIL_SUBJECT_PREFIX="[PREFIX] "):
             send_mail(*kwargs, logs=[MessageFactory()])
-            kwargs['subject'] = '[PREFIX] subject'
+            kwargs["subject"] = "[PREFIX] subject"
             email_mock.assert_called_with(**kwargs)
diff --git a/hypha/apply/activity/urls.py b/hypha/apply/activity/urls.py
index 4ba4a55f802e7aea772d0985530b43e7576a69ee..eebe907ae055791f9df4a4e3068325ae2911ecab 100644
--- a/hypha/apply/activity/urls.py
+++ b/hypha/apply/activity/urls.py
@@ -2,10 +2,10 @@ from django.urls import include, path
 
 from .views import NotificationsView
 
-app_name = 'activity'
+app_name = "activity"
 
 
 urlpatterns = [
-    path('anymail/', include('anymail.urls')),
-    path('notifications/', NotificationsView.as_view(), name='notifications')
+    path("anymail/", include("anymail.urls")),
+    path("notifications/", NotificationsView.as_view(), name="notifications"),
 ]
diff --git a/hypha/apply/activity/views.py b/hypha/apply/activity/views.py
index caadfa4946a47d717ab41162e18f2fb7e588b8ad..36b5d91e2d6a4c913d63f06e87b0fa7d0271890d 100644
--- a/hypha/apply/activity/views.py
+++ b/hypha/apply/activity/views.py
@@ -13,23 +13,23 @@ from .services import get_related_comments_for_user
 
 
 class ActivityContextMixin:
-    """Mixin to add related 'comments' of the current view's 'self.object'
-    """
+    """Mixin to add related 'comments' of the current view's 'self.object'"""
+
     def get_context_data(self, **kwargs):
         extra = {
             # Do not prefetch on the related_object__author as the models
             # are not homogeneous and this will fail
-            'comments': get_related_comments_for_user(self.object, self.request.user)
+            "comments": get_related_comments_for_user(self.object, self.request.user)
         }
         return super().get_context_data(**extra, **kwargs)
 
 
 class CommentFormView(DelegatedViewMixin, CreateView):
     form_class = CommentForm
-    context_name = 'comment_form'
+    context_name = "comment_form"
 
     def form_valid(self, form):
-        source = self.kwargs['object']
+        source = self.kwargs["object"]
         form.instance.user = self.request.user
         form.instance.source = source
         form.instance.type = COMMENT
@@ -45,28 +45,28 @@ class CommentFormView(DelegatedViewMixin, CreateView):
         return response
 
     def get_success_url(self):
-        return self.object.source.get_absolute_url() + '#communications'
+        return self.object.source.get_absolute_url() + "#communications"
 
     def get_form_kwargs(self):
         # We dont want to pass the submission as the instance
         kwargs = super().get_form_kwargs()
-        kwargs.pop('instance')
+        kwargs.pop("instance")
         return kwargs
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class NotificationsView(ListView):
     model = Activity
-    template_name = 'activity/notifications.html'
+    template_name = "activity/notifications.html"
     filterset_class = NotificationFilter
 
     def get_queryset(self):
         # List only last 30 days' activities
         queryset = Activity.objects.filter(current=True).latest()
         self.filterset = self.filterset_class(self.request.GET, queryset=queryset)
-        return self.filterset.qs.distinct().order_by('-timestamp')
+        return self.filterset.qs.distinct().order_by("-timestamp")
 
     def get_context_data(self, *, object_list=None, **kwargs):
         context = super(NotificationsView, self).get_context_data()
-        context['filter'] = self.filterset
+        context["filter"] = self.filterset
         return context
diff --git a/hypha/apply/api/urls.py b/hypha/apply/api/urls.py
index ef7da2aba45a25ec196d2efd9b87d4d0e9c4af02..56bb45ad616b6260af0c801fe77205e7936b1eab 100644
--- a/hypha/apply/api/urls.py
+++ b/hypha/apply/api/urls.py
@@ -5,16 +5,16 @@ from rest_framework import permissions
 
 from .v1 import urls as v1_urls
 
-app_name = 'api'
+app_name = "api"
 
 schema_url_patterns_v1 = [
-    path('api/v1/', include(v1_urls)),
+    path("api/v1/", include(v1_urls)),
 ]
 
 schema_view_v1 = get_schema_view(
     openapi.Info(
         title="Hypha API",
-        default_version='v1',
+        default_version="v1",
         description="Hypha APIs specification",
     ),
     public=False,
@@ -23,6 +23,10 @@ schema_view_v1 = get_schema_view(
 )
 
 urlpatterns = [
-    path('v1/', include(v1_urls)),
-    path('v1/doc/', schema_view_v1.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
+    path("v1/", include(v1_urls)),
+    path(
+        "v1/doc/",
+        schema_view_v1.with_ui("swagger", cache_timeout=0),
+        name="schema-swagger-ui",
+    ),
 ]
diff --git a/hypha/apply/api/v1/determination/permissions.py b/hypha/apply/api/v1/determination/permissions.py
index 38e6c45b8ba1a7945632117968ab9c8b7d3bc5e3..78d4b00dd3427857dbb561c1c610e598002be375 100644
--- a/hypha/apply/api/v1/determination/permissions.py
+++ b/hypha/apply/api/v1/determination/permissions.py
@@ -10,6 +10,7 @@ class HasDeterminationCreatePermission(permissions.BasePermission):
     """
     Custom permission that user should have for creating determination.
     """
+
     def has_permission(self, request, view):
         try:
             submission = view.get_submission_object()
@@ -22,6 +23,7 @@ class HasDeterminationDraftPermission(permissions.BasePermission):
     """
     Custom permission that user should have for editing determination.
     """
+
     def has_object_permission(self, request, view, obj):
         submission = view.get_submission_object()
         return can_edit_determination(request.user, obj, submission)
diff --git a/hypha/apply/api/v1/determination/serializers.py b/hypha/apply/api/v1/determination/serializers.py
index 3989821a5659fb1b443ae710d79040b6a23ffdb3..13f74c6d4f1ef4ca01125496b4d705dff3821992 100644
--- a/hypha/apply/api/v1/determination/serializers.py
+++ b/hypha/apply/api/v1/determination/serializers.py
@@ -6,30 +6,34 @@ from hypha.apply.determinations.models import Determination
 class SubmissionDeterminationSerializer(serializers.ModelSerializer):
     class Meta:
         model = Determination
-        fields = ['id', 'is_draft', ]
+        fields = [
+            "id",
+            "is_draft",
+        ]
         extra_kwargs = {
-            'is_draft': {'required': False},
+            "is_draft": {"required": False},
         }
 
     def validate(self, data):
         validated_data = super().validate(data)
-        validated_data['form_data'] = dict(validated_data.items())
+        validated_data["form_data"] = dict(validated_data.items())
         return validated_data
 
     def update(self, instance, validated_data):
         instance = super().update(instance, validated_data)
         instance.send_notice = (
             self.validated_data[instance.send_notice_field.id]
-            if instance.send_notice_field else True
+            if instance.send_notice_field
+            else True
         )
         message = self.validated_data[instance.message_field.id]
-        instance.message = '' if message is None else message
+        instance.message = "" if message is None else message
         try:
             instance.outcome = int(self.validated_data[instance.determination_field.id])
             # Need to catch KeyError as outcome field would not exist in case of edit.
         except KeyError:
             pass
-        instance.is_draft = self.validated_data.get('is_draft', False)
-        instance.form_data = self.validated_data['form_data']
+        instance.is_draft = self.validated_data.get("is_draft", False)
+        instance.form_data = self.validated_data["form_data"]
         instance.save()
         return instance
diff --git a/hypha/apply/api/v1/determination/utils.py b/hypha/apply/api/v1/determination/utils.py
index d260a3ee7e95e8e439bca04e7355ec94f10609d6..fdc0d6a89fd8c916f64128414554c5094f3ad7f9 100644
--- a/hypha/apply/api/v1/determination/utils.py
+++ b/hypha/apply/api/v1/determination/utils.py
@@ -8,7 +8,7 @@ from hypha.apply.determinations.utils import determination_actions
 
 
 def get_fields_for_stage(submission):
-    forms = submission.get_from_parent('determination_forms').all()
+    forms = submission.get_from_parent("determination_forms").all()
     index = submission.workflow.stages.index(submission.stage)
     try:
         return forms[index].form.form_fields
@@ -22,7 +22,7 @@ def outcome_choices_for_phase(submission, user):
     We need to filter out non-matching choices.
     i.e. a transition to In Review is not a determination, while Needs more info or Rejected are.
     """
-    available_choices = [('', _('-- No determination selected -- '))]
+    available_choices = [("", _("-- No determination selected -- "))]
     choices = dict(DETERMINATION_CHOICES)
     for transition_name in determination_actions(user, submission):
         try:
diff --git a/hypha/apply/api/v1/determination/views.py b/hypha/apply/api/v1/determination/views.py
index d61cb9ab7b5b332aa034faa1e6a19d3f2c9532f3..d90653c8125232f1aea0d06cafc24cbd20c6c932 100644
--- a/hypha/apply/api/v1/determination/views.py
+++ b/hypha/apply/api/v1/determination/views.py
@@ -34,24 +34,33 @@ from .utils import get_fields_for_stage, outcome_choices_for_phase
 
 
 class SubmissionDeterminationViewSet(
-    BaseStreamForm,
-    WagtailSerializer,
-    SubmissionNestedMixin,
-    viewsets.GenericViewSet
+    BaseStreamForm, WagtailSerializer, SubmissionNestedMixin, viewsets.GenericViewSet
 ):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     permission_classes_by_action = {
-        'create': [permissions.IsAuthenticated, HasDeterminationCreatePermission, IsApplyStaffUser, ],
-        'draft': [permissions.IsAuthenticated, HasDeterminationDraftPermission, IsApplyStaffUser, ],
+        "create": [
+            permissions.IsAuthenticated,
+            HasDeterminationCreatePermission,
+            IsApplyStaffUser,
+        ],
+        "draft": [
+            permissions.IsAuthenticated,
+            HasDeterminationDraftPermission,
+            IsApplyStaffUser,
+        ],
     }
     serializer_class = SubmissionDeterminationSerializer
 
     def get_permissions(self):
         try:
             # return permission_classes depending on `action`
-            return [permission() for permission in self.permission_classes_by_action[self.action]]
+            return [
+                permission()
+                for permission in self.permission_classes_by_action[self.action]
+            ]
         except KeyError:
             # action is not set return default permission_classes
             return [permission() for permission in self.permission_classes]
@@ -62,7 +71,7 @@ class SubmissionDeterminationViewSet(
 
         These form fields will be used to get respective serializer fields.
         """
-        if self.action in ['retrieve', 'update']:
+        if self.action in ["retrieve", "update"]:
             # For detail and edit api form fields used while submitting
             # determination should be used.
             determination = self.get_object()
@@ -76,13 +85,13 @@ class SubmissionDeterminationViewSet(
         if the request is to save as draft or the determination submitted
         is saved as draft.
         """
-        if self.action == 'retrieve':
+        if self.action == "retrieve":
             determination = self.get_object()
             draft = determination.is_draft
-        elif self.action == 'draft':
+        elif self.action == "draft":
             draft = True
         else:
-            draft = self.request.data.get('is_draft', False)
+            draft = self.request.data.get("is_draft", False)
         return super().get_serializer_class(draft)
 
     def get_queryset(self):
@@ -94,7 +103,7 @@ class SubmissionDeterminationViewSet(
         Get the determination object by id. If not found raise 404.
         """
         queryset = self.get_queryset()
-        obj = get_object_or_404(queryset, id=self.kwargs['pk'])
+        obj = get_object_or_404(queryset, id=self.kwargs["pk"])
         self.check_object_permissions(self.request, obj)
         return obj
 
@@ -109,8 +118,8 @@ class SubmissionDeterminationViewSet(
                 determination_data[field_block.id] = determination.outcome
             if isinstance(field_block.block, RichTextBlock):
                 determination_data[field_block.id] = field_block.value.source
-        determination_data['id'] = determination.id
-        determination_data['is_draft'] = determination.is_draft
+        determination_data["id"] = determination.id
+        determination_data["is_draft"] = determination.is_draft
         return determination_data
 
     def retrieve(self, request, *args, **kwargs):
@@ -118,9 +127,7 @@ class SubmissionDeterminationViewSet(
         Get details of a determination on a submission
         """
         determination = self.get_object()
-        ser = self.get_serializer(
-            self.get_determination_data(determination)
-        )
+        ser = self.get_serializer(self.get_determination_data(determination))
         return Response(ser.data)
 
     def get_form_fields(self):
@@ -132,17 +139,19 @@ class SubmissionDeterminationViewSet(
                 outcome_choices = outcome_choices_for_phase(
                     submission, self.request.user
                 )
-                if self.action == 'update':
+                if self.action == "update":
                     # Outcome can not be edited after being set once, so we do not
                     # need to render this field.
                     # form_fields.pop(field_block.id)
-                    form_fields[field_block.id].widget = forms.TextInput(attrs={'readonly': 'readonly'})
+                    form_fields[field_block.id].widget = forms.TextInput(
+                        attrs={"readonly": "readonly"}
+                    )
                 else:
                     # Outcome field choices need to be set according to the phase.
                     form_fields[field_block.id].choices = outcome_choices
         return form_fields
 
-    @action(detail=False, methods=['get'])
+    @action(detail=False, methods=["get"])
     def fields(self, request, *args, **kwargs):
         """
         List details of all the form fields that were created by admin for adding determinations.
@@ -156,13 +165,15 @@ class SubmissionDeterminationViewSet(
     def get_draft_determination(self):
         submission = self.get_submission_object()
         try:
-            determination = Determination.objects.get(submission=submission, is_draft=True)
+            determination = Determination.objects.get(
+                submission=submission, is_draft=True
+            )
         except Determination.DoesNotExist:
             return
         else:
             return determination
 
-    @action(detail=False, methods=['get'])
+    @action(detail=False, methods=["get"])
     def draft(self, request, *args, **kwargs):
         """
         Returns the draft determination submitted on a submission by current user.
@@ -170,9 +181,7 @@ class SubmissionDeterminationViewSet(
         determination = self.get_draft_determination()
         if not determination:
             return Response({})
-        ser = self.get_serializer(
-            self.get_determination_data(determination)
-        )
+        ser = self.get_serializer(self.get_determination_data(determination))
         return Response(ser.data)
 
     def create(self, request, *args, **kwargs):
@@ -193,9 +202,9 @@ class SubmissionDeterminationViewSet(
         ser = self.get_serializer(data=request.data)
         ser.is_valid(raise_exception=True)
         if has_final_determination(submission):
-            return ValidationError({
-                'detail': 'A final determination has already been submitted.'
-            })
+            return ValidationError(
+                {"detail": "A final determination has already been submitted."}
+            )
         determination = self.get_draft_determination()
         if determination is None:
             determination = Determination.objects.create(
@@ -205,9 +214,7 @@ class SubmissionDeterminationViewSet(
         determination.save()
         ser.update(determination, ser.validated_data)
         if determination.is_draft:
-            ser = self.get_serializer(
-                self.get_determination_data(determination)
-            )
+            ser = self.get_serializer(self.get_determination_data(determination))
             return Response(ser.data, status=status.HTTP_201_CREATED)
         with transaction.atomic():
             messenger(
@@ -217,7 +224,7 @@ class SubmissionDeterminationViewSet(
                 submission=submission,
                 related=determination,
             )
-            proposal_form = ser.validated_data.get('proposal_form')
+            proposal_form = ser.validated_data.get("proposal_form")
             transition = transition_from_outcome(int(determination.outcome), submission)
 
             if determination.outcome == NEEDS_MORE_INFO:
@@ -247,9 +254,7 @@ class SubmissionDeterminationViewSet(
             source=submission,
             related=determination,
         )
-        ser = self.get_serializer(
-            self.get_determination_data(determination)
-        )
+        ser = self.get_serializer(self.get_determination_data(determination))
         return Response(ser.data, status=status.HTTP_201_CREATED)
 
     def update(self, request, *args, **kwargs):
@@ -268,7 +273,5 @@ class SubmissionDeterminationViewSet(
             source=determination.submission,
             related=determination,
         )
-        ser = self.get_serializer(
-            self.get_determination_data(determination)
-        )
+        ser = self.get_serializer(self.get_determination_data(determination))
         return Response(ser.data)
diff --git a/hypha/apply/api/v1/filters.py b/hypha/apply/api/v1/filters.py
index 6b2b0e545e4babf0eb3b163a2fcef39ac4cd4a9b..cec4b383335c2b1489e8bc870f3532dc589fcbd2 100644
--- a/hypha/apply/api/v1/filters.py
+++ b/hypha/apply/api/v1/filters.py
@@ -18,46 +18,62 @@ from .utils import (
 
 
 class SubmissionsFilter(filters.FilterSet):
-    round = filters.ModelMultipleChoiceFilter(field_name='round', queryset=get_used_rounds())
+    round = filters.ModelMultipleChoiceFilter(
+        field_name="round", queryset=get_used_rounds()
+    )
     status = filters.MultipleChoiceFilter(choices=PHASES)
-    active = filters.BooleanFilter(method='filter_active', label=_('Active'))
-    submit_date = filters.DateFromToRangeFilter(field_name='submit_time', label=_('Submit date'))
+    active = filters.BooleanFilter(method="filter_active", label=_("Active"))
+    submit_date = filters.DateFromToRangeFilter(
+        field_name="submit_time", label=_("Submit date")
+    )
     fund = filters.ModelMultipleChoiceFilter(
-        field_name='page', label=_('fund'),
-        queryset=Page.objects.type(FundType) | Page.objects.type(LabType)
+        field_name="page",
+        label=_("fund"),
+        queryset=Page.objects.type(FundType) | Page.objects.type(LabType),
     )
     screening_statuses = filters.ModelMultipleChoiceFilter(
-        field_name='screening_statuses',
+        field_name="screening_statuses",
         queryset=get_screening_statuses(),
-        null_label=_('No Screening')
+        null_label=_("No Screening"),
     )
     reviewers = filters.ModelMultipleChoiceFilter(
-        field_name='reviewers',
+        field_name="reviewers",
         queryset=get_all_reviewers(),
     )
     lead = filters.ModelMultipleChoiceFilter(
-        field_name='lead',
+        field_name="lead",
         queryset=get_round_leads(),
     )
     category_options = filters.MultipleChoiceFilter(
-        choices=[], label=_('Category'),
-        method='filter_category_options'
+        choices=[], label=_("Category"), method="filter_category_options"
     )
     id = filters.ModelMultipleChoiceFilter(
-        field_name='id',
-        queryset=ApplicationSubmission.objects.exclude_draft().current().with_latest_update(),
-        method='filter_id'
+        field_name="id",
+        queryset=ApplicationSubmission.objects.exclude_draft()
+        .current()
+        .with_latest_update(),
+        method="filter_id",
     )
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('id', 'status', 'round', 'active', 'submit_date', 'fund', 'screening_statuses', 'reviewers', 'lead')
+        fields = (
+            "id",
+            "status",
+            "round",
+            "active",
+            "submit_date",
+            "fund",
+            "screening_statuses",
+            "reviewers",
+            "lead",
+        )
 
     def __init__(self, *args, exclude=None, limit_statuses=None, **kwargs):
         if exclude is None:
             exclude = []
         super().__init__(*args, **kwargs)
-        self.filters['category_options'].extra['choices'] = [
+        self.filters["category_options"].extra["choices"] = [
             (option.id, option.value)
             for option in Option.objects.filter(category__filter_on_dashboard=True)
         ]
@@ -80,12 +96,14 @@ class SubmissionsFilter(filters.FilterSet):
         And then use those category fields to filter submissions with their form_data.
         """
         query = Q()
-        submission_data = queryset.values('form_fields', 'form_data').distinct()
+        submission_data = queryset.values("form_fields", "form_data").distinct()
         for submission in submission_data:
-            for field in submission['form_fields']:
+            for field in submission["form_fields"]:
                 if isinstance(field.block, CategoryQuestionBlock):
                     try:
-                        category_options = category_ids = submission['form_data'][field.id]
+                        category_options = category_ids = submission["form_data"][
+                            field.id
+                        ]
                     except KeyError:
                         include_in_filter = False
                     else:
@@ -96,7 +114,7 @@ class SubmissionsFilter(filters.FilterSet):
                     # If yes then those submissions should be filtered in the list
                     if include_in_filter:
                         kwargs = {
-                            '{0}__{1}'.format('form_data', field.id): category_ids
+                            "{0}__{1}".format("form_data", field.id): category_ids
                         }
                         query |= Q(**kwargs)
         return queryset.filter(query)
@@ -116,15 +134,15 @@ class NewerThanFilter(filters.ModelChoiceFilter):
 
 
 class CommentFilter(filters.FilterSet):
-    since = filters.DateTimeFilter(field_name="timestamp", lookup_expr='gte')
-    before = filters.DateTimeFilter(field_name="timestamp", lookup_expr='lte')
+    since = filters.DateTimeFilter(field_name="timestamp", lookup_expr="gte")
+    before = filters.DateTimeFilter(field_name="timestamp", lookup_expr="lte")
     newer = NewerThanFilter(queryset=Activity.comments.all())
 
     class Meta:
         model = Activity
-        fields = ['visibility', 'since', 'before', 'newer']
+        fields = ["visibility", "since", "before", "newer"]
 
 
 class AllCommentFilter(CommentFilter):
     class Meta(CommentFilter.Meta):
-        fields = CommentFilter.Meta.fields + ['source_object_id']
+        fields = CommentFilter.Meta.fields + ["source_object_id"]
diff --git a/hypha/apply/api/v1/mixin.py b/hypha/apply/api/v1/mixin.py
index f132366d1f8657037ba14713eb9c87af32fd8a0c..f2c3b85ccb8be0845f80a6ee1e9799eac6bc7880 100644
--- a/hypha/apply/api/v1/mixin.py
+++ b/hypha/apply/api/v1/mixin.py
@@ -6,20 +6,14 @@ from hypha.apply.projects.models import Invoice, Project
 
 class SubmissionNestedMixin:
     def get_submission_object(self):
-        return get_object_or_404(
-            ApplicationSubmission, id=self.kwargs['submission_pk']
-        )
+        return get_object_or_404(ApplicationSubmission, id=self.kwargs["submission_pk"])
 
 
 class InvoiceNestedMixin:
     def get_invoice_object(self):
-        return get_object_or_404(
-            Invoice, id=self.kwargs['invoice_pk']
-        )
+        return get_object_or_404(Invoice, id=self.kwargs["invoice_pk"])
 
 
 class ProjectNestedMixin:
     def get_project_object(self):
-        return get_object_or_404(
-            Project, id=self.kwargs['project_pk']
-        )
+        return get_object_or_404(Project, id=self.kwargs["project_pk"])
diff --git a/hypha/apply/api/v1/pagination.py b/hypha/apply/api/v1/pagination.py
index 1382e50358d993cb6629244709a19261b0616df7..e626238ea07e0471ff9766f460e18a34a952ae69 100644
--- a/hypha/apply/api/v1/pagination.py
+++ b/hypha/apply/api/v1/pagination.py
@@ -2,5 +2,5 @@ from rest_framework import pagination
 
 
 class StandardResultsSetPagination(pagination.PageNumberPagination):
-    page_size_query_param = 'page_size'
+    page_size_query_param = "page_size"
     max_page_size = 1000
diff --git a/hypha/apply/api/v1/projects/serializers.py b/hypha/apply/api/v1/projects/serializers.py
index a86b54e6adc2ee2471f72ad50d16ded7f46000a0..06edda05fc41e673670c3c32862472c26166b46a 100644
--- a/hypha/apply/api/v1/projects/serializers.py
+++ b/hypha/apply/api/v1/projects/serializers.py
@@ -6,15 +6,15 @@ from hypha.apply.projects.models import Deliverable, InvoiceDeliverable
 
 class InvoiceDeliverableListSerializer(serializers.ModelSerializer):
     invoice_id = serializers.SerializerMethodField()
-    project_id = serializers.IntegerField(source='deliverable.project.id')
+    project_id = serializers.IntegerField(source="deliverable.project.id")
 
     class Meta:
         model = InvoiceDeliverable
-        fields = ('id', 'deliverable', 'quantity', 'invoice_id', 'project_id')
+        fields = ("id", "deliverable", "quantity", "invoice_id", "project_id")
         depth = 1
 
     def get_invoice_id(self, obj):
-        return self.context['invoice'].id
+        return self.context["invoice"].id
 
 
 class DeliverableSerializer(serializers.Serializer):
@@ -25,7 +25,5 @@ class DeliverableSerializer(serializers.Serializer):
         try:
             Deliverable.objects.get(id=value)
         except Deliverable.DoesNotExist as e:
-            raise exceptions.ValidationError({
-                'detail': _('Not found')
-            }) from e
+            raise exceptions.ValidationError({"detail": _("Not found")}) from e
         return value
diff --git a/hypha/apply/api/v1/projects/views.py b/hypha/apply/api/v1/projects/views.py
index c3e6e6cd986347a4f2b65880a6eedbd4c73be42c..f3991bb06df3437abcdaa2f74b448b69eb357c0d 100644
--- a/hypha/apply/api/v1/projects/views.py
+++ b/hypha/apply/api/v1/projects/views.py
@@ -25,11 +25,12 @@ class InvoiceDeliverableViewSet(
     ProjectNestedMixin,
     mixins.CreateModelMixin,
     mixins.DestroyModelMixin,
-    viewsets.GenericViewSet
+    viewsets.GenericViewSet,
 ):
     permission_classes = (
-        permissions.IsAuthenticated, HasDeliverableEditPermission,
-        IsApplyStaffUser | IsFinance1User | IsFinance2User
+        permissions.IsAuthenticated,
+        HasDeliverableEditPermission,
+        IsApplyStaffUser | IsFinance1User | IsFinance2User,
     )
     serializer_class = InvoiceDeliverableListSerializer
     pagination_class = None
@@ -42,27 +43,29 @@ class InvoiceDeliverableViewSet(
         ser = DeliverableSerializer(data=request.data)
         ser.is_valid(raise_exception=True)
         project = self.get_project_object()
-        deliverable_id = ser.validated_data['id']
+        deliverable_id = ser.validated_data["id"]
         if not project.deliverables.filter(id=deliverable_id).exists():
-            raise ValidationError({'detail': _("Not Found")})
+            raise ValidationError({"detail": _("Not Found")})
         invoice = self.get_invoice_object()
-        deliverable = get_object_or_404(
-            Deliverable, id=deliverable_id
-        )
+        deliverable = get_object_or_404(Deliverable, id=deliverable_id)
         if invoice.deliverables.filter(deliverable=deliverable).exists():
-            raise ValidationError({'detail': _("Invoice Already has this deliverable")})
-        quantity = ser.validated_data['quantity']
+            raise ValidationError({"detail": _("Invoice Already has this deliverable")})
+        quantity = ser.validated_data["quantity"]
         if deliverable.available_to_invoice < quantity:
-            raise ValidationError({'detail': _("Required quantity is more than available")})
+            raise ValidationError(
+                {"detail": _("Required quantity is more than available")}
+            )
         invoice_deliverable = InvoiceDeliverable.objects.create(
-            deliverable=deliverable,
-            quantity=ser.validated_data['quantity']
+            deliverable=deliverable, quantity=ser.validated_data["quantity"]
         )
         invoice.deliverables.add(invoice_deliverable)
         ser = self.get_serializer(invoice.deliverables.all(), many=True)
         return Response(
-            {'deliverables': ser.data, 'total': invoice.deliverables_total_amount['total']},
-            status=status.HTTP_201_CREATED
+            {
+                "deliverables": ser.data,
+                "total": invoice.deliverables_total_amount["total"],
+            },
+            status=status.HTTP_201_CREATED,
         )
 
     def get_serializer_context(self):
@@ -76,5 +79,8 @@ class InvoiceDeliverableViewSet(
         invoice.deliverables.remove(deliverable)
         ser = self.get_serializer(invoice.deliverables.all(), many=True)
         return Response(
-            {'deliverables': ser.data, 'total': invoice.deliverables_total_amount['total']},
+            {
+                "deliverables": ser.data,
+                "total": invoice.deliverables_total_amount["total"],
+            },
         )
diff --git a/hypha/apply/api/v1/reminder/serializers.py b/hypha/apply/api/v1/reminder/serializers.py
index 8f99cbab7ebfecd1eec7807d213e156f27f4ef07..147fe1bc3dc90f6c37e6d8afd3d9141d4a9a44e6 100644
--- a/hypha/apply/api/v1/reminder/serializers.py
+++ b/hypha/apply/api/v1/reminder/serializers.py
@@ -4,12 +4,11 @@ from hypha.apply.funds.models import Reminder
 
 
 class SubmissionReminderSerializer(serializers.ModelSerializer):
-
     def validate(self, data):
         """
         Check title is empty.
         """
-        required_fields = ['title']
+        required_fields = ["title"]
         for field in required_fields:
             if not data.get(field, None):
                 raise serializers.ValidationError({field: "shouldn't be empty"})
@@ -17,5 +16,13 @@ class SubmissionReminderSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Reminder
-        fields = ('time', 'action_type', 'is_expired', 'id', 'action', 'title', 'description')
-        read_only_fields = ('action_type', 'is_expired')
+        fields = (
+            "time",
+            "action_type",
+            "is_expired",
+            "id",
+            "action",
+            "title",
+            "description",
+        )
+        read_only_fields = ("action_type", "is_expired")
diff --git a/hypha/apply/api/v1/reminder/views.py b/hypha/apply/api/v1/reminder/views.py
index 9fe899c2e5ebbf50923074ef7d017a45b4362a99..f3e05a04288033cd4f1c20b7bb7ce708e0266acb 100644
--- a/hypha/apply/api/v1/reminder/views.py
+++ b/hypha/apply/api/v1/reminder/views.py
@@ -13,17 +13,18 @@ class SubmissionReminderViewSet(
     SubmissionNestedMixin,
     mixins.ListModelMixin,
     mixins.CreateModelMixin,
-    viewsets.GenericViewSet
+    viewsets.GenericViewSet,
 ):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     serializer_class = SubmissionReminderSerializer
     pagination_class = None
 
     def get_queryset(self):
         submission = self.get_submission_object()
-        return Reminder.objects.filter(submission=submission).order_by('-time')
+        return Reminder.objects.filter(submission=submission).order_by("-time")
 
     def perform_create(self, serializer):
         serializer.save(user=self.request.user, submission=self.get_submission_object())
@@ -34,7 +35,7 @@ class SubmissionReminderViewSet(
         ser = self.get_serializer(self.get_queryset(), many=True)
         return Response(ser.data)
 
-    @action(detail=False, methods=['get'])
+    @action(detail=False, methods=["get"])
     def fields(self, request, *args, **kwargs):
         """
         List details of all the form fields that were created by admin for adding reminders.
@@ -51,20 +52,22 @@ class SubmissionReminderViewSet(
                 "id": "description",
                 "type": "textArea",
                 "kwargs": {"label": "Description"},
-                "widget": {
-                    "attrs": {"cols": 40, "rows": 5},
-                    "type": "Textarea"
-                }
+                "widget": {"attrs": {"cols": 40, "rows": 5}, "type": "Textarea"},
             },
             {
                 "id": "time",
                 "kwargs": {"label": "Time", "required": True},
-                "type": "DateTime"
+                "type": "DateTime",
             },
             {
                 "id": "action",
-                "kwargs": {"label": "Action", "required": True, "choices": Reminder.ACTIONS.items(), "initial": Reminder.REVIEW},
-                "type": "Select"
-            }
+                "kwargs": {
+                    "label": "Action",
+                    "required": True,
+                    "choices": Reminder.ACTIONS.items(),
+                    "initial": Reminder.REVIEW,
+                },
+                "type": "Select",
+            },
         ]
         return Response(fields)
diff --git a/hypha/apply/api/v1/review/fields.py b/hypha/apply/api/v1/review/fields.py
index 600b86b2436e254e30a7c6ca2809ad165686541c..0bc9ba7aa87137db11901bf3e5d677dec959c0ca 100644
--- a/hypha/apply/api/v1/review/fields.py
+++ b/hypha/apply/api/v1/review/fields.py
@@ -7,18 +7,17 @@ from hypha.apply.review.options import RATE_CHOICES
 
 
 class ScoredAnswerListField(serializers.ListField):
-    childs = [
-        serializers.CharField(),
-        serializers.ChoiceField(choices=RATE_CHOICES)
-    ]
+    childs = [serializers.CharField(), serializers.ChoiceField(choices=RATE_CHOICES)]
 
     def __init__(self, *args, **kwargs):
-        draft = kwargs.pop('draft', False)
+        draft = kwargs.pop("draft", False)
         super().__init__(*args, **kwargs)
         if draft:
             self.childs = [
-                serializers.CharField(required=False, allow_null=True, allow_blank=True),
-                serializers.ChoiceField(choices=RATE_CHOICES)
+                serializers.CharField(
+                    required=False, allow_null=True, allow_blank=True
+                ),
+                serializers.ChoiceField(choices=RATE_CHOICES),
             ]
 
     def run_child_validation(self, data):
diff --git a/hypha/apply/api/v1/review/permissions.py b/hypha/apply/api/v1/review/permissions.py
index 334154b266e49149bd7941abadd75df58af2b9c8..d55e6a7f09fc45130fb9b225d760d93a6d885af4 100644
--- a/hypha/apply/api/v1/review/permissions.py
+++ b/hypha/apply/api/v1/review/permissions.py
@@ -5,29 +5,34 @@ class HasReviewCreatePermission(permissions.BasePermission):
     """
     Custom permission that user should have for creating review.
     """
+
     def has_permission(self, request, view):
         try:
             submission = view.get_submission_object()
         except KeyError:
             return True
-        return (
-            submission.phase.permissions.can_review(request.user) and
-            submission.has_permission_to_review(request.user)
-        )
+        return submission.phase.permissions.can_review(
+            request.user
+        ) and submission.has_permission_to_review(request.user)
 
 
 class HasReviewEditPermission(permissions.BasePermission):
     """
     Custom permission that user should have for editing review.
     """
+
     def has_object_permission(self, request, view, obj):
-        return request.user.has_perm('review.change_review') or request.user == obj.author.reviewer
+        return (
+            request.user.has_perm("review.change_review")
+            or request.user == obj.author.reviewer
+        )
 
 
 class HasReviewDetailPermission(permissions.BasePermission):
     """
     Custom permission that user should have for viewing review.
     """
+
     def has_object_permission(self, request, view, obj):
         user = request.user
         author = obj.author.reviewer
@@ -42,7 +47,12 @@ class HasReviewDetailPermission(permissions.BasePermission):
         if user.is_reviewer and obj.reviewer_visibility:
             return True
 
-        if user.is_community_reviewer and submission.community_review and obj.reviewer_visibility and submission.user != user:
+        if (
+            user.is_community_reviewer
+            and submission.community_review
+            and obj.reviewer_visibility
+            and submission.user != user
+        ):
             return True
 
         return False
@@ -52,14 +62,18 @@ class HasReviewDeletePermission(permissions.BasePermission):
     """
     Custom permission that user should have for deleting review.
     """
+
     def has_object_permission(self, request, view, obj):
-        return request.user.has_perm('review.delete_review') or request.user == obj.author
+        return (
+            request.user.has_perm("review.delete_review") or request.user == obj.author
+        )
 
 
 class HasReviewOpinionPermission(permissions.BasePermission):
     """
     Custom permission that user should have for posting opinion on a review.
     """
+
     def has_object_permission(self, request, view, obj):
         review = obj
         user = request.user
@@ -75,7 +89,12 @@ class HasReviewOpinionPermission(permissions.BasePermission):
         if user.is_reviewer and review.reviewer_visibility:
             return True
 
-        if user.is_community_reviewer and submission.community_review and review.reviewer_visibility and submission.user != user:
+        if (
+            user.is_community_reviewer
+            and submission.community_review
+            and review.reviewer_visibility
+            and submission.user != user
+        ):
             return True
 
         return False
@@ -85,9 +104,15 @@ class HasReviewDraftPermission(permissions.BasePermission):
     """
     Custom permission that user should have to access draft review.
     """
+
     def has_object_permission(self, request, view, obj):
         try:
             submission = view.get_submission_object()
         except KeyError:
             return True
-        return submission.can_review(request.user) and submission.assigned.draft_reviewed().filter(reviewer=request.user).exists()
+        return (
+            submission.can_review(request.user)
+            and submission.assigned.draft_reviewed()
+            .filter(reviewer=request.user)
+            .exists()
+        )
diff --git a/hypha/apply/api/v1/review/serializers.py b/hypha/apply/api/v1/review/serializers.py
index 80c2795e6ad1105a29ddb52b4e518d97e19af46b..d4353033e856f84e526c567ec762fdbb67cd2d91 100644
--- a/hypha/apply/api/v1/review/serializers.py
+++ b/hypha/apply/api/v1/review/serializers.py
@@ -8,19 +8,19 @@ from ..utils import get_field_kwargs, get_field_widget
 
 
 class ReviewOpinionReadSerializer(serializers.ModelSerializer):
-    author_id = serializers.ReadOnlyField(source='author.id')
-    opinion = serializers.ReadOnlyField(source='get_opinion_display')
+    author_id = serializers.ReadOnlyField(source="author.id")
+    opinion = serializers.ReadOnlyField(source="get_opinion_display")
 
     class Meta:
         model = ReviewOpinion
-        fields = ('author_id', 'opinion')
+        fields = ("author_id", "opinion")
 
 
 class ReviewOpinionWriteSerializer(serializers.ModelSerializer):
     class Meta:
         model = ReviewOpinion
-        fields = ('opinion', )
-        extra_kwargs = {'opinion': {'write_only': True}}
+        fields = ("opinion",)
+        extra_kwargs = {"opinion": {"write_only": True}}
 
 
 class SubmissionReviewSerializer(serializers.ModelSerializer):
@@ -28,21 +28,23 @@ class SubmissionReviewSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Review
-        fields = ['id', 'score', 'is_draft', 'opinions', ]
-        extra_kwargs = {
-            'score': {'read_only': True},
-            'is_draft': {'required': False}
-        }
+        fields = [
+            "id",
+            "score",
+            "is_draft",
+            "opinions",
+        ]
+        extra_kwargs = {"score": {"read_only": True}, "is_draft": {"required": False}}
 
     def get_recommendation(self, obj):
         return {
-            'value': obj.recommendation,
-            'display': obj.get_recommendation_display(),
+            "value": obj.recommendation,
+            "display": obj.get_recommendation_display(),
         }
 
     def validate(self, data):
         validated_data = super().validate(data)
-        validated_data['form_data'] = dict(validated_data.items())
+        validated_data["form_data"] = dict(validated_data.items())
         return validated_data
 
     def update(self, instance, validated_data):
@@ -52,7 +54,7 @@ class SubmissionReviewSerializer(serializers.ModelSerializer):
         instance.recommendation = int(
             recommendation if recommendation is not None else NO
         )
-        instance.is_draft = self.validated_data.get('is_draft', False)
+        instance.is_draft = self.validated_data.get("is_draft", False)
 
         # Old review forms do not have the requred visability field.
         # This will set visibility to PRIVATE by default.
@@ -71,7 +73,7 @@ class SubmissionReviewSerializer(serializers.ModelSerializer):
     def calculate_score(self, instance, data):
         scores = []
         for field in instance.score_fields:
-            score = data.get(field.id, ['', NA])
+            score = data.get(field.id, ["", NA])
             # Include NA answers as 0.
             score = score[1] if score is not None else NA
             if score == NA:
@@ -80,9 +82,9 @@ class SubmissionReviewSerializer(serializers.ModelSerializer):
         # Check if there are score_fields_without_text and also
         # append scores from them.
         for field in instance.score_fields_without_text:
-            score = data.get(field.id, '')
+            score = data.get(field.id, "")
             # Include '' answers as 0.
-            if score is None or score == '':
+            if score is None or score == "":
                 score = 0
             scores.append(int(score))
 
@@ -103,7 +105,7 @@ class FieldSerializer(serializers.Serializer):
 
     def get_type(self, obj):
         if isinstance(obj[1], BlockFieldWrapper):
-            return 'LoadHTML'
+            return "LoadHTML"
         return obj[1].__class__.__name__
 
     def get_kwargs(self, obj):
diff --git a/hypha/apply/api/v1/review/utils.py b/hypha/apply/api/v1/review/utils.py
index 12b4d4d53d107302bfa450b79ff53e3082992d80..c172bf7812495e5bb68884e3c4fb67a11ecdbcc4 100644
--- a/hypha/apply/api/v1/review/utils.py
+++ b/hypha/apply/api/v1/review/utils.py
@@ -9,21 +9,33 @@ def review_workflow_actions(request, submission):
     if submission.status == INITIAL_STATE:
         # Automatically transition the application to "Internal review".
         action = submission_stepped_phases[2][0].name
-    elif submission.status == 'proposal_discussion':
+    elif submission.status == "proposal_discussion":
         # Automatically transition the proposal to "Internal review".
-        action = 'proposal_internal_review'
-    elif submission.status == submission_stepped_phases[2][0].name and submission.reviews.count() > 1:
+        action = "proposal_internal_review"
+    elif (
+        submission.status == submission_stepped_phases[2][0].name
+        and submission.reviews.count() > 1
+    ):
         # Automatically transition the application to "Ready for discussion".
         action = submission_stepped_phases[3][0].name
-    elif submission.status == 'ext_external_review' and submission.reviews.by_reviewers().count() > 1:
+    elif (
+        submission.status == "ext_external_review"
+        and submission.reviews.by_reviewers().count() > 1
+    ):
         # Automatically transition the application to "Ready for discussion".
-        action = 'ext_post_external_review_discussion'
-    elif submission.status == 'com_external_review' and submission.reviews.by_reviewers().count() > 1:
+        action = "ext_post_external_review_discussion"
+    elif (
+        submission.status == "com_external_review"
+        and submission.reviews.by_reviewers().count() > 1
+    ):
         # Automatically transition the application to "Ready for discussion".
-        action = 'com_post_external_review_discussion'
-    elif submission.status == 'external_review' and submission.reviews.by_reviewers().count() > 1:
+        action = "com_post_external_review_discussion"
+    elif (
+        submission.status == "external_review"
+        and submission.reviews.by_reviewers().count() > 1
+    ):
         # Automatically transition the proposal to "Ready for discussion".
-        action = 'post_external_review_discussion'
+        action = "post_external_review_discussion"
 
     # If action is set run perform_transition().
     if action:
@@ -39,7 +51,7 @@ def review_workflow_actions(request, submission):
 
 
 def get_review_form_fields_for_stage(submission):
-    forms = submission.get_from_parent('review_forms').all()
+    forms = submission.get_from_parent("review_forms").all()
     index = submission.workflow.stages.index(submission.stage)
     try:
         return forms[index].form.form_fields
diff --git a/hypha/apply/api/v1/review/views.py b/hypha/apply/api/v1/review/views.py
index 5ad667c3095596c267d451bee4a94fa94626deed..09033429c25af01f68815400d313d31e77da3d61 100644
--- a/hypha/apply/api/v1/review/views.py
+++ b/hypha/apply/api/v1/review/views.py
@@ -30,29 +30,58 @@ from .utils import get_review_form_fields_for_stage, review_workflow_actions
 
 
 class SubmissionReviewViewSet(
-    BaseStreamForm,
-    WagtailSerializer,
-    SubmissionNestedMixin,
-    viewsets.GenericViewSet
+    BaseStreamForm, WagtailSerializer, SubmissionNestedMixin, viewsets.GenericViewSet
 ):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     permission_classes_by_action = {
-        'create': [permissions.IsAuthenticated, HasReviewCreatePermission, IsApplyStaffUser, ],
-        'retrieve': [permissions.IsAuthenticated, HasReviewDetailPermission, IsApplyStaffUser, ],
-        'update': [permissions.IsAuthenticated, HasReviewEditPermission, IsApplyStaffUser, ],
-        'delete': [permissions.IsAuthenticated, HasReviewDeletePermission, IsApplyStaffUser, ],
-        'opinions': [permissions.IsAuthenticated, HasReviewOpinionPermission, IsApplyStaffUser, ],
-        'fields': [permissions.IsAuthenticated, HasReviewCreatePermission, IsApplyStaffUser, ],
-        'draft': [permissions.IsAuthenticated, HasReviewDraftPermission, IsApplyStaffUser, ],
+        "create": [
+            permissions.IsAuthenticated,
+            HasReviewCreatePermission,
+            IsApplyStaffUser,
+        ],
+        "retrieve": [
+            permissions.IsAuthenticated,
+            HasReviewDetailPermission,
+            IsApplyStaffUser,
+        ],
+        "update": [
+            permissions.IsAuthenticated,
+            HasReviewEditPermission,
+            IsApplyStaffUser,
+        ],
+        "delete": [
+            permissions.IsAuthenticated,
+            HasReviewDeletePermission,
+            IsApplyStaffUser,
+        ],
+        "opinions": [
+            permissions.IsAuthenticated,
+            HasReviewOpinionPermission,
+            IsApplyStaffUser,
+        ],
+        "fields": [
+            permissions.IsAuthenticated,
+            HasReviewCreatePermission,
+            IsApplyStaffUser,
+        ],
+        "draft": [
+            permissions.IsAuthenticated,
+            HasReviewDraftPermission,
+            IsApplyStaffUser,
+        ],
     }
     serializer_class = SubmissionReviewSerializer
 
     def get_permissions(self):
         try:
             # return permission_classes depending on `action`
-            return [permission() for permission in self.permission_classes_by_action[self.action]]
+            return [
+                permission()
+                for permission in self.permission_classes_by_action[self.action]
+            ]
         except KeyError:
             # action is not set return default permission_classes
             return [permission() for permission in self.permission_classes]
@@ -63,12 +92,12 @@ class SubmissionReviewViewSet(
 
         These form fields will be used to get respective serializer fields.
         """
-        if self.action in ['retrieve', 'update', 'opinions']:
+        if self.action in ["retrieve", "update", "opinions"]:
             # For detail and edit api form fields used while submitting
             # review should be used.
             review = self.get_object()
             return review.form_fields
-        if self.action == 'draft':
+        if self.action == "draft":
             review = self.get_review_by_reviewer()
             return review.form_fields
         submission = self.get_submission_object()
@@ -80,13 +109,13 @@ class SubmissionReviewViewSet(
         if the request is to save as draft or the review submitted
         is saved as draft.
         """
-        if self.action == 'retrieve':
+        if self.action == "retrieve":
             review = self.get_object()
             draft = review.is_draft
-        elif self.action == 'draft':
+        elif self.action == "draft":
             draft = True
         else:
-            draft = self.request.data.get('is_draft', False)
+            draft = self.request.data.get("is_draft", False)
         return super().get_serializer_class(draft)
 
     def get_queryset(self):
@@ -98,7 +127,7 @@ class SubmissionReviewViewSet(
         Get the review object by id. If not found raise 404.
         """
         queryset = self.get_queryset()
-        obj = get_object_or_404(queryset, id=self.kwargs['pk'])
+        obj = get_object_or_404(queryset, id=self.kwargs["pk"])
         self.check_object_permissions(self.request, obj)
         return obj
 
@@ -134,7 +163,9 @@ class SubmissionReviewViewSet(
             submission=submission, author=self.get_reviewer()
         )
         if not create and not instance.is_draft:
-            raise ValidationError({'detail': 'You have already posted a review for this submission'})
+            raise ValidationError(
+                {"detail": "You have already posted a review for this submission"}
+            )
         instance.form_fields = self.get_defined_fields()
         instance.save()
         ser.update(instance, ser.validated_data)
@@ -148,9 +179,7 @@ class SubmissionReviewViewSet(
             )
             # Automatic workflow actions.
             review_workflow_actions(self.request, submission)
-        ser = self.get_serializer(
-            self.get_review_data(instance)
-        )
+        ser = self.get_serializer(self.get_review_data(instance))
         return Response(ser.data, status=status.HTTP_201_CREATED)
 
     def get_review_data(self, review):
@@ -158,10 +187,10 @@ class SubmissionReviewViewSet(
         Get review data which will be used for review detail api.
         """
         review_data = review.form_data
-        review_data['id'] = review.id
-        review_data['score'] = review.score
-        review_data['opinions'] = review.opinions
-        review_data['is_draft'] = review.is_draft
+        review_data["id"] = review.id
+        review_data["score"] = review.score
+        review_data["opinions"] = review.opinions
+        review_data["is_draft"] = review.is_draft
         for field_block in review.form_fields:
             if isinstance(field_block.block, RichTextBlock):
                 review_data[field_block.id] = field_block.value.source
@@ -172,9 +201,7 @@ class SubmissionReviewViewSet(
         Get details of a review on a submission
         """
         review = self.get_object()
-        ser = self.get_serializer(
-            self.get_review_data(review)
-        )
+        ser = self.get_serializer(self.get_review_data(review))
         return Response(ser.data)
 
     def update(self, request, *args, **kwargs):
@@ -195,9 +222,7 @@ class SubmissionReviewViewSet(
         )
         # Automatic workflow actions.
         review_workflow_actions(self.request, review.submission)
-        ser = self.get_serializer(
-            self.get_review_data(review)
-        )
+        ser = self.get_serializer(self.get_review_data(review))
         return Response(ser.data)
 
     def destroy(self, request, *args, **kwargs):
@@ -220,7 +245,7 @@ class SubmissionReviewViewSet(
         )
         return review
 
-    @action(detail=False, methods=['get'])
+    @action(detail=False, methods=["get"])
     def draft(self, request, *args, **kwargs):
         """
         Returns the draft review submitted on a submission by current user.
@@ -231,12 +256,10 @@ class SubmissionReviewViewSet(
             return Response({})
         if not review.is_draft:
             return Response({})
-        ser = self.get_serializer(
-            self.get_review_data(review)
-        )
+        ser = self.get_serializer(self.get_review_data(review))
         return Response(ser.data)
 
-    @action(detail=False, methods=['get'])
+    @action(detail=False, methods=["get"])
     def fields(self, request, *args, **kwargs):
         """
         List details of all the form fields that were created by admin for adding reviews.
@@ -247,7 +270,7 @@ class SubmissionReviewViewSet(
         fields = FieldSerializer(fields.items(), many=True)
         return Response(fields.data)
 
-    @action(detail=True, methods=['post'])
+    @action(detail=True, methods=["post"])
     def opinions(self, request, *args, **kwargs):
         """
         Used to add opinions on a review.
@@ -259,22 +282,17 @@ class SubmissionReviewViewSet(
         review = self.get_object()
         ser = ReviewOpinionWriteSerializer(data=request.data)
         ser.is_valid(raise_exception=True)
-        opinion = ser.validated_data['opinion']
+        opinion = ser.validated_data["opinion"]
         try:
             review_opinion = ReviewOpinion.objects.get(
-                review=review,
-                author=self.get_reviewer()
+                review=review, author=self.get_reviewer()
             )
         except ReviewOpinion.DoesNotExist:
             ReviewOpinion.objects.create(
-                review=review,
-                author=self.get_reviewer(),
-                opinion=opinion
+                review=review, author=self.get_reviewer(), opinion=opinion
             )
         else:
             review_opinion.opinion = opinion
             review_opinion.save()
-        ser = self.get_serializer(
-            self.get_review_data(review)
-        )
+        ser = self.get_serializer(self.get_review_data(review))
         return Response(ser.data, status=status.HTTP_201_CREATED)
diff --git a/hypha/apply/api/v1/screening/filters.py b/hypha/apply/api/v1/screening/filters.py
index 51da1140a95ac74cdf6a2f4df84d23c0cfb8069c..610c714934c1c68c9b2ddebb6618f47d90f46566 100644
--- a/hypha/apply/api/v1/screening/filters.py
+++ b/hypha/apply/api/v1/screening/filters.py
@@ -6,4 +6,4 @@ from hypha.apply.funds.models import ScreeningStatus
 class ScreeningStatusFilter(filters.FilterSet):
     class Meta:
         model = ScreeningStatus
-        fields = ['yes', 'default']
+        fields = ["yes", "default"]
diff --git a/hypha/apply/api/v1/screening/serializers.py b/hypha/apply/api/v1/screening/serializers.py
index 1ab08ad63a80f6e87be8ec014e0b478709bbaf51..eeefea1b5abed37a8f9657c35758f209dfde72eb 100644
--- a/hypha/apply/api/v1/screening/serializers.py
+++ b/hypha/apply/api/v1/screening/serializers.py
@@ -6,7 +6,7 @@ from hypha.apply.funds.models import ScreeningStatus
 class ScreeningStatusListSerializer(serializers.ModelSerializer):
     class Meta:
         model = ScreeningStatus
-        fields = ('id', 'title', 'yes', 'default')
+        fields = ("id", "title", "yes", "default")
 
 
 class ScreeningStatusSerializer(serializers.Serializer):
@@ -16,9 +16,7 @@ class ScreeningStatusSerializer(serializers.Serializer):
         try:
             ScreeningStatus.objects.get(id=value)
         except ScreeningStatus.DoesNotExist as e:
-            raise exceptions.ValidationError({
-                'detail': 'Not found'
-            }) from e
+            raise exceptions.ValidationError({"detail": "Not found"}) from e
         return value
 
 
diff --git a/hypha/apply/api/v1/screening/tests/test_views.py b/hypha/apply/api/v1/screening/tests/test_views.py
index 719e21340ec43a6b93703462e3ecb13a676231b3..b0d37f809b9a0737141e22f2044c5248a2958270 100644
--- a/hypha/apply/api/v1/screening/tests/test_views.py
+++ b/hypha/apply/api/v1/screening/tests/test_views.py
@@ -9,33 +9,30 @@ from hypha.apply.funds.tests.factories.models import ApplicationSubmissionFactor
 from hypha.apply.users.tests.factories import ReviewerFactory, StaffFactory, UserFactory
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 @override_settings(SECURE_SSL_REDIRECT=False)
 class ScreeningStatusViewSetTests(APITestCase):
     def setUp(self):
         ScreeningStatus.objects.all().delete()
-        self.yes_screening_status = baker.make(
-            'funds.ScreeningStatus',
-            yes=True
-        )
+        self.yes_screening_status = baker.make("funds.ScreeningStatus", yes=True)
 
     def get_screening_status_url(self, pk=None):
         if pk:
-            return reverse_lazy('api:v1:screenings-detail', kwargs={'pk': pk})
-        return reverse_lazy('api:v1:screenings-list')
+            return reverse_lazy("api:v1:screenings-detail", kwargs={"pk": pk})
+        return reverse_lazy("api:v1:screenings-list")
 
     def test_staff_can_list_screening_statuses(self):
         user = StaffFactory()
         self.client.force_authenticate(user)
-        response = self.client.get(
-            self.get_screening_status_url()
-        )
+        response = self.client.get(self.get_screening_status_url())
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(len(response.json()), ScreeningStatus.objects.count())
-        self.assertEqual(response.json()[0]['id'], self.yes_screening_status.id)
-        self.assertEqual(response.json()[0]['title'], self.yes_screening_status.title)
-        self.assertEqual(response.json()[0]['yes'], self.yes_screening_status.yes)
-        self.assertEqual(response.json()[0]['default'], self.yes_screening_status.default)
+        self.assertEqual(response.json()[0]["id"], self.yes_screening_status.id)
+        self.assertEqual(response.json()[0]["title"], self.yes_screening_status.title)
+        self.assertEqual(response.json()[0]["yes"], self.yes_screening_status.yes)
+        self.assertEqual(
+            response.json()[0]["default"], self.yes_screening_status.default
+        )
 
     def test_staff_can_view_screening_statuses_detail(self):
         user = StaffFactory()
@@ -48,47 +45,36 @@ class ScreeningStatusViewSetTests(APITestCase):
     def test_user_cant_list_screening_statuses(self):
         user = UserFactory()
         self.client.force_authenticate(user)
-        response = self.client.get(
-            self.get_screening_status_url()
-        )
+        response = self.client.get(self.get_screening_status_url())
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
     def test_reviewer_cant_list_screening_statuses(self):
         user = ReviewerFactory()
         self.client.force_authenticate(user)
-        response = self.client.get(
-            self.get_screening_status_url()
-        )
+        response = self.client.get(self.get_screening_status_url())
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
 
 @override_settings(SECURE_SSL_REDIRECT=False)
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class SubmissionScreeningStatusViewSetTests(APITestCase):
     def setUp(self):
         ScreeningStatus.objects.all().delete()
-        self.yes_screening_status = baker.make(
-            'funds.ScreeningStatus',
-            yes=True
-        )
+        self.yes_screening_status = baker.make("funds.ScreeningStatus", yes=True)
         self.yes_default_screening_status = baker.make(
-            'funds.ScreeningStatus',
-            yes=True,
-            default=True
-        )
-        self.no_screening_status = baker.make(
-            'funds.ScreeningStatus',
-            yes=False
+            "funds.ScreeningStatus", yes=True, default=True
         )
+        self.no_screening_status = baker.make("funds.ScreeningStatus", yes=False)
         self.no_default_screening_status = baker.make(
-            'funds.ScreeningStatus',
-            yes=False,
-            default=True
+            "funds.ScreeningStatus", yes=False, default=True
         )
         self.submission = ApplicationSubmissionFactory()
 
     def get_submission_screening_status_url(self, submission_id=None):
-        return reverse_lazy('api:v1:submission-screening_statuses-list', kwargs={'submission_pk': submission_id})
+        return reverse_lazy(
+            "api:v1:submission-screening_statuses-list",
+            kwargs={"submission_pk": submission_id},
+        )
 
     def test_cant_add_screening_status_without_setting_default(self):
         user = StaffFactory()
@@ -96,12 +82,12 @@ class SubmissionScreeningStatusViewSetTests(APITestCase):
         self.submission.screening_statuses.clear()
         response = self.client.post(
             self.get_submission_screening_status_url(submission_id=self.submission.id),
-            data={'id': self.yes_screening_status.id}
+            data={"id": self.yes_screening_status.id},
         )
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertEqual(
-            response.json()['detail'],
-            "Can't set screening decision without default being set"
+            response.json()["detail"],
+            "Can't set screening decision without default being set",
         )
 
     def test_cant_add_two_types_of_screening_status(self):
@@ -111,12 +97,12 @@ class SubmissionScreeningStatusViewSetTests(APITestCase):
         self.submission.screening_statuses.add(self.yes_default_screening_status)
         response = self.client.post(
             self.get_submission_screening_status_url(submission_id=self.submission.id),
-            data={'id': self.no_screening_status.id}
+            data={"id": self.no_screening_status.id},
         )
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertEqual(
-            response.json()['detail'],
-            "Can't set screening decision for both yes and no"
+            response.json()["detail"],
+            "Can't set screening decision for both yes and no",
         )
 
     def test_add_screening_status(self):
@@ -126,14 +112,17 @@ class SubmissionScreeningStatusViewSetTests(APITestCase):
         self.submission.screening_statuses.add(self.yes_default_screening_status)
         response = self.client.post(
             self.get_submission_screening_status_url(submission_id=self.submission.id),
-            data={'id': self.yes_screening_status.id}
+            data={"id": self.yes_screening_status.id},
         )
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         self.assertEqual(len(response.json()), 2)
 
-        possible_ids = [self.yes_screening_status.id, self.yes_default_screening_status.id]
-        self.assertIn(response.json()[0]['id'], possible_ids)
-        self.assertIn(response.json()[1]['id'], possible_ids)
+        possible_ids = [
+            self.yes_screening_status.id,
+            self.yes_default_screening_status.id,
+        ]
+        self.assertIn(response.json()[0]["id"], possible_ids)
+        self.assertIn(response.json()[1]["id"], possible_ids)
 
     def test_staff_can_list_submission_screening_statuses(self):
         user = StaffFactory()
@@ -150,57 +139,79 @@ class SubmissionScreeningStatusViewSetTests(APITestCase):
         self.submission.screening_statuses.clear()
         self.client.force_authenticate(user)
         response = self.client.post(
-            reverse_lazy('api:v1:submission-screening_statuses-default', kwargs={'submission_pk': self.submission.id}),
-            data={'yes': True}
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-default",
+                kwargs={"submission_pk": self.submission.id},
+            ),
+            data={"yes": True},
         )
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         default_set = self.submission.screening_statuses.get(default=True)
-        self.assertEqual(response.json()['id'], default_set.id)
-        self.assertEqual(response.json()['yes'], default_set.yes)
+        self.assertEqual(response.json()["id"], default_set.id)
+        self.assertEqual(response.json()["yes"], default_set.yes)
 
     def test_change_default_screening_status(self):
         user = StaffFactory()
         self.client.force_authenticate(user)
         self.submission.screening_statuses.clear()
         response = self.client.post(
-            reverse_lazy('api:v1:submission-screening_statuses-default', kwargs={'submission_pk': self.submission.id}),
-            data={'yes': True}
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-default",
+                kwargs={"submission_pk": self.submission.id},
+            ),
+            data={"yes": True},
         )
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         default_set = self.submission.screening_statuses.get(default=True)
-        self.assertEqual(response.json()['id'], default_set.id)
-        self.assertEqual(response.json()['yes'], default_set.yes)
+        self.assertEqual(response.json()["id"], default_set.id)
+        self.assertEqual(response.json()["yes"], default_set.yes)
 
         response = self.client.post(
-            reverse_lazy('api:v1:submission-screening_statuses-default', kwargs={'submission_pk': self.submission.id}),
-            data={'yes': False}
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-default",
+                kwargs={"submission_pk": self.submission.id},
+            ),
+            data={"yes": False},
         )
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         default_set = self.submission.screening_statuses.get(default=True)
-        self.assertEqual(response.json()['id'], default_set.id)
-        self.assertEqual(response.json()['yes'], default_set.yes)
+        self.assertEqual(response.json()["id"], default_set.id)
+        self.assertEqual(response.json()["yes"], default_set.yes)
 
     def test_cant_change_default_screening_status(self):
         user = StaffFactory()
         self.submission.screening_statuses.clear()
         self.client.force_authenticate(user)
-        self.submission.screening_statuses.add(self.yes_default_screening_status, self.yes_screening_status)
+        self.submission.screening_statuses.add(
+            self.yes_default_screening_status, self.yes_screening_status
+        )
         response = self.client.post(
-            reverse_lazy('api:v1:submission-screening_statuses-default', kwargs={'submission_pk': self.submission.id}),
-            data={'yes': False}
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-default",
+                kwargs={"submission_pk": self.submission.id},
+            ),
+            data={"yes": False},
         )
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         default_set = self.submission.screening_statuses.get(default=True)
-        self.assertEqual(response.json()['id'], default_set.id)
-        self.assertEqual(response.json()['yes'], default_set.yes)
+        self.assertEqual(response.json()["id"], default_set.id)
+        self.assertEqual(response.json()["yes"], default_set.yes)
 
     def test_remove_submission_screening_status(self):
         user = StaffFactory()
         self.submission.screening_statuses.clear()
         self.client.force_authenticate(user)
-        self.submission.screening_statuses.add(self.yes_default_screening_status, self.yes_screening_status)
+        self.submission.screening_statuses.add(
+            self.yes_default_screening_status, self.yes_screening_status
+        )
         response = self.client.delete(
-            reverse_lazy('api:v1:submission-screening_statuses-detail', kwargs={'submission_pk': self.submission.id, 'pk': self.yes_screening_status.id})
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-detail",
+                kwargs={
+                    "submission_pk": self.submission.id,
+                    "pk": self.yes_screening_status.id,
+                },
+            )
         )
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(len(response.json()), 1)
@@ -211,12 +222,17 @@ class SubmissionScreeningStatusViewSetTests(APITestCase):
         self.submission.screening_statuses.add(self.yes_default_screening_status)
         self.client.force_authenticate(user)
         response = self.client.delete(
-            reverse_lazy('api:v1:submission-screening_statuses-detail', kwargs={'submission_pk': self.submission.id, 'pk': self.yes_default_screening_status.id})
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-detail",
+                kwargs={
+                    "submission_pk": self.submission.id,
+                    "pk": self.yes_default_screening_status.id,
+                },
+            )
         )
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertEqual(
-            response.json()['detail'],
-            "Can't delete default screening decision."
+            response.json()["detail"], "Can't delete default screening decision."
         )
 
     def test_cant_remove_not_set_screening_status(self):
@@ -224,7 +240,13 @@ class SubmissionScreeningStatusViewSetTests(APITestCase):
         self.submission.screening_statuses.clear()
         self.client.force_authenticate(user)
         response = self.client.delete(
-            reverse_lazy('api:v1:submission-screening_statuses-detail', kwargs={'submission_pk': self.submission.id, 'pk': self.yes_screening_status.id})
+            reverse_lazy(
+                "api:v1:submission-screening_statuses-detail",
+                kwargs={
+                    "submission_pk": self.submission.id,
+                    "pk": self.yes_screening_status.id,
+                },
+            )
         )
         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
 
diff --git a/hypha/apply/api/v1/screening/views.py b/hypha/apply/api/v1/screening/views.py
index 79d1d7cf4901cbfd5d33cfd9c824ec6ccefb0175..290dcd18888fc5e79907e29cddb47f80d0e403f3 100644
--- a/hypha/apply/api/v1/screening/views.py
+++ b/hypha/apply/api/v1/screening/views.py
@@ -20,7 +20,8 @@ from .serializers import (
 
 class ScreeningStatusViewSet(viewsets.ReadOnlyModelViewSet):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     filter_backends = (filters.DjangoFilterBackend,)
     filterset_class = ScreeningStatusFilter
@@ -33,10 +34,12 @@ class SubmissionScreeningStatusViewSet(
     SubmissionNestedMixin,
     mixins.ListModelMixin,
     mixins.CreateModelMixin,
-    viewsets.GenericViewSet
+    viewsets.GenericViewSet,
 ):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser, HasScreenPermission
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
+        HasScreenPermission,
     )
     serializer_class = ScreeningStatusListSerializer
     pagination_class = None
@@ -50,29 +53,33 @@ class SubmissionScreeningStatusViewSet(
         ser.is_valid(raise_exception=True)
         submission = self.get_submission_object()
         screening_status = get_object_or_404(
-            ScreeningStatus, id=ser.validated_data['id']
+            ScreeningStatus, id=ser.validated_data["id"]
         )
         if not submission.screening_statuses.filter(default=True).exists():
-            raise ValidationError({'detail': "Can't set screening decision without default being set"})
+            raise ValidationError(
+                {"detail": "Can't set screening decision without default being set"}
+            )
         if (
-            submission.screening_statuses.exists() and
-            submission.screening_statuses.first().yes != screening_status.yes
+            submission.screening_statuses.exists()
+            and submission.screening_statuses.first().yes != screening_status.yes
         ):
-            raise ValidationError({'detail': "Can't set screening decision for both yes and no"})
-        submission.screening_statuses.add(
-            screening_status
-        )
+            raise ValidationError(
+                {"detail": "Can't set screening decision for both yes and no"}
+            )
+        submission.screening_statuses.add(screening_status)
         ser = self.get_serializer(submission.screening_statuses.all(), many=True)
         return Response(ser.data, status=status.HTTP_201_CREATED)
 
-    @action(detail=False, methods=['post'])
+    @action(detail=False, methods=["post"])
     def default(self, request, *args, **kwargs):
         ser = ScreeningStatusDefaultSerializer(data=request.data)
         ser.is_valid(raise_exception=True)
-        yes = ser.validated_data['yes']
+        yes = ser.validated_data["yes"]
         submission = self.get_submission_object()
         if submission.screening_statuses.filter(default=False).exists():
-            submission.screening_statuses.remove(*submission.screening_statuses.filter(default=False))
+            submission.screening_statuses.remove(
+                *submission.screening_statuses.filter(default=False)
+            )
         screening_status = ScreeningStatus.objects.get(default=True, yes=yes)
         if submission.has_default_screening_status_set:
             default_status = submission.screening_statuses.get()
@@ -84,9 +91,9 @@ class SubmissionScreeningStatusViewSet(
     def destroy(self, request, *args, **kwargs):
         screening_status = self.get_object()
         if screening_status.default:
-            raise ValidationError({
-                'detail': "Can't delete default screening decision."
-            })
+            raise ValidationError(
+                {"detail": "Can't delete default screening decision."}
+            )
         submission = self.get_submission_object()
         submission.screening_statuses.remove(screening_status)
         ser = self.get_serializer(submission.screening_statuses.all(), many=True)
diff --git a/hypha/apply/api/v1/serializers.py b/hypha/apply/api/v1/serializers.py
index 51163602145fd02435e36530c6401648f36cbc53..01288cc79fa8b5cecbf5d42f0f4a3ef00e964982 100644
--- a/hypha/apply/api/v1/serializers.py
+++ b/hypha/apply/api/v1/serializers.py
@@ -24,13 +24,10 @@ User = get_user_model()
 
 class ActionSerializer(serializers.Field):
     def to_representation(self, instance):
-        actions = instance.get_actions_for_user(self.context['request'].user)
+        actions = instance.get_actions_for_user(self.context["request"].user)
         representation = []
         for transition, action in actions:
-            action_dict = {
-                'value': transition,
-                'display': action
-            }
+            action_dict = {"value": transition, "display": action}
 
             # Sometimes the status does not exist in the
             # determination matrix.
@@ -43,40 +40,48 @@ class ActionSerializer(serializers.Field):
             except KeyError:
                 redirect = None
             if redirect:
-                action_dict['type'] = 'redirect'
-                action_dict['target'] = redirect.url
+                action_dict["type"] = "redirect"
+                action_dict["target"] = redirect.url
             else:
-                action_dict['type'] = 'submit'
+                action_dict["type"] = "submit"
 
             representation.append(action_dict)
         return representation
 
 
 class OpinionSerializer(serializers.ModelSerializer):
-    author_id = serializers.ReadOnlyField(source='author.id')
-    opinion = serializers.ReadOnlyField(source='get_opinion_display')
+    author_id = serializers.ReadOnlyField(source="author.id")
+    opinion = serializers.ReadOnlyField(source="get_opinion_display")
 
     class Meta:
         model = ReviewOpinion
-        fields = ('author_id', 'opinion')
+        fields = ("author_id", "opinion")
 
 
 class ReviewSerializer(serializers.ModelSerializer):
     user_id = serializers.SerializerMethodField()
-    author_id = serializers.ReadOnlyField(source='author.id')
-    url = serializers.ReadOnlyField(source='get_absolute_url')
+    author_id = serializers.ReadOnlyField(source="author.id")
+    url = serializers.ReadOnlyField(source="get_absolute_url")
     opinions = OpinionSerializer(read_only=True, many=True)
     recommendation = serializers.SerializerMethodField()
-    score = serializers.ReadOnlyField(source='get_score_display')
+    score = serializers.ReadOnlyField(source="get_score_display")
 
     class Meta:
         model = Review
-        fields = ('id', 'score', 'user_id', 'author_id', 'url', 'opinions', 'recommendation')
+        fields = (
+            "id",
+            "score",
+            "user_id",
+            "author_id",
+            "url",
+            "opinions",
+            "recommendation",
+        )
 
     def get_recommendation(self, obj):
         return {
-            'value': obj.recommendation,
-            'display': obj.get_recommendation_display(),
+            "value": obj.recommendation,
+            "display": obj.get_recommendation_display(),
         }
 
     def get_user_id(self, obj):
@@ -85,32 +90,33 @@ class ReviewSerializer(serializers.ModelSerializer):
 
 class ReviewSummarySerializer(serializers.Serializer):
     reviews = ReviewSerializer(many=True, read_only=True)
-    count = serializers.ReadOnlyField(source='reviews.count')
-    score = serializers.ReadOnlyField(source='reviews.score')
+    count = serializers.ReadOnlyField(source="reviews.count")
+    score = serializers.ReadOnlyField(source="reviews.score")
     recommendation = serializers.SerializerMethodField()
     assigned = serializers.SerializerMethodField()
 
     def get_recommendation(self, obj):
         recommendation = obj.reviews.recommendation()
         return {
-            'value': recommendation,
-            'display': dict(RECOMMENDATION_CHOICES).get(recommendation),
+            "value": recommendation,
+            "display": dict(RECOMMENDATION_CHOICES).get(recommendation),
         }
 
     def get_assigned(self, obj):
-        assigned_reviewers = obj.assigned.select_related('reviewer', 'role', 'type')
+        assigned_reviewers = obj.assigned.select_related("reviewer", "role", "type")
         response = [
             {
-                'id': assigned.id,
-                'name': str(assigned.reviewer),
-                'role': {
-                    'icon': assigned.role and assigned.role.icon_url('fill-12x12'),
-                    'name': assigned.role and assigned.role.name,
-                    'order': assigned.role and assigned.role.order,
+                "id": assigned.id,
+                "name": str(assigned.reviewer),
+                "role": {
+                    "icon": assigned.role and assigned.role.icon_url("fill-12x12"),
+                    "name": assigned.role and assigned.role.name,
+                    "order": assigned.role and assigned.role.order,
                 },
-                'is_staff': assigned.type.name == STAFF_GROUP_NAME,
-                'is_partner': assigned.type.name == PARTNER_GROUP_NAME,
-            } for assigned in assigned_reviewers
+                "is_staff": assigned.type.name == STAFF_GROUP_NAME,
+                "is_partner": assigned.type.name == PARTNER_GROUP_NAME,
+            }
+            for assigned in assigned_reviewers
         ]
         return response
 
@@ -121,30 +127,30 @@ class TimestampField(serializers.Field):
 
 
 class DeterminationSerializer(serializers.ModelSerializer):
-    outcome = serializers.ReadOnlyField(source='get_outcome_display')
+    outcome = serializers.ReadOnlyField(source="get_outcome_display")
     author = serializers.CharField(read_only=True)
-    url = serializers.ReadOnlyField(source='get_absolute_url')
+    url = serializers.ReadOnlyField(source="get_absolute_url")
     updated_at = serializers.DateTimeField(read_only=True)
     is_draft = serializers.BooleanField(read_only=True)
 
     class Meta:
         model = Determination
-        fields = ('id', 'outcome', 'author', 'url', 'updated_at', 'is_draft')
+        fields = ("id", "outcome", "author", "url", "updated_at", "is_draft")
 
 
 class DeterminationSummarySerializer(serializers.Serializer):
     determinations = DeterminationSerializer(many=True, read_only=True)
-    count = serializers.ReadOnlyField(source='determinations.count')
+    count = serializers.ReadOnlyField(source="determinations.count")
 
 
 class SubmissionListSerializer(serializers.ModelSerializer):
-    url = serializers.HyperlinkedIdentityField(view_name='api:v1:submissions-detail')
+    url = serializers.HyperlinkedIdentityField(view_name="api:v1:submissions-detail")
     round = serializers.SerializerMethodField()
     last_update = TimestampField()
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('id', 'title', 'status', 'url', 'round', 'last_update', 'summary')
+        fields = ("id", "title", "status", "url", "round", "last_update", "summary")
 
     def get_round(self, obj):
         """
@@ -163,10 +169,7 @@ class MetaTermsDetailSerializer(serializers.ModelSerializer):
     def get_parent(self, obj):
         parent = obj.get_parent()
         if parent:
-            parent_data = {
-                'id': parent.id,
-                'name': parent.name
-            }
+            parent_data = {"id": parent.id, "name": parent.name}
             return parent_data
 
 
@@ -175,17 +178,19 @@ class SubmissionSummarySerializer(serializers.Serializer):
 
 
 class SubmissionMetaTermsSerializer(serializers.Serializer):
-    meta_terms = serializers.PrimaryKeyRelatedField(many=True, queryset=MetaTerm.objects.all())
+    meta_terms = serializers.PrimaryKeyRelatedField(
+        many=True, queryset=MetaTerm.objects.all()
+    )
 
 
 class SubmissionDetailSerializer(serializers.ModelSerializer):
     questions = serializers.SerializerMethodField()
     meta_questions = serializers.SerializerMethodField()
     meta_terms = MetaTermsDetailSerializer(many=True)
-    stage = serializers.CharField(source='stage.name')
-    actions = ActionSerializer(source='*')
-    review = ReviewSummarySerializer(source='*')
-    determination = DeterminationSummarySerializer(source='*')
+    stage = serializers.CharField(source="stage.name")
+    actions = ActionSerializer(source="*")
+    review = ReviewSummarySerializer(source="*")
+    determination = DeterminationSummarySerializer(source="*")
     phase = serializers.CharField()
     screening = serializers.SerializerMethodField()
     action_buttons = serializers.SerializerMethodField()
@@ -196,30 +201,50 @@ class SubmissionDetailSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('id', 'summary', 'title', 'stage', 'status', 'phase', 'meta_questions', 'meta_terms', 'questions', 'actions', 'review', 'screening', 'action_buttons', 'determination', 'is_determination_form_attached', 'is_user_staff', 'screening', 'flags', 'reminders')
+        fields = (
+            "id",
+            "summary",
+            "title",
+            "stage",
+            "status",
+            "phase",
+            "meta_questions",
+            "meta_terms",
+            "questions",
+            "actions",
+            "review",
+            "screening",
+            "action_buttons",
+            "determination",
+            "is_determination_form_attached",
+            "is_user_staff",
+            "screening",
+            "flags",
+            "reminders",
+        )
 
     def serialize_questions(self, obj, fields):
         for field_id in fields:
             yield obj.serialize(field_id)
 
     def get_is_user_staff(self, obj):
-        request = self.context['request']
+        request = self.context["request"]
         return request.user.is_apply_staff
 
     def get_meta_questions(self, obj):
         meta_questions = {
-            'title': 'Project Name',
-            'full_name': 'Legal Name',
-            'email': 'Email',
-            'value': 'Requested Funding',
-            'duration': 'Project Duration',
-            'address': 'Address'
+            "title": "Project Name",
+            "full_name": "Legal Name",
+            "email": "Email",
+            "value": "Requested Funding",
+            "duration": "Project Duration",
+            "address": "Address",
         }
         data = self.serialize_questions(obj, obj.named_blocks.values())
         data = [
             {
                 **response,
-                'question': meta_questions.get(response['type'], response['question'])
+                "question": meta_questions.get(response["type"], response["question"]),
             }
             for response in data
         ]
@@ -231,7 +256,7 @@ class SubmissionDetailSerializer(serializers.ModelSerializer):
         all_screening = []
 
         for screening in obj.screening_statuses.values():
-            if screening['default']:
+            if screening["default"]:
                 selected_default = screening
             else:
                 selected_reasons.append(screening)
@@ -242,20 +267,14 @@ class SubmissionDetailSerializer(serializers.ModelSerializer):
         screening = {
             "selected_reasons": selected_reasons,
             "selected_default": selected_default,
-            "all_screening": all_screening
+            "all_screening": all_screening,
         }
         return screening
 
     def get_flags(self, obj):
         flags = [
-            {
-                "type": 'user',
-                "selected": obj.flagged_by(self.context['request'].user)
-            },
-            {
-                "type": 'staff',
-                "selected": obj.flagged_staff
-            }
+            {"type": "user", "selected": obj.flagged_by(self.context["request"].user)},
+            {"type": "staff", "selected": obj.flagged_staff},
         ]
 
         return flags
@@ -266,37 +285,37 @@ class SubmissionDetailSerializer(serializers.ModelSerializer):
     def get_reminders(self, obj):
         reminders = []
         for reminder in obj.reminders.all():
-            reminders.append({
-                "id": reminder.id,
-                "submission_id": reminder.submission_id,
-                "title": reminder.title,
-                "action_type": reminder.action_type,
-                "is_expired": reminder.is_expired
-            })
+            reminders.append(
+                {
+                    "id": reminder.id,
+                    "submission_id": reminder.submission_id,
+                    "title": reminder.title,
+                    "action_type": reminder.action_type,
+                    "is_expired": reminder.is_expired,
+                }
+            )
         return reminders
 
     def get_action_buttons(self, obj):
-        request = self.context['request']
+        request = self.context["request"]
         add_review = (
-            obj.phase.permissions.can_review(request.user) and
-            obj.can_review(request.user) and not
-            obj.assigned.draft_reviewed().filter(reviewer=request.user).exists()
-        )
-        show_determination = (
-            show_determination_button(request.user, obj)
+            obj.phase.permissions.can_review(request.user)
+            and obj.can_review(request.user)
+            and not obj.assigned.draft_reviewed().filter(reviewer=request.user).exists()
         )
+        show_determination = show_determination_button(request.user, obj)
         return {
-            'add_review': add_review,
-            'show_determination_button': show_determination,
+            "add_review": add_review,
+            "show_determination_button": show_determination,
         }
 
 
 class SubmissionActionSerializer(serializers.ModelSerializer):
-    actions = ActionSerializer(source='*', read_only=True)
+    actions = ActionSerializer(source="*", read_only=True)
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('id', 'actions')
+        fields = ("id", "actions")
 
 
 class RoundLabDetailSerializer(serializers.ModelSerializer):
@@ -304,14 +323,11 @@ class RoundLabDetailSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = RoundsAndLabs
-        fields = ('id', 'title', 'workflow')
+        fields = ("id", "title", "workflow")
 
     def get_workflow(self, obj):
         return [
-            {
-                'value': phase.name,
-                'display': phase.display_name
-            }
+            {"value": phase.name, "display": phase.display_name}
             for phase in obj.workflow.values()
         ]
 
@@ -319,7 +335,7 @@ class RoundLabDetailSerializer(serializers.ModelSerializer):
 class RoundLabSerializer(serializers.ModelSerializer):
     class Meta:
         model = RoundsAndLabs
-        fields = ('id', 'title')
+        fields = ("id", "title")
 
 
 class OpenRoundLabSerializer(serializers.ModelSerializer):
@@ -332,38 +348,48 @@ class OpenRoundLabSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = RoundsAndLabs
-        fields = ('id', 'title', 'url_path', 'search_description', 'start_date', 'end_date',
-                  'description', 'image', 'weight', 'landing_url')
+        fields = (
+            "id",
+            "title",
+            "url_path",
+            "search_description",
+            "start_date",
+            "end_date",
+            "description",
+            "image",
+            "weight",
+            "landing_url",
+        )
 
     def get_description(self, obj):
-        if hasattr(obj, 'roundbase'):
+        if hasattr(obj, "roundbase"):
             return obj.roundbase.fund.applicationbase.description
-        elif hasattr(obj, 'labbase'):
+        elif hasattr(obj, "labbase"):
             return obj.labbase.description
         return None
 
     def get_image(self, obj):
-        if hasattr(obj, 'roundbase'):
+        if hasattr(obj, "roundbase"):
             fund_image = obj.roundbase.fund.applicationbase.image
             if fund_image:
                 return fund_image.file.url
-        elif hasattr(obj, 'labbase'):
+        elif hasattr(obj, "labbase"):
             lab_image = obj.labbase.image
             if lab_image:
                 return lab_image.url
         return None
 
     def get_weight(self, obj):
-        if hasattr(obj, 'roundbase'):
+        if hasattr(obj, "roundbase"):
             return obj.roundbase.fund.applicationbase.weight
-        elif hasattr(obj, 'labbase'):
+        elif hasattr(obj, "labbase"):
             return obj.labbase.weight
         return None
 
     def get_landing_url(self, obj):
-        if hasattr(obj, 'roundbase'):
+        if hasattr(obj, "roundbase"):
             return obj.roundbase.fund.applicationbase.get_full_url()
-        elif hasattr(obj, 'labbase'):
+        elif hasattr(obj, "labbase"):
             return obj.labbase.get_full_url()
         return None
 
@@ -371,40 +397,61 @@ class OpenRoundLabSerializer(serializers.ModelSerializer):
 class CommentSerializer(serializers.ModelSerializer):
     user = serializers.StringRelatedField()
     message = serializers.SerializerMethodField()
-    edit_url = serializers.HyperlinkedIdentityField(view_name='api:v1:comments-edit')
+    edit_url = serializers.HyperlinkedIdentityField(view_name="api:v1:comments-edit")
     editable = serializers.SerializerMethodField()
     timestamp = TimestampField(read_only=True)
     edited = TimestampField(read_only=True)
 
     class Meta:
         model = Activity
-        fields = ('id', 'timestamp', 'user', 'message', 'visibility', 'edited', 'edit_url', 'editable')
+        fields = (
+            "id",
+            "timestamp",
+            "user",
+            "message",
+            "visibility",
+            "edited",
+            "edit_url",
+            "editable",
+        )
 
     def get_message(self, obj):
         return bleach_value(markdown_to_html(obj.message))
 
     def get_editable(self, obj):
-        return self.context['request'].user == obj.user
+        return self.context["request"].user == obj.user
 
 
 class CommentCreateSerializer(serializers.ModelSerializer):
     user = serializers.StringRelatedField()
-    edit_url = serializers.HyperlinkedIdentityField(view_name='api:v1:comments-edit')
+    edit_url = serializers.HyperlinkedIdentityField(view_name="api:v1:comments-edit")
     editable = serializers.SerializerMethodField()
     timestamp = TimestampField(read_only=True)
     edited = TimestampField(read_only=True)
 
     class Meta:
         model = Activity
-        fields = ('id', 'timestamp', 'user', 'message', 'visibility', 'edited', 'edit_url', 'editable')
+        fields = (
+            "id",
+            "timestamp",
+            "user",
+            "message",
+            "visibility",
+            "edited",
+            "edit_url",
+            "editable",
+        )
 
     def get_editable(self, obj):
-        return self.context['request'].user == obj.user
+        return self.context["request"].user == obj.user
 
 
 class CommentEditSerializer(CommentCreateSerializer):
     class Meta(CommentCreateSerializer.Meta):
-        read_only_fields = ('timestamp', 'edited',)
+        read_only_fields = (
+            "timestamp",
+            "edited",
+        )
 
 
 class UserSerializer(serializers.Serializer):
diff --git a/hypha/apply/api/v1/stream_serializers.py b/hypha/apply/api/v1/stream_serializers.py
index 71f66b14baa11197b896e65ca03db9e75ef453c0..bbc529aac7e0ac08a77a5407f70739d898660e0f 100644
--- a/hypha/apply/api/v1/stream_serializers.py
+++ b/hypha/apply/api/v1/stream_serializers.py
@@ -9,11 +9,10 @@ from hypha.apply.stream_forms.forms import BlockFieldWrapper
 
 from .review.fields import ScoredAnswerListField
 
-IGNORE_ARGS = ['self', 'cls']
+IGNORE_ARGS = ["self", "cls"]
 
 
 class WagtailSerializer:
-
     def get_serializer_fields(self, draft=False):
         """
         Get the respective serializer fields for all the form fields.
@@ -22,9 +21,7 @@ class WagtailSerializer:
         form_fields = self.get_form_fields()
         for field_id, field in form_fields.items():
             serializer_fields[field_id] = self._get_field(
-                field,
-                self.get_serializer_field_class(field),
-                draft
+                field, self.get_serializer_field_class(field), draft
             )
         return serializer_fields
 
@@ -38,22 +35,22 @@ class WagtailSerializer:
         for kwarg, value in kwargs.items():
             # set corresponding DRF attributes which don't have alternative
             # in Django form fields
-            if kwarg == 'required':
-                field_kwargs['allow_blank'] = not value
-                field_kwargs['allow_null'] = not value
+            if kwarg == "required":
+                field_kwargs["allow_blank"] = not value
+                field_kwargs["allow_null"] = not value
 
         if draft:
             # Set required false for fields if it's a draft.
-            field_kwargs['required'] = False
-            field_kwargs['allow_null'] = True
-            field_kwargs['allow_blank'] = True
+            field_kwargs["required"] = False
+            field_kwargs["allow_null"] = True
+            field_kwargs["allow_blank"] = True
         try:
             field = serializer_field_class(**field_kwargs)
         except TypeError:
             # ScoredAnswerField doesn't have allow_blank attribute
-            field_kwargs.pop('allow_blank')
-            if serializer_field_class.__name__ == 'ScoredAnswerListField':
-                field_kwargs['draft'] = True
+            field_kwargs.pop("allow_blank")
+            if serializer_field_class.__name__ == "ScoredAnswerListField":
+                field_kwargs["draft"] = True
                 return serializer_field_class(**field_kwargs)
             return serializer_field_class(**field_kwargs)
 
@@ -64,7 +61,11 @@ class WagtailSerializer:
         Get the list of parameter names which function accepts.
         """
         try:
-            spec = inspect.getfullargspec(func) if hasattr(inspect, 'getfullargspec') else inspect.getargspec(func)
+            spec = (
+                inspect.getfullargspec(func)
+                if hasattr(inspect, "getfullargspec")
+                else inspect.getargspec(func)
+            )
             return [i for i in spec[0] if i not in IGNORE_ARGS]
         except TypeError:
             return []
@@ -75,7 +76,7 @@ class WagtailSerializer:
         """
         args = set()
         for i in klass.mro():
-            if i is object or not hasattr(i, '__init__'):
+            if i is object or not hasattr(i, "__init__"):
                 continue
             args |= set(self.find_function_args(i.__init__))
 
@@ -83,7 +84,8 @@ class WagtailSerializer:
 
     def find_matching_class_kwargs(self, reference_object, klass):
         return {
-            i: getattr(reference_object, i) for i in self.find_class_args(klass)
+            i: getattr(reference_object, i)
+            for i in self.find_class_args(klass)
             if hasattr(reference_object, i)
         }
 
@@ -97,25 +99,25 @@ class WagtailSerializer:
         """
         attrs = self.find_matching_class_kwargs(form_field, serializer_field_class)
 
-        if 'choices' in attrs:
-            choices = OrderedDict(attrs['choices']).keys()
-            attrs['choices'] = OrderedDict(zip(choices, choices, strict=True))
+        if "choices" in attrs:
+            choices = OrderedDict(attrs["choices"]).keys()
+            attrs["choices"] = OrderedDict(zip(choices, choices, strict=True))
 
-        if getattr(form_field, 'initial', None):
-            attrs['default'] = form_field.initial
+        if getattr(form_field, "initial", None):
+            attrs["default"] = form_field.initial
 
         # avoid "May not set both `required` and `default`"
-        if attrs.get('required') and 'default' in attrs:
-            del attrs['required']
+        if attrs.get("required") and "default" in attrs:
+            del attrs["required"]
 
         if isinstance(form_field, BlockFieldWrapper):
-            attrs['read_only'] = True
+            attrs["read_only"] = True
             return attrs
 
         # avoid "May not set both `read_only` and `required`"
-        if form_field.widget.attrs.get('readonly', False) == 'readonly':
-            attrs['read_only'] = True
-            del attrs['required']
+        if form_field.widget.attrs.get("readonly", False) == "readonly":
+            attrs["read_only"] = True
+            del attrs["required"]
         return attrs
 
     def get_serializer_field_class(self, field):
@@ -140,6 +142,16 @@ class WagtailSerializer:
         # Model serializers needs to have each field declared in the field options
         # of Meta. This code adds the dynamically generated serializer fields
         # to the serializer class meta fields.
-        model_fields = [field for field in self.serializer_class.Meta.fields if hasattr(self.serializer_class.Meta.model, field)]
-        self.serializer_class.Meta.fields = model_fields + [*self.get_serializer_fields(draft).keys()]
-        return type('WagtailStreamSerializer', (self.serializer_class,), self.get_serializer_fields(draft))
+        model_fields = [
+            field
+            for field in self.serializer_class.Meta.fields
+            if hasattr(self.serializer_class.Meta.model, field)
+        ]
+        self.serializer_class.Meta.fields = model_fields + [
+            *self.get_serializer_fields(draft).keys()
+        ]
+        return type(
+            "WagtailStreamSerializer",
+            (self.serializer_class,),
+            self.get_serializer_fields(draft),
+        )
diff --git a/hypha/apply/api/v1/tests/test_serializers.py b/hypha/apply/api/v1/tests/test_serializers.py
index 6e2930ba82bc70f697c10881c09d0ab34a1d5bd4..2068685be2f83d6eb8f6befa5203ba306474fa48 100644
--- a/hypha/apply/api/v1/tests/test_serializers.py
+++ b/hypha/apply/api/v1/tests/test_serializers.py
@@ -9,46 +9,50 @@ from ..projects.serializers import DeliverableSerializer
 from ..serializers import ReviewSummarySerializer
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestReviewSummarySerializer(TestCase):
     def test_handles_no_reviews(self):
         submission = ApplicationSubmissionFactory()
         data = ReviewSummarySerializer(submission).data
-        self.assertEqual(data['count'], 0)
-        self.assertEqual(data['score'], None)
-        self.assertEqual(data['recommendation'], {'value': -1, 'display': None})
-        self.assertEqual(data['assigned'], [])
-        self.assertEqual(data['reviews'], [])
+        self.assertEqual(data["count"], 0)
+        self.assertEqual(data["score"], None)
+        self.assertEqual(data["recommendation"], {"value": -1, "display": None})
+        self.assertEqual(data["assigned"], [])
+        self.assertEqual(data["reviews"], [])
 
     def test_handles_negative_reviews(self):
         submission = ApplicationSubmissionFactory()
         ReviewFactory(submission=submission)
         data = ReviewSummarySerializer(submission).data
-        self.assertEqual(data['count'], 1)
-        self.assertEqual(data['score'], 0)
-        self.assertEqual(data['recommendation'], {'value': 0, 'display': 'No'})
-        self.assertEqual(len(data['assigned']), 1)
-        self.assertEqual(len(data['reviews']), 1)
+        self.assertEqual(data["count"], 1)
+        self.assertEqual(data["score"], 0)
+        self.assertEqual(data["recommendation"], {"value": 0, "display": "No"})
+        self.assertEqual(len(data["assigned"]), 1)
+        self.assertEqual(len(data["reviews"]), 1)
 
 
 class TestDeliverableSerializer(TestCase):
     def test_id_is_required(self):
-        serializer = DeliverableSerializer(data={'quantity': 1})
+        serializer = DeliverableSerializer(data={"quantity": 1})
         self.assertFalse(serializer.is_valid())
-        error_message = {'id': [ErrorDetail(string='This field is required.', code='required')]}
+        error_message = {
+            "id": [ErrorDetail(string="This field is required.", code="required")]
+        }
         self.assertEqual(serializer.errors, error_message)
 
     def test_validate_id(self):
-        serializer = DeliverableSerializer(data={'id': 1, 'quantity': 1})
+        serializer = DeliverableSerializer(data={"id": 1, "quantity": 1})
         self.assertFalse(serializer.is_valid())
-        error_message = {'id': {'detail': ErrorDetail(string='Not found', code='invalid')}}
+        error_message = {
+            "id": {"detail": ErrorDetail(string="Not found", code="invalid")}
+        }
         self.assertEqual(serializer.errors, error_message)
 
         deliverable = DeliverableFactory()
-        serializer = DeliverableSerializer(data={'id': deliverable.id, 'quantity': 1})
+        serializer = DeliverableSerializer(data={"id": deliverable.id, "quantity": 1})
         self.assertTrue(serializer.is_valid())
 
     def test_quantity_not_required(self):
         deliverable = DeliverableFactory()
-        serializer = DeliverableSerializer(data={'id': deliverable.id})
+        serializer = DeliverableSerializer(data={"id": deliverable.id})
         self.assertTrue(serializer.is_valid())
diff --git a/hypha/apply/api/v1/tests/test_views.py b/hypha/apply/api/v1/tests/test_views.py
index 9112fef5630bacc7beaf53312bb74467560020d4..f8fe382d71b67ed0473d0d27b75c6c7e7c26d25b 100644
--- a/hypha/apply/api/v1/tests/test_views.py
+++ b/hypha/apply/api/v1/tests/test_views.py
@@ -25,13 +25,13 @@ from hypha.apply.users.tests.factories import (
 )
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestCommentEdit(TestCase):
-    def post_to_edit(self, comment_pk, message='my message'):
+    def post_to_edit(self, comment_pk, message="my message"):
         return self.client.post(
-            reverse_lazy('api:v1:comments-edit', kwargs={'pk': comment_pk}),
+            reverse_lazy("api:v1:comments-edit", kwargs={"pk": comment_pk}),
             secure=True,
-            data={'message': message},
+            data={"message": message},
         )
 
     def test_cant_edit_if_not_author(self):
@@ -40,11 +40,11 @@ class TestCommentEdit(TestCase):
         self.assertEqual(response.status_code, 403)
 
     def test_edit_updates_correctly(self):
-        user = UserFactory()
+        user = StaffFactory()
         comment = CommentFactory(user=user)
         self.client.force_login(user)
 
-        new_message = 'hi there'
+        new_message = "hi there"
 
         response = self.post_to_edit(comment.pk, new_message)
 
@@ -55,9 +55,9 @@ class TestCommentEdit(TestCase):
 
         time = comment.timestamp.timestamp() * 1000
 
-        self.assertEqual(time, response.json()['timestamp'])
+        self.assertEqual(time, response.json()["timestamp"])
         self.assertFalse(comment.current)
-        self.assertEqual(response.json()['message'], new_message)
+        self.assertEqual(response.json()["message"], new_message)
 
     def test_incorrect_id_denied(self):
         response = self.post_to_edit(10000)
@@ -69,39 +69,40 @@ class TestCommentEdit(TestCase):
         self.client.force_login(user)
 
         self.client.post(
-            reverse_lazy('api:v1:comments-edit', kwargs={'pk': comment.pk}),
+            reverse_lazy("api:v1:comments-edit", kwargs={"pk": comment.pk}),
             secure=True,
             data={
-                'message': comment.message,
-                'visibility': comment.visibility,
-            })
+                "message": comment.message,
+                "visibility": comment.visibility,
+            },
+        )
 
         self.assertEqual(Activity.objects.count(), 1)
 
-    def test_can_change_visibility(self):
-        user = UserFactory()
+    def test_staff_can_change_visibility(self):
+        user = StaffFactory()
         comment = CommentFactory(user=user, visibility=APPLICANT)
         self.client.force_login(user)
 
         response = self.client.post(
-            reverse_lazy('api:v1:comments-edit', kwargs={'pk': comment.pk}),
+            reverse_lazy("api:v1:comments-edit", kwargs={"pk": comment.pk}),
             secure=True,
             data={
-                'message': 'the new message',
-                'visibility': ALL,
+                "message": "the new message",
+                "visibility": ALL,
             },
         )
 
         self.assertEqual(response.status_code, 200, response.json())
-        self.assertEqual(response.json()['visibility'], ALL)
+        self.assertEqual(response.json()["visibility"], ALL)
 
     def test_out_of_order_does_nothing(self):
-        user = UserFactory()
+        user = ApplicantFactory()  # any role assigned user
         comment = CommentFactory(user=user)
         self.client.force_login(user)
 
-        new_message = 'hi there'
-        newer_message = 'hello there'
+        new_message = "hi there"
+        newer_message = "hello there"
 
         response_one = self.post_to_edit(comment.pk, new_message)
         response_two = self.post_to_edit(comment.pk, newer_message)
@@ -111,19 +112,28 @@ class TestCommentEdit(TestCase):
         self.assertEqual(Activity.objects.count(), 2)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestInvoiceDeliverableViewset(TestCase):
     def post_to_add(self, project_id, invoice_id, deliverable_id, quantity=1):
         return self.client.post(
-            reverse_lazy('api:v1:set-deliverables', kwargs={'project_pk': project_id, 'invoice_pk': invoice_id}),
+            reverse_lazy(
+                "api:v1:set-deliverables",
+                kwargs={"project_pk": project_id, "invoice_pk": invoice_id},
+            ),
             secure=True,
-            data={'id': deliverable_id, 'quantity': quantity},
+            data={"id": deliverable_id, "quantity": quantity},
         )
 
     def delete_to_remove(self, project_id, invoice_id, deliverable_id):
         return self.client.delete(
-            reverse_lazy('api:v1:remove-deliverables', kwargs={
-                'project_pk': project_id, 'invoice_pk': invoice_id, 'pk': deliverable_id}),
+            reverse_lazy(
+                "api:v1:remove-deliverables",
+                kwargs={
+                    "project_pk": project_id,
+                    "invoice_pk": invoice_id,
+                    "pk": deliverable_id,
+                },
+            ),
             secure=True,
         )
 
@@ -265,7 +275,9 @@ class TestInvoiceDeliverableViewset(TestCase):
         staff = StaffFactory()
         for user in [staff, finance1, finance2]:
             self.client.force_login(user)
-            response = self.delete_to_remove(project.id, invoice.id, invoice_deliverable.id)
+            response = self.delete_to_remove(
+                project.id, invoice.id, invoice_deliverable.id
+            )
             self.assertEqual(response.status_code, 403)
 
     def test_deliverable_dont_exists_in_project_deliverables(self):
@@ -277,7 +289,7 @@ class TestInvoiceDeliverableViewset(TestCase):
 
         response = self.post_to_add(project.id, invoice.id, deliverable.id)
         self.assertEqual(response.status_code, 400)
-        error_message = {'detail': ErrorDetail(string='Not Found', code='invalid')}
+        error_message = {"detail": ErrorDetail(string="Not Found", code="invalid")}
         self.assertEqual(response.data, error_message)
 
     def test_deliverable_already_exists_in_invoice(self):
@@ -291,7 +303,11 @@ class TestInvoiceDeliverableViewset(TestCase):
 
         response = self.post_to_add(project.id, invoice.id, deliverable.id)
         self.assertEqual(response.status_code, 400)
-        error_message = {'detail': ErrorDetail(string='Invoice Already has this deliverable', code='invalid')}
+        error_message = {
+            "detail": ErrorDetail(
+                string="Invoice Already has this deliverable", code="invalid"
+            )
+        }
         self.assertEqual(response.data, error_message)
 
     def test_deliverable_available_gte_quantity(self):
@@ -303,5 +319,9 @@ class TestInvoiceDeliverableViewset(TestCase):
 
         response = self.post_to_add(project.id, invoice.id, deliverable.id, quantity=3)
         self.assertEqual(response.status_code, 400)
-        error_message = {'detail': ErrorDetail(string='Required quantity is more than available', code='invalid')}
+        error_message = {
+            "detail": ErrorDetail(
+                string="Required quantity is more than available", code="invalid"
+            )
+        }
         self.assertEqual(response.data, error_message)
diff --git a/hypha/apply/api/v1/urls.py b/hypha/apply/api/v1/urls.py
index 81d72dbb2e7ac81261ced68c0287625b152bc64d..c9b82e4cdc1984e8bddf4e0a3c19ce56bb0cce92 100644
--- a/hypha/apply/api/v1/urls.py
+++ b/hypha/apply/api/v1/urls.py
@@ -21,29 +21,51 @@ from .views import (
     SubmissionViewSet,
 )
 
-app_name = 'v1'
+app_name = "v1"
 
 
 router = routers.SimpleRouter()
-router.register(r'submissions', SubmissionViewSet, basename='submissions')
-router.register(r'comments', CommentViewSet, basename='comments')
-router.register(r'rounds', RoundViewSet, basename='rounds')
-router.register(r'screening_statuses', ScreeningStatusViewSet, basename='screenings')
-router.register(r'meta_terms', MetaTermsViewSet, basename='meta-terms')
-
-submission_router = routers.NestedSimpleRouter(router, r'submissions', lookup='submission')
-submission_router.register(r'actions', SubmissionActionViewSet, basename='submission-actions')
-submission_router.register(r'comments', SubmissionCommentViewSet, basename='submission-comments')
-submission_router.register(r'reviews', SubmissionReviewViewSet, basename='reviews')
-submission_router.register(r'determinations', SubmissionDeterminationViewSet, basename='determinations')
-submission_router.register(r'screening_statuses', SubmissionScreeningStatusViewSet, basename='submission-screening_statuses')
-submission_router.register(r'reminders', SubmissionReminderViewSet, basename='submission-reminder')
+router.register(r"submissions", SubmissionViewSet, basename="submissions")
+router.register(r"comments", CommentViewSet, basename="comments")
+router.register(r"rounds", RoundViewSet, basename="rounds")
+router.register(r"screening_statuses", ScreeningStatusViewSet, basename="screenings")
+router.register(r"meta_terms", MetaTermsViewSet, basename="meta-terms")
+
+submission_router = routers.NestedSimpleRouter(
+    router, r"submissions", lookup="submission"
+)
+submission_router.register(
+    r"actions", SubmissionActionViewSet, basename="submission-actions"
+)
+submission_router.register(
+    r"comments", SubmissionCommentViewSet, basename="submission-comments"
+)
+submission_router.register(r"reviews", SubmissionReviewViewSet, basename="reviews")
+submission_router.register(
+    r"determinations", SubmissionDeterminationViewSet, basename="determinations"
+)
+submission_router.register(
+    r"screening_statuses",
+    SubmissionScreeningStatusViewSet,
+    basename="submission-screening_statuses",
+)
+submission_router.register(
+    r"reminders", SubmissionReminderViewSet, basename="submission-reminder"
+)
 
 urlpatterns = [
-    path('user/', CurrentUser.as_view(), name='user'),
-    path('submissions_filter/', SubmissionFilters.as_view(), name='submissions-filter'),
-    path('projects/<int:project_pk>/invoices/<int:invoice_pk>/deliverables/', InvoiceDeliverableViewSet.as_view({'post': 'create'}), name='set-deliverables'),
-    path('projects/<int:project_pk>/invoices/<int:invoice_pk>/deliverables/<int:pk>/', InvoiceDeliverableViewSet.as_view({'delete': 'destroy'}), name='remove-deliverables'),
+    path("user/", CurrentUser.as_view(), name="user"),
+    path("submissions_filter/", SubmissionFilters.as_view(), name="submissions-filter"),
+    path(
+        "projects/<int:project_pk>/invoices/<int:invoice_pk>/deliverables/",
+        InvoiceDeliverableViewSet.as_view({"post": "create"}),
+        name="set-deliverables",
+    ),
+    path(
+        "projects/<int:project_pk>/invoices/<int:invoice_pk>/deliverables/<int:pk>/",
+        InvoiceDeliverableViewSet.as_view({"delete": "destroy"}),
+        name="remove-deliverables",
+    ),
 ]
 
 urlpatterns = router.urls + submission_router.urls + urlpatterns
diff --git a/hypha/apply/api/v1/utils.py b/hypha/apply/api/v1/utils.py
index 203a6fb7a56b944adac9ea479711eaa2a5f4d15e..f6af1638d1ebf2283c5d7021422b61825581e046 100644
--- a/hypha/apply/api/v1/utils.py
+++ b/hypha/apply/api/v1/utils.py
@@ -15,84 +15,88 @@ User = get_user_model()
 
 def get_field_kwargs(form_field):
     if isinstance(form_field, BlockFieldWrapper):
-        return {'text': form_field.block.value.source}
+        return {"text": form_field.block.value.source}
     kwargs = OrderedDict()
     kwargs = {
-        'initial': form_field.initial,
-        'required': form_field.required,
-        'label': form_field.label,
-        'label_suffix': form_field.label_suffix,
-        'help_text': form_field.help_text,
-        'help_link': form_field.help_link
+        "initial": form_field.initial,
+        "required": form_field.required,
+        "label": form_field.label,
+        "label_suffix": form_field.label_suffix,
+        "help_text": form_field.help_text,
+        "help_link": form_field.help_link,
     }
     if isinstance(form_field, forms.CharField):
-        if hasattr(form_field, 'word_limit'):
-            kwargs['word_limit'] = form_field.word_limit
-        kwargs['max_length'] = form_field.max_length
-        kwargs['min_length'] = form_field.min_length
-        kwargs['empty_value'] = form_field.empty_value
+        if hasattr(form_field, "word_limit"):
+            kwargs["word_limit"] = form_field.word_limit
+        kwargs["max_length"] = form_field.max_length
+        kwargs["min_length"] = form_field.min_length
+        kwargs["empty_value"] = form_field.empty_value
     if isinstance(form_field, forms.ChoiceField):
-        kwargs['choices'] = form_field.choices
+        kwargs["choices"] = form_field.choices
     if isinstance(form_field, forms.TypedChoiceField):
-        kwargs['empty_value'] = form_field.empty_value
+        kwargs["empty_value"] = form_field.empty_value
     if isinstance(form_field, forms.IntegerField):
-        kwargs['max_value'] = form_field.max_value
-        kwargs['min_value'] = form_field.min_value
+        kwargs["max_value"] = form_field.max_value
+        kwargs["min_value"] = form_field.min_value
     if isinstance(form_field, ScoredAnswerField):
         fields = [
             {
-                'type': form_field.fields[0].__class__.__name__,
-                'max_length': form_field.fields[0].max_length,
-                'min_length': form_field.fields[0].min_length,
-                'empty_value': form_field.fields[0].empty_value
+                "type": form_field.fields[0].__class__.__name__,
+                "max_length": form_field.fields[0].max_length,
+                "min_length": form_field.fields[0].min_length,
+                "empty_value": form_field.fields[0].empty_value,
             },
             {
-                'type': form_field.fields[1].__class__.__name__,
-                'choices': form_field.fields[1].choices,
+                "type": form_field.fields[1].__class__.__name__,
+                "choices": form_field.fields[1].choices,
             },
         ]
-        kwargs['fields'] = fields
+        kwargs["fields"] = fields
     return kwargs
 
 
 def get_field_widget(form_field):
     if isinstance(form_field, BlockFieldWrapper):
-        return {'type': 'LoadHTML', 'attrs': {}}
+        return {"type": "LoadHTML", "attrs": {}}
     widget = {
-        'type': form_field.widget.__class__.__name__,
-        'attrs': form_field.widget.attrs
+        "type": form_field.widget.__class__.__name__,
+        "attrs": form_field.widget.attrs,
     }
     if isinstance(form_field.widget, TinyMCE):
         mce_attrs = form_field.widget.mce_attrs
-        plugins = mce_attrs.get('plugins')
+        plugins = mce_attrs.get("plugins")
         if not isinstance(plugins, list):
-            mce_attrs['plugins'] = [plugins]
-        if 'toolbar1' in mce_attrs:
-            mce_attrs['toolbar'] = mce_attrs.pop('toolbar1')
-        widget['mce_attrs'] = mce_attrs
+            mce_attrs["plugins"] = [plugins]
+        if "toolbar1" in mce_attrs:
+            mce_attrs["toolbar"] = mce_attrs.pop("toolbar1")
+        widget["mce_attrs"] = mce_attrs
     if isinstance(form_field.widget, ScoredAnswerWidget):
         field_widgets = form_field.widget.widgets
         widgets = [
             {
-                'type': field_widgets[0].__class__.__name__,
-                'attrs': field_widgets[0].attrs,
-                'mce_attrs': field_widgets[0].mce_attrs
+                "type": field_widgets[0].__class__.__name__,
+                "attrs": field_widgets[0].attrs,
+                "mce_attrs": field_widgets[0].mce_attrs,
             },
             {
-                'type': field_widgets[1].__class__.__name__,
-                'attrs': field_widgets[1].attrs,
-            }
+                "type": field_widgets[1].__class__.__name__,
+                "attrs": field_widgets[1].attrs,
+            },
         ]
-        widget['widgets'] = widgets
+        widget["widgets"] = widgets
     return widget
 
 
 def get_round_leads():
     return User.objects.filter(submission_lead__isnull=False).distinct()
 
+
 def get_screening_statuses():
     return ScreeningStatus.objects.filter(
-        id__in=ApplicationSubmission.objects.all().values('screening_statuses__id').distinct('screening_statuses__id'))
+        id__in=ApplicationSubmission.objects.all()
+        .values("screening_statuses__id")
+        .distinct("screening_statuses__id")
+    )
 
 
 def get_used_rounds():
@@ -105,6 +109,4 @@ def get_used_funds():
 
 
 def get_category_options():
-    return Option.objects.filter(
-        category__filter_on_dashboard=True
-    )
+    return Option.objects.filter(category__filter_on_dashboard=True)
diff --git a/hypha/apply/api/v1/views.py b/hypha/apply/api/v1/views.py
index c3789cbf0c4b7dc1ba19c31a7a548a9f828cb413..e5f7280120d733d6119043ecc8e71af79b6e4749 100644
--- a/hypha/apply/api/v1/views.py
+++ b/hypha/apply/api/v1/views.py
@@ -49,41 +49,46 @@ from .utils import (
 
 class SubmissionViewSet(viewsets.ReadOnlyModelViewSet, viewsets.GenericViewSet):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     filter_backends = (filters.DjangoFilterBackend,)
     filter_class = SubmissionsFilter
     pagination_class = StandardResultsSetPagination
 
     def get_serializer_class(self):
-        if self.action == 'list':
+        if self.action == "list":
             return SubmissionListSerializer
         return SubmissionDetailSerializer
 
     def get_queryset(self):
-        if self.action == 'list':
-            return ApplicationSubmission.objects.exclude_draft().current().with_latest_update()
+        if self.action == "list":
+            return (
+                ApplicationSubmission.objects.exclude_draft()
+                .current()
+                .with_latest_update()
+            )
         return ApplicationSubmission.objects.exclude_draft().prefetch_related(
-            Prefetch('reviews', Review.objects.submitted()),
+            Prefetch("reviews", Review.objects.submitted()),
         )
 
-    @action(detail=True, methods=['put'])
+    @action(detail=True, methods=["put"])
     def set_summary(self, request, pk=None):
         submission = self.get_object()
         serializer = SubmissionSummarySerializer(data=request.data)
         serializer.is_valid(raise_exception=True)
-        summary = serializer.validated_data['summary']
+        summary = serializer.validated_data["summary"]
         submission.summary = summary
-        submission.save(update_fields=['summary'])
+        submission.save(update_fields=["summary"])
         serializer = self.get_serializer(submission)
         return Response(serializer.data)
 
-    @action(detail=True, methods=['post'])
+    @action(detail=True, methods=["post"])
     def meta_terms(self, request, pk=None):
         submission = self.get_object()
         serializer = SubmissionMetaTermsSerializer(data=request.data)
         serializer.is_valid(raise_exception=True)
-        meta_terms_ids = serializer.validated_data['meta_terms']
+        meta_terms_ids = serializer.validated_data["meta_terms"]
         submission.meta_terms.set(meta_terms_ids)
         serializer = self.get_serializer(submission)
         return Response(serializer.data)
@@ -91,63 +96,100 @@ class SubmissionViewSet(viewsets.ReadOnlyModelViewSet, viewsets.GenericViewSet):
 
 class SubmissionFilters(APIView):
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
 
     def filter_unique_options(self, options):
-        unique_items = [dict(item) for item in {tuple(option.items()) for option in options}]
+        unique_items = [
+            dict(item) for item in {tuple(option.items()) for option in options}
+        ]
         return list(filter(lambda x: len(x.get("label")), unique_items))
 
     def format(self, filterKey, label, options):
         if label == "Screenings":
             options.insert(0, {"key": None, "label": "No Screening"})
-        return {
-            "filterKey": filterKey,
-            "label": label,
-            "options": options
-        }
+        return {"filterKey": filterKey, "label": label, "options": options}
 
     def get(self, request, format=None):
         filter_options = [
-            self.format("fund", "Funds", [
-                {"key": fund.get("id"), "label": fund.get("title")}
-                for fund in get_used_funds().values()
-            ]),
-            self.format("round", "Rounds", [
-                {"key": round.get("id"), "label": round.get("title")}
-                for round in get_used_rounds().values()
-            ]),
-            self.format("status", "Statuses", [
-                {'key': list(STATUSES.get(label)), 'label': label}
-                for label in dict(STATUSES)
-            ]),
-            self.format("screening_statuses", "Screenings", self.filter_unique_options([
-                {"key": screening.get("id"), "label": screening.get("title")}
-                for screening in get_screening_statuses().values()
-            ])),
-            self.format("lead", "Leads", [
-                {"key": lead.get('id'), "label": lead.get('full_name') or lead.get('email')}
-                for lead in get_round_leads().values()
-            ]),
-            self.format("reviewers", "Reviewers", self.filter_unique_options([
-                {"key": reviewer.get('id'), "label": reviewer.get('full_name') or reviewer.get('email')}
-                for reviewer in get_all_reviewers().values()
-            ])),
-            self.format("category_options", "Category", self.filter_unique_options([
-                {"key": option.get('id'), "label": option.get('value')}
-                for option in get_category_options().values()
-            ])),
+            self.format(
+                "fund",
+                "Funds",
+                [
+                    {"key": fund.get("id"), "label": fund.get("title")}
+                    for fund in get_used_funds().values()
+                ],
+            ),
+            self.format(
+                "round",
+                "Rounds",
+                [
+                    {"key": round.get("id"), "label": round.get("title")}
+                    for round in get_used_rounds().values()
+                ],
+            ),
+            self.format(
+                "status",
+                "Statuses",
+                [
+                    {"key": list(STATUSES.get(label)), "label": label}
+                    for label in dict(STATUSES)
+                ],
+            ),
+            self.format(
+                "screening_statuses",
+                "Screenings",
+                self.filter_unique_options(
+                    [
+                        {"key": screening.get("id"), "label": screening.get("title")}
+                        for screening in get_screening_statuses().values()
+                    ]
+                ),
+            ),
+            self.format(
+                "lead",
+                "Leads",
+                [
+                    {
+                        "key": lead.get("id"),
+                        "label": lead.get("full_name") or lead.get("email"),
+                    }
+                    for lead in get_round_leads().values()
+                ],
+            ),
+            self.format(
+                "reviewers",
+                "Reviewers",
+                self.filter_unique_options(
+                    [
+                        {
+                            "key": reviewer.get("id"),
+                            "label": reviewer.get("full_name") or reviewer.get("email"),
+                        }
+                        for reviewer in get_all_reviewers().values()
+                    ]
+                ),
+            ),
+            self.format(
+                "category_options",
+                "Category",
+                self.filter_unique_options(
+                    [
+                        {"key": option.get("id"), "label": option.get("value")}
+                        for option in get_category_options().values()
+                    ]
+                ),
+            ),
         ]
         return Response(filter_options)
 
 
-class SubmissionActionViewSet(
-    SubmissionNestedMixin,
-    viewsets.GenericViewSet
-):
+class SubmissionActionViewSet(SubmissionNestedMixin, viewsets.GenericViewSet):
     serializer_class = SubmissionActionSerializer
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
 
     def get_object(self):
@@ -174,54 +216,62 @@ class SubmissionActionViewSet(
         {"action": "internal_review"}
         ```
         """
-        action = request.data.get('action')
+        action = request.data.get("action")
         if not action:
-            raise ValidationError('Action must be provided.')
+            raise ValidationError("Action must be provided.")
         obj = self.get_object()
 
-        redirect = DeterminationCreateOrUpdateView.should_redirect(
-            request, obj, action)
+        redirect = DeterminationCreateOrUpdateView.should_redirect(request, obj, action)
         if redirect:
-            raise NotFound({
-                'detail': 'The action should be performed at the determination view',
-                'target': redirect.url,
-            })
+            raise NotFound(
+                {
+                    "detail": "The action should be performed at the determination view",
+                    "target": redirect.url,
+                }
+            )
         try:
             obj.perform_transition(action, self.request.user, request=self.request)
         except DjangoPermissionDenied as e:
             raise PermissionDenied(str(e)) from e
         # refresh_from_db() raises errors for particular actions.
         obj = self.get_object()
-        serializer = SubmissionDetailSerializer(obj, context={
-            'request': request,
-        })
-        return Response({
-            'id': serializer.data['id'],
-            'status': serializer.data['status'],
-            'actions': serializer.data['actions'],
-            'phase': serializer.data['phase'],
-        })
+        serializer = SubmissionDetailSerializer(
+            obj,
+            context={
+                "request": request,
+            },
+        )
+        return Response(
+            {
+                "id": serializer.data["id"],
+                "status": serializer.data["status"],
+                "actions": serializer.data["actions"],
+                "phase": serializer.data["phase"],
+            }
+        )
 
 
 class RoundViewSet(
-    mixins.RetrieveModelMixin,
-    mixins.ListModelMixin,
-    viewsets.GenericViewSet
+    mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet
 ):
     queryset = RoundsAndLabs.objects.all()
     serializer_class = RoundLabSerializer
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     permission_classes_by_action = {
-        'open': [HasAPIKey | permissions.IsAuthenticated, HasAPIKey | IsApplyStaffUser, ],
+        "open": [
+            HasAPIKey | permissions.IsAuthenticated,
+            HasAPIKey | IsApplyStaffUser,
+        ],
     }
     pagination_class = StandardResultsSetPagination
 
     def get_serializer_class(self):
-        if self.action == 'list':
+        if self.action == "list":
             return RoundLabSerializer
-        elif self.action == 'open':
+        elif self.action == "open":
             return OpenRoundLabSerializer
         return RoundLabDetailSerializer
 
@@ -232,12 +282,15 @@ class RoundViewSet(
     def get_permissions(self):
         try:
             # return permission_classes depending on `action`
-            return [permission() for permission in self.permission_classes_by_action[self.action]]
+            return [
+                permission()
+                for permission in self.permission_classes_by_action[self.action]
+            ]
         except KeyError:
             # action is not set return default permission_classes
             return [permission() for permission in self.permission_classes]
 
-    @action(methods=['get'], detail=False)
+    @action(methods=["get"], detail=False)
     def open(self, request):
         queryset = RoundsAndLabs.objects.open()
         page = self.paginate_queryset(queryset)
@@ -252,24 +305,29 @@ class SubmissionCommentViewSet(
     SubmissionNestedMixin,
     mixins.ListModelMixin,
     mixins.CreateModelMixin,
-    viewsets.GenericViewSet
+    viewsets.GenericViewSet,
 ):
     """
     List all the comments on a submission.
     """
-    queryset = Activity.comments.all().select_related('user')
+
+    queryset = Activity.comments.all().select_related("user")
     serializer_class = CommentCreateSerializer
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
     filter_backends = (filters.DjangoFilterBackend,)
     filter_class = CommentFilter
     pagination_class = StandardResultsSetPagination
 
     def get_queryset(self):
-        return super().get_queryset().filter(
-            submission=self.get_submission_object()
-        ).visible_to(self.request.user)
+        return (
+            super()
+            .get_queryset()
+            .filter(submission=self.get_submission_object())
+            .visible_to(self.request.user)
+        )
 
     def perform_create(self, serializer):
         """
@@ -279,7 +337,7 @@ class SubmissionCommentViewSet(
             timestamp=timezone.now(),
             type=COMMENT,
             user=self.request.user,
-            source=self.get_submission_object()
+            source=self.get_submission_object(),
         )
         messenger(
             MESSAGES.COMMENT,
@@ -291,27 +349,26 @@ class SubmissionCommentViewSet(
 
 
 class CommentViewSet(
-        mixins.ListModelMixin,
-        viewsets.GenericViewSet,
+    mixins.ListModelMixin,
+    viewsets.GenericViewSet,
 ):
     """
     Edit a comment.
     """
-    queryset = Activity.comments.all().select_related('user')
+
+    queryset = Activity.comments.all().select_related("user")
     serializer_class = CommentEditSerializer
-    permission_classes = (
-        permissions.IsAuthenticated, IsAuthor
-    )
+    permission_classes = (permissions.IsAuthenticated, IsAuthor)
 
     def get_serializer_class(self):
-        if self.action == 'list':
+        if self.action == "list":
             return CommentSerializer
         return CommentEditSerializer
 
     def get_queryset(self):
         return super().get_queryset().visible_to(self.request.user)
 
-    @action(detail=True, methods=['post'])
+    @action(detail=True, methods=["post"])
     def edit(self, request, *args, **kwargs):
         return self.edit_comment(request, *args, **kwargs)
 
@@ -327,7 +384,9 @@ class CommentViewSet(
         serializer = self.get_serializer(comment_to_edit, data=request.data)
         serializer.is_valid(raise_exception=True)
 
-        if (serializer.validated_data['message'] != comment_to_update.message) or (serializer.validated_data['visibility'] != comment_to_update.visibility):
+        if (serializer.validated_data["message"] != comment_to_update.message) or (
+            serializer.validated_data["visibility"] != comment_to_update.visibility
+        ):
             self.perform_create(serializer)
             comment_to_update.current = False
             comment_to_update.save()
@@ -351,8 +410,10 @@ class MetaTermsViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
     """
     List all the Meta Terms
     """
+
     queryset = MetaTerm.get_root_nodes()
     serializer_class = MetaTermsSerializer
     permission_classes = (
-        permissions.IsAuthenticated, IsApplyStaffUser,
+        permissions.IsAuthenticated,
+        IsApplyStaffUser,
     )
diff --git a/hypha/apply/categories/admin.py b/hypha/apply/categories/admin.py
index 11a95bd9cad31c97c0b8fcad4b8ebe9f551f21f4..42f674f5f7acbcd48487b8253c5af85e37f6851f 100644
--- a/hypha/apply/categories/admin.py
+++ b/hypha/apply/categories/admin.py
@@ -7,27 +7,27 @@ from .models import Category, MetaTerm
 
 
 class CategoryAdmin(ModelAdmin):
-    menu_label = 'Category Questions'
-    menu_icon = 'list-ul'
+    menu_label = "Category Questions"
+    menu_icon = "list-ul"
     model = Category
 
 
 class MetaTermAdmin(ModelAdmin):
     model = MetaTerm
 
-    menu_icon = 'tag'
+    menu_icon = "tag"
 
     list_per_page = 50
-    list_display = ('get_as_listing_header', 'get_parent')
-    search_fields = ('name',)
+    list_display = ("get_as_listing_header", "get_parent")
+    search_fields = ("name",)
 
     inspect_view_enabled = True
-    inspect_view_fields = ('name', 'get_parent', 'id')
+    inspect_view_fields = ("name", "get_parent", "id")
 
     button_helper_class = MetaTermButtonHelper
 
     def add_child_view(self, request, instance_pk):
-        kwargs = {'model_admin': self, 'parent_pk': instance_pk}
+        kwargs = {"model_admin": self, "parent_pk": instance_pk}
         view_class = AddChildMetaTermViewClass
         return view_class.as_view(**kwargs)(request)
 
@@ -35,8 +35,8 @@ class MetaTermAdmin(ModelAdmin):
         """Add the new url for add child page to the registered URLs."""
         urls = super().get_admin_urls_for_registration()
         add_child_url = re_path(
-            self.url_helper.get_action_url_pattern('add_child'),
+            self.url_helper.get_action_url_pattern("add_child"),
             self.add_child_view,
-            name=self.url_helper.get_action_url_name('add_child')
+            name=self.url_helper.get_action_url_name("add_child"),
         )
-        return urls + (add_child_url, )
+        return urls + (add_child_url,)
diff --git a/hypha/apply/categories/admin_helpers.py b/hypha/apply/categories/admin_helpers.py
index 7ea66869ada758c770809366fb1eb88f16962f45..addea237ab42f4a7fb5021ee472a01031808632c 100644
--- a/hypha/apply/categories/admin_helpers.py
+++ b/hypha/apply/categories/admin_helpers.py
@@ -19,21 +19,24 @@ class MetaTermButtonHelper(ButtonHelper):
     def add_child_button(self, pk, child_verbose_name, **kwargs):
         """Build a add child button, to easily add a child under meta term."""
         instance = self.model.objects.get(pk=pk)
-        if instance.is_archived or instance.get_parent() and instance.get_parent().is_archived:
+        if (
+            instance.is_archived
+            or instance.get_parent()
+            and instance.get_parent().is_archived
+        ):
             return
 
         classnames = self.prepare_classnames(
-            start=self.edit_button_classnames + ['icon', 'icon-plus'],
-            add=kwargs.get('classnames_add'),
-            exclude=kwargs.get('classnames_exclude')
+            start=self.edit_button_classnames + ["icon", "icon-plus"],
+            add=kwargs.get("classnames_add"),
+            exclude=kwargs.get("classnames_exclude"),
         )
         return {
-            'classname': classnames,
-            'label': 'Add %s %s' % (
-                child_verbose_name, self.verbose_name),
-            'title': 'Add %s %s under this one' % (
-                child_verbose_name, self.verbose_name),
-            'url': self.url_helper.get_action_url('add_child', quote(pk)),
+            "classname": classnames,
+            "label": "Add %s %s" % (child_verbose_name, self.verbose_name),
+            "title": "Add %s %s under this one"
+            % (child_verbose_name, self.verbose_name),
+            "url": self.url_helper.get_action_url("add_child", quote(pk)),
         }
 
     def get_buttons_for_obj(self, obj, exclude=None, *args, **kwargs):
diff --git a/hypha/apply/categories/admin_views.py b/hypha/apply/categories/admin_views.py
index 96c6f96955e12b2be3b6ca853b3afe5d6562ac89..2a4e9d3926e75a6ffe698dda804d902b8ebdc891 100644
--- a/hypha/apply/categories/admin_views.py
+++ b/hypha/apply/categories/admin_views.py
@@ -19,12 +19,12 @@ class AddChildMetaTermViewClass(CreateView):
     def get_page_title(self):
         """Generate a title that explains you are adding a child."""
         title = super().get_page_title()
-        return title + ' %s %s for %s' % (
+        return title + " %s %s for %s" % (
             self.model.node_child_verbose_name,
             self.opts.verbose_name,
-            self.parent_instance
+            self.parent_instance,
         )
 
     def get_initial(self):
         """Set the selected parent field to the parent_pk."""
-        return {'parent': self.parent_pk}
+        return {"parent": self.parent_pk}
diff --git a/hypha/apply/categories/apps.py b/hypha/apply/categories/apps.py
index 1d9503e06db78ac55f444df710ce925893564d84..4b4114a236a88c7f5a634b7efbb301d289230e82 100644
--- a/hypha/apply/categories/apps.py
+++ b/hypha/apply/categories/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class CategoriesConfig(AppConfig):
-    name = 'hypha.apply.categories'
+    name = "hypha.apply.categories"
diff --git a/hypha/apply/categories/blocks.py b/hypha/apply/categories/blocks.py
index 91da656622cd57c24188047429db543b3094b894..e40ea4d94424dac9cbcacc2e6c0e683e8ae38015 100644
--- a/hypha/apply/categories/blocks.py
+++ b/hypha/apply/categories/blocks.py
@@ -20,21 +20,21 @@ def get_categories_as_choices():
 
 class CategoryQuestionBlock(OptionalFormFieldBlock):
     class Meta:
-        template = 'stream_forms/render_list_field.html'
+        template = "stream_forms/render_list_field.html"
 
     category = ModelChooserBlock(required=True, choices=get_categories_as_choices)
-    multi = BooleanBlock(label=_('Multi select'), required=False)
+    multi = BooleanBlock(label=_("Multi select"), required=False)
     # Overwrite field label and help text so we can defer to the category
     # as required
     field_label = CharBlock(
-        label=_('Label'),
+        label=_("Label"),
         required=False,
-        help_text=_('Leave blank to use the default Category label'),
+        help_text=_("Leave blank to use the default Category label"),
     )
     help_text = TextBlock(
-        label=_('Help text'),
+        label=_("Help text"),
         required=False,
-        help_text=_('Leave blank to use the default Category help text'),
+        help_text=_("Leave blank to use the default Category help text"),
     )
 
     @cached_property
@@ -45,10 +45,10 @@ class CategoryQuestionBlock(OptionalFormFieldBlock):
         return self.model_class.objects.get(id=id)
 
     def get_field_class(self, struct_value):
-        return forms.MultipleChoiceField if struct_value['multi'] else forms.ChoiceField
+        return forms.MultipleChoiceField if struct_value["multi"] else forms.ChoiceField
 
     def use_defaults_from_category(self, kwargs, category):
-        category_fields = {'label': 'name', 'help_text': 'help_text'}
+        category_fields = {"label": "name", "help_text": "help_text"}
 
         for field in category_fields.keys():
             if not kwargs.get(field):
@@ -58,15 +58,15 @@ class CategoryQuestionBlock(OptionalFormFieldBlock):
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        category = self.get_instance(id=struct_value['category'])
+        category = self.get_instance(id=struct_value["category"])
         kwargs = self.use_defaults_from_category(kwargs, category)
-        choices = category.options.values_list('id', 'value')
-        kwargs.update({'choices': choices})
+        choices = category.options.values_list("id", "value")
+        kwargs.update({"choices": choices})
         return kwargs
 
     def get_widget(self, struct_value):
-        if struct_value['multi']:
-            category = self.get_instance(id=struct_value['category'])
+        if struct_value["multi"]:
+            category = self.get_instance(id=struct_value["category"])
             category_size = category.options.count()
             # Pick widget according to number of options to maintain good usability.
             if category_size < 32:
@@ -81,17 +81,17 @@ class CategoryQuestionBlock(OptionalFormFieldBlock):
             return data
         if isinstance(data, str):
             data = [data]
-        category = self.get_instance(id=value['category'])
-        data = category.options.filter(id__in=data).values_list('value', flat=True)
+        category = self.get_instance(id=value["category"])
+        data = category.options.filter(id__in=data).values_list("value", flat=True)
         return data
 
     def render(self, value, context):
         # Overwriting field_label and help_text with default for empty values
-        category_fields = {'field_label': 'name', 'help_text': 'help_text'}
+        category_fields = {"field_label": "name", "help_text": "help_text"}
 
         for field in category_fields.keys():
             if not value.get(field):
-                category = value['category']
+                category = value["category"]
                 if isinstance(category, int):
                     category = self.get_instance(id=category)
                 value[field] = getattr(category, category_fields[field])
@@ -101,4 +101,4 @@ class CategoryQuestionBlock(OptionalFormFieldBlock):
         return None
 
     def no_response(self):
-        return '-'
+        return "-"
diff --git a/hypha/apply/categories/categories_seed.py b/hypha/apply/categories/categories_seed.py
index 05ce50a1773087eebf026b1d46a2fcbbf593bc62..ee7fb2994a829b980199ea99874dce0cf44bc25e 100644
--- a/hypha/apply/categories/categories_seed.py
+++ b/hypha/apply/categories/categories_seed.py
@@ -3,1621 +3,429 @@ CATEGORIES = [
     {
         "category": "Addressed problems",
         "name": "Restrictive Internet filtering by technical methods (IP blocking, DNS filtering, TCP RST, DPI, etc.)",
-        "tid": "318"
+        "tid": "318",
     },
     {
         "category": "Addressed problems",
         "name": "Blocking, filtering, or modification of political, social, and/or religious content (including apps)",
-        "tid": "319"
+        "tid": "319",
     },
     {
         "category": "Addressed problems",
         "name": "Technical attacks against government critics, journalists, and/or human rights organizations (Cyberattacks)",
-        "tid": "351"
+        "tid": "351",
     },
     {
         "category": "Addressed problems",
         "name": "Localized or nationwide communications shut down or throttling (Blackouts)",
-        "tid": "320"
+        "tid": "320",
     },
     {
         "category": "Addressed problems",
         "name": "Physical intimidation, arrest, violence (including device seizure or destruction), and death for political or social reasons",
-        "tid": "354"
+        "tid": "354",
     },
     {
         "category": "Addressed problems",
         "name": "Pro-government manipulation of online discussions (propaganda, imitation content, and/or sockpuppets)",
-        "tid": "353"
+        "tid": "353",
     },
     {
         "category": "Addressed problems",
         "name": "Repressive surveillance or monitoring of communication",
-        "tid": "321"
+        "tid": "321",
     },
     {
         "category": "Addressed problems",
         "name": "Policies, laws, or directives that increase surveillance, censorship, and punishment",
-        "tid": "352"
+        "tid": "352",
     },
     {
         "category": "Addressed problems",
         "name": "Government practices that hold intermediaries (social networks or ISPs) liable for user content",
-        "tid": "355"
+        "tid": "355",
     },
     {
         "category": "Addressed problems",
         "name": "Prohibitive cost to access the Internet",
-        "tid": "357"
+        "tid": "357",
     },
+    {"category": "Addressed problems", "name": "Other", "tid": "327"},
+    {"category": "Focus", "name": "Access to the Internet", "tid": "2"},
     {
-        "category": "Addressed problems",
-        "name": "Other",
-        "tid": "327"
-    },
-    {
-        "category": "Focus",
-        "name": "Access to the Internet",
-        "tid": "2"
-    },
-    {
-        "category": "Focus",
-        "name": "Awareness of privacy and security threats",
-        "tid": "363"
-    },
-    {
-        "category": "Focus",
-        "name": "Privacy enhancement",
-        "tid": "3"
-    },
-    {
-        "category": "Focus",
-        "name": "Security from danger or threat online",
-        "tid": "1"
-    },
-    {
-        "category": "Objective(s)",
-        "name": "Deploying technology",
-        "tid": "362"
-    },
-    {
-        "category": "Objective(s)",
-        "name": "Software or hardware development",
-        "tid": "360"
-    },
-    {
-        "category": "Objective(s)",
-        "name": "Testing",
-        "tid": "333"
-    },
-    {
-        "category": "Objective(s)",
-        "name": "Research",
-        "tid": "361"
-    },
-    {
-        "category": "Objective(s)",
-        "name": "Technology development",
-        "tid": "330"
-    },
-    {
-        "category": "Objective(s)",
-        "name": "Training",
-        "tid": "331"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "General public",
-        "tid": "335"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Women",
-        "tid": "342"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Youth",
-        "tid": "343"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Sexual minorities",
-        "tid": "345"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Ethnic minorities",
-        "tid": "344"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Activists",
-        "tid": "336"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Journalists",
-        "tid": "337"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Advocacy groups/NGOs",
-        "tid": "338"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Academia",
-        "tid": "339"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Technologists",
-        "tid": "340"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Entrepreneurs",
-        "tid": "359"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Government",
-        "tid": "341"
-    },
-    {
-        "category": "Beneficiaries",
-        "name": "Other",
-        "tid": "350"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Global",
-        "tid": "271"
-    },
-    {
-        "category": "Region(s)",
-        "name": "North Africa and Middle east",
-        "tid": "358"
-    },
-    {
-        "category": "Region(s)",
-        "name": "East Africa",
-        "tid": "369"
-    },
-    {
-        "category": "Region(s)",
-        "name": "West Africa",
-        "tid": "370"
-    },
-    {
-        "category": "Region(s)",
-        "name": "South Africa",
-        "tid": "272"
-    },
-    {
-        "category": "Region(s)",
-        "name": "North Asia and Russia",
-        "tid": "371"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Central Asia",
-        "tid": "274"
-    },
-    {
-        "category": "Region(s)",
-        "name": "East Asia",
-        "tid": "372"
-    },
-    {
-        "category": "Region(s)",
-        "name": "South Asia",
-        "tid": "373"
-    },
-    {
-        "category": "Region(s)",
-        "name": "South-East Asia",
-        "tid": "365"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Eastern Europe",
-        "tid": "291"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Central America",
-        "tid": "273"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Caribbean",
-        "tid": "374"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Andean",
-        "tid": "375"
-    },
-    {
-        "category": "Region(s)",
-        "name": "Southern cone",
-        "tid": "376"
-    },
-    {
-        "category": "Project status",
-        "name": "Just an Idea (Pre-alpha)",
-        "tid": "329"
-    },
-    {
-        "category": "Project status",
-        "name": "It Exists! (Alpha/Beta)",
-        "tid": "328"
-    },
-    {
-        "category": "Project status",
-        "name": "It's basically done. (Release)",
-        "tid": "366"
-    },
-    {
-        "category": "Project status",
-        "name": "People Use It. (Production)",
-        "tid": "367"
-    },
-    {
-        "tid": "6",
-        "name": "Afghanistan",
-        "category": "Countries"
-    },
-    {
-        "tid": "7",
-        "name": "Aland Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "8",
-        "name": "Albania",
-        "category": "Countries"
-    },
-    {
-        "tid": "9",
-        "name": "Algeria",
-        "category": "Countries"
-    },
-    {
-        "tid": "10",
-        "name": "American Samoa",
-        "category": "Countries"
-    },
-    {
-        "tid": "11",
-        "name": "Andorra",
-        "category": "Countries"
-    },
-    {
-        "tid": "12",
-        "name": "Angola",
-        "category": "Countries"
-    },
-    {
-        "tid": "13",
-        "name": "Anguilla",
-        "category": "Countries"
-    },
-    {
-        "tid": "14",
-        "name": "Antarctica",
-        "category": "Countries"
-    },
-    {
-        "tid": "15",
-        "name": "Antigua and Barbuda",
-        "category": "Countries"
-    },
-    {
-        "tid": "16",
-        "name": "Argentina",
-        "category": "Countries"
-    },
-    {
-        "tid": "17",
-        "name": "Armenia",
-        "category": "Countries"
-    },
-    {
-        "tid": "18",
-        "name": "Aruba",
-        "category": "Countries"
-    },
-    {
-        "tid": "19",
-        "name": "Australia",
-        "category": "Countries"
-    },
-    {
-        "tid": "20",
-        "name": "Austria",
-        "category": "Countries"
-    },
-    {
-        "tid": "21",
-        "name": "Azerbaijan",
-        "category": "Countries"
-    },
-    {
-        "tid": "22",
-        "name": "Bahamas",
-        "category": "Countries"
-    },
-    {
-        "tid": "23",
-        "name": "Bahrain",
-        "category": "Countries"
-    },
-    {
-        "tid": "24",
-        "name": "Bangladesh",
-        "category": "Countries"
-    },
-    {
-        "tid": "25",
-        "name": "Barbados",
-        "category": "Countries"
-    },
-    {
-        "tid": "26",
-        "name": "Belarus",
-        "category": "Countries"
-    },
-    {
-        "tid": "27",
-        "name": "Belgium",
-        "category": "Countries"
-    },
-    {
-        "tid": "28",
-        "name": "Belize",
-        "category": "Countries"
-    },
-    {
-        "tid": "29",
-        "name": "Benin",
-        "category": "Countries"
-    },
-    {
-        "tid": "30",
-        "name": "Bermuda",
-        "category": "Countries"
-    },
-    {
-        "tid": "31",
-        "name": "Bhutan",
-        "category": "Countries"
-    },
-    {
-        "tid": "32",
-        "name": "Bolivia",
-        "category": "Countries"
-    },
-    {
-        "tid": "33",
-        "name": "Bosnia and Herzegovina",
-        "category": "Countries"
-    },
-    {
-        "tid": "34",
-        "name": "Botswana",
-        "category": "Countries"
-    },
-    {
-        "tid": "35",
-        "name": "Bouvet Island",
-        "category": "Countries"
-    },
-    {
-        "tid": "36",
-        "name": "Brazil",
-        "category": "Countries"
-    },
-    {
-        "tid": "37",
-        "name": "British Indian Ocean Territory",
-        "category": "Countries"
-    },
-    {
-        "tid": "38",
-        "name": "British Virgin Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "39",
-        "name": "Brunei",
-        "category": "Countries"
-    },
-    {
-        "tid": "40",
-        "name": "Bulgaria",
-        "category": "Countries"
-    },
-    {
-        "tid": "41",
-        "name": "Burkina Faso",
-        "category": "Countries"
-    },
-    {
-        "tid": "42",
-        "name": "Burundi",
-        "category": "Countries"
-    },
-    {
-        "tid": "43",
-        "name": "Cambodia",
-        "category": "Countries"
-    },
-    {
-        "tid": "44",
-        "name": "Cameroon",
-        "category": "Countries"
-    },
-    {
-        "tid": "45",
-        "name": "Canada",
-        "category": "Countries"
-    },
-    {
-        "tid": "46",
-        "name": "Cape Verde",
-        "category": "Countries"
-    },
-    {
-        "tid": "47",
-        "name": "Cayman Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "48",
-        "name": "Central African Republic",
-        "category": "Countries"
-    },
-    {
-        "tid": "49",
-        "name": "Chad",
-        "category": "Countries"
-    },
-    {
-        "tid": "50",
-        "name": "Chile",
-        "category": "Countries"
-    },
-    {
-        "tid": "51",
-        "name": "China",
-        "category": "Countries"
-    },
-    {
-        "tid": "52",
-        "name": "Christmas Island",
-        "category": "Countries"
-    },
-    {
-        "tid": "53",
-        "name": "Cocos (Keeling) Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "54",
-        "name": "Colombia",
-        "category": "Countries"
-    },
-    {
-        "tid": "55",
-        "name": "Comoros",
-        "category": "Countries"
-    },
-    {
-        "tid": "56",
-        "name": "Congo (Brazzaville)",
-        "category": "Countries"
-    },
-    {
-        "tid": "57",
-        "name": "Congo (Kinshasa)",
-        "category": "Countries"
-    },
-    {
-        "tid": "58",
-        "name": "Cook Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "59",
-        "name": "Costa Rica",
-        "category": "Countries"
-    },
-    {
-        "tid": "60",
-        "name": "Croatia",
-        "category": "Countries"
-    },
-    {
-        "tid": "61",
-        "name": "Cuba",
-        "category": "Countries"
-    },
-    {
-        "tid": "62",
-        "name": "Curaçao",
-        "category": "Countries"
-    },
-    {
-        "tid": "63",
-        "name": "Cyprus",
-        "category": "Countries"
-    },
-    {
-        "tid": "64",
-        "name": "Czech Republic",
-        "category": "Countries"
-    },
-    {
-        "tid": "65",
-        "name": "Denmark",
-        "category": "Countries"
-    },
-    {
-        "tid": "66",
-        "name": "Djibouti",
-        "category": "Countries"
-    },
-    {
-        "tid": "67",
-        "name": "Dominica",
-        "category": "Countries"
-    },
-    {
-        "tid": "68",
-        "name": "Dominican Republic",
-        "category": "Countries"
-    },
-    {
-        "tid": "69",
-        "name": "Ecuador",
-        "category": "Countries"
-    },
-    {
-        "tid": "70",
-        "name": "Egypt",
-        "category": "Countries"
-    },
-    {
-        "tid": "71",
-        "name": "El Salvador",
-        "category": "Countries"
-    },
-    {
-        "tid": "72",
-        "name": "Equatorial Guinea",
-        "category": "Countries"
-    },
-    {
-        "tid": "73",
-        "name": "Eritrea",
-        "category": "Countries"
-    },
-    {
-        "tid": "74",
-        "name": "Estonia",
-        "category": "Countries"
-    },
-    {
-        "tid": "75",
-        "name": "Ethiopia",
-        "category": "Countries"
-    },
-    {
-        "tid": "76",
-        "name": "Falkland Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "77",
-        "name": "Faroe Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "78",
-        "name": "Fiji",
-        "category": "Countries"
-    },
-    {
-        "tid": "79",
-        "name": "Finland",
-        "category": "Countries"
-    },
-    {
-        "tid": "80",
-        "name": "France",
-        "category": "Countries"
-    },
-    {
-        "tid": "81",
-        "name": "French Guiana",
-        "category": "Countries"
-    },
-    {
-        "tid": "82",
-        "name": "French Polynesia",
-        "category": "Countries"
-    },
-    {
-        "tid": "83",
-        "name": "French Southern Territories",
-        "category": "Countries"
-    },
-    {
-        "tid": "84",
-        "name": "Gabon",
-        "category": "Countries"
-    },
-    {
-        "tid": "85",
-        "name": "Gambia",
-        "category": "Countries"
-    },
-    {
-        "tid": "86",
-        "name": "Georgia",
-        "category": "Countries"
-    },
-    {
-        "tid": "87",
-        "name": "Germany",
-        "category": "Countries"
-    },
-    {
-        "tid": "88",
-        "name": "Ghana",
-        "category": "Countries"
-    },
-    {
-        "tid": "89",
-        "name": "Gibraltar",
-        "category": "Countries"
-    },
-    {
-        "tid": "90",
-        "name": "Greece",
-        "category": "Countries"
-    },
-    {
-        "tid": "91",
-        "name": "Greenland",
-        "category": "Countries"
-    },
-    {
-        "tid": "92",
-        "name": "Grenada",
-        "category": "Countries"
-    },
-    {
-        "tid": "93",
-        "name": "Guadeloupe",
-        "category": "Countries"
-    },
-    {
-        "tid": "94",
-        "name": "Guam",
-        "category": "Countries"
-    },
-    {
-        "tid": "95",
-        "name": "Guatemala",
-        "category": "Countries"
-    },
-    {
-        "tid": "96",
-        "name": "Guernsey",
-        "category": "Countries"
-    },
-    {
-        "tid": "97",
-        "name": "Guinea",
-        "category": "Countries"
-    },
-    {
-        "tid": "98",
-        "name": "Guinea-Bissau",
-        "category": "Countries"
-    },
-    {
-        "tid": "99",
-        "name": "Guyana",
-        "category": "Countries"
-    },
-    {
-        "tid": "100",
-        "name": "Haiti",
-        "category": "Countries"
-    },
-    {
-        "tid": "101",
-        "name": "Heard Island and McDonald Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "102",
-        "name": "Honduras",
-        "category": "Countries"
-    },
-    {
-        "tid": "103",
-        "name": "Hungary",
-        "category": "Countries"
-    },
-    {
-        "tid": "104",
-        "name": "Iceland",
-        "category": "Countries"
-    },
-    {
-        "tid": "105",
-        "name": "India",
-        "category": "Countries"
-    },
-    {
-        "tid": "106",
-        "name": "Indonesia",
-        "category": "Countries"
-    },
-    {
-        "tid": "107",
-        "name": "Iran",
-        "category": "Countries"
-    },
-    {
-        "tid": "108",
-        "name": "Iraq",
-        "category": "Countries"
-    },
-    {
-        "tid": "109",
-        "name": "Ireland",
-        "category": "Countries"
-    },
-    {
-        "tid": "110",
-        "name": "Isle of Man",
-        "category": "Countries"
-    },
-    {
-        "tid": "111",
-        "name": "Israel",
-        "category": "Countries"
-    },
-    {
-        "tid": "112",
-        "name": "Italy",
-        "category": "Countries"
-    },
-    {
-        "tid": "113",
-        "name": "Ivory Coast",
-        "category": "Countries"
-    },
-    {
-        "tid": "114",
-        "name": "Jamaica",
-        "category": "Countries"
-    },
-    {
-        "tid": "115",
-        "name": "Japan",
-        "category": "Countries"
-    },
-    {
-        "tid": "116",
-        "name": "Jersey",
-        "category": "Countries"
-    },
-    {
-        "tid": "117",
-        "name": "Jordan",
-        "category": "Countries"
-    },
-    {
-        "tid": "118",
-        "name": "Kazakhstan",
-        "category": "Countries"
-    },
-    {
-        "tid": "119",
-        "name": "Kenya",
-        "category": "Countries"
-    },
-    {
-        "tid": "120",
-        "name": "Kiribati",
-        "category": "Countries"
-    },
-    {
-        "tid": "488",
-        "name": "Kosovo",
-        "category": "Countries"
-    },
-    {
-        "tid": "121",
-        "name": "Kuwait",
-        "category": "Countries"
-    },
-    {
-        "tid": "122",
-        "name": "Kyrgyzstan",
-        "category": "Countries"
-    },
-    {
-        "tid": "123",
-        "name": "Laos",
-        "category": "Countries"
-    },
-    {
-        "tid": "124",
-        "name": "Latvia",
-        "category": "Countries"
-    },
-    {
-        "tid": "125",
-        "name": "Lebanon",
-        "category": "Countries"
-    },
-    {
-        "tid": "126",
-        "name": "Lesotho",
-        "category": "Countries"
-    },
-    {
-        "tid": "127",
-        "name": "Liberia",
-        "category": "Countries"
-    },
-    {
-        "tid": "128",
-        "name": "Libya",
-        "category": "Countries"
-    },
-    {
-        "tid": "129",
-        "name": "Liechtenstein",
-        "category": "Countries"
-    },
-    {
-        "tid": "130",
-        "name": "Lithuania",
-        "category": "Countries"
-    },
-    {
-        "tid": "131",
-        "name": "Luxembourg",
-        "category": "Countries"
-    },
-    {
-        "tid": "132",
-        "name": "Macedonia",
-        "category": "Countries"
-    },
-    {
-        "tid": "133",
-        "name": "Madagascar",
-        "category": "Countries"
-    },
-    {
-        "tid": "134",
-        "name": "Malawi",
-        "category": "Countries"
-    },
-    {
-        "tid": "135",
-        "name": "Malaysia",
-        "category": "Countries"
-    },
-    {
-        "tid": "136",
-        "name": "Maldives",
-        "category": "Countries"
-    },
-    {
-        "tid": "137",
-        "name": "Mali",
-        "category": "Countries"
-    },
-    {
-        "tid": "138",
-        "name": "Malta",
-        "category": "Countries"
-    },
-    {
-        "tid": "139",
-        "name": "Marshall Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "140",
-        "name": "Martinique",
-        "category": "Countries"
-    },
-    {
-        "tid": "141",
-        "name": "Mauritania",
-        "category": "Countries"
-    },
-    {
-        "tid": "142",
-        "name": "Mauritius",
-        "category": "Countries"
-    },
-    {
-        "tid": "143",
-        "name": "Mayotte",
-        "category": "Countries"
-    },
-    {
-        "tid": "144",
-        "name": "Mexico",
-        "category": "Countries"
-    },
-    {
-        "tid": "145",
-        "name": "Micronesia",
-        "category": "Countries"
-    },
-    {
-        "tid": "146",
-        "name": "Moldova",
-        "category": "Countries"
-    },
-    {
-        "tid": "147",
-        "name": "Monaco",
-        "category": "Countries"
-    },
-    {
-        "tid": "148",
-        "name": "Mongolia",
-        "category": "Countries"
-    },
-    {
-        "tid": "149",
-        "name": "Montenegro",
-        "category": "Countries"
-    },
-    {
-        "tid": "150",
-        "name": "Montserrat",
-        "category": "Countries"
-    },
-    {
-        "tid": "151",
-        "name": "Morocco",
-        "category": "Countries"
-    },
-    {
-        "tid": "152",
-        "name": "Mozambique",
-        "category": "Countries"
-    },
-    {
-        "tid": "153",
-        "name": "Myanmar",
-        "category": "Countries"
-    },
-    {
-        "tid": "154",
-        "name": "Namibia",
-        "category": "Countries"
-    },
-    {
-        "tid": "155",
-        "name": "Nauru",
-        "category": "Countries"
-    },
-    {
-        "tid": "156",
-        "name": "Nepal",
-        "category": "Countries"
-    },
-    {
-        "tid": "157",
-        "name": "Netherlands",
-        "category": "Countries"
-    },
-    {
-        "tid": "158",
-        "name": "Netherlands Antilles",
-        "category": "Countries"
-    },
-    {
-        "tid": "159",
-        "name": "New Caledonia",
-        "category": "Countries"
-    },
-    {
-        "tid": "160",
-        "name": "New Zealand",
-        "category": "Countries"
-    },
-    {
-        "tid": "161",
-        "name": "Nicaragua",
-        "category": "Countries"
-    },
-    {
-        "tid": "162",
-        "name": "Niger",
-        "category": "Countries"
-    },
-    {
-        "tid": "163",
-        "name": "Nigeria",
-        "category": "Countries"
-    },
-    {
-        "tid": "164",
-        "name": "Niue",
-        "category": "Countries"
-    },
-    {
-        "tid": "165",
-        "name": "Norfolk Island",
-        "category": "Countries"
-    },
-    {
-        "tid": "166",
-        "name": "North Korea",
-        "category": "Countries"
-    },
-    {
-        "tid": "167",
-        "name": "Northern Mariana Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "168",
-        "name": "Norway",
-        "category": "Countries"
-    },
-    {
-        "tid": "169",
-        "name": "Oman",
-        "category": "Countries"
-    },
-    {
-        "tid": "170",
-        "name": "Pakistan",
-        "category": "Countries"
-    },
-    {
-        "tid": "171",
-        "name": "Palau",
-        "category": "Countries"
-    },
-    {
-        "tid": "172",
-        "name": "Palestinian Territory",
-        "category": "Countries"
-    },
-    {
-        "tid": "173",
-        "name": "Panama",
-        "category": "Countries"
-    },
-    {
-        "tid": "174",
-        "name": "Papua New Guinea",
-        "category": "Countries"
-    },
-    {
-        "tid": "175",
-        "name": "Paraguay",
-        "category": "Countries"
-    },
-    {
-        "tid": "176",
-        "name": "Peru",
-        "category": "Countries"
-    },
-    {
-        "tid": "177",
-        "name": "Philippines",
-        "category": "Countries"
-    },
-    {
-        "tid": "178",
-        "name": "Pitcairn",
-        "category": "Countries"
-    },
-    {
-        "tid": "179",
-        "name": "Poland",
-        "category": "Countries"
-    },
-    {
-        "tid": "180",
-        "name": "Portugal",
-        "category": "Countries"
-    },
-    {
-        "tid": "181",
-        "name": "Puerto Rico",
-        "category": "Countries"
-    },
-    {
-        "tid": "182",
-        "name": "Qatar",
-        "category": "Countries"
-    },
-    {
-        "tid": "183",
-        "name": "Reunion",
-        "category": "Countries"
-    },
-    {
-        "tid": "184",
-        "name": "Romania",
-        "category": "Countries"
-    },
-    {
-        "tid": "185",
-        "name": "Russia",
-        "category": "Countries"
-    },
-    {
-        "tid": "186",
-        "name": "Rwanda",
-        "category": "Countries"
-    },
-    {
-        "tid": "187",
-        "name": "Saint Barthélemy",
-        "category": "Countries"
-    },
-    {
-        "tid": "188",
-        "name": "Saint Helena",
-        "category": "Countries"
-    },
-    {
-        "tid": "189",
-        "name": "Saint Kitts and Nevis",
-        "category": "Countries"
-    },
-    {
-        "tid": "190",
-        "name": "Saint Lucia",
-        "category": "Countries"
-    },
-    {
-        "tid": "191",
-        "name": "Saint Martin (French part)",
-        "category": "Countries"
-    },
-    {
-        "tid": "192",
-        "name": "Saint Pierre and Miquelon",
-        "category": "Countries"
-    },
-    {
-        "tid": "193",
-        "name": "Saint Vincent and the Grenadines",
-        "category": "Countries"
-    },
-    {
-        "tid": "194",
-        "name": "Samoa",
-        "category": "Countries"
-    },
-    {
-        "tid": "195",
-        "name": "San Marino",
-        "category": "Countries"
-    },
-    {
-        "tid": "196",
-        "name": "Sao Tome and Principe",
-        "category": "Countries"
-    },
-    {
-        "tid": "197",
-        "name": "Saudi Arabia",
-        "category": "Countries"
-    },
-    {
-        "tid": "198",
-        "name": "Senegal",
-        "category": "Countries"
-    },
-    {
-        "tid": "199",
-        "name": "Serbia",
-        "category": "Countries"
-    },
-    {
-        "tid": "200",
-        "name": "Seychelles",
-        "category": "Countries"
-    },
-    {
-        "tid": "201",
-        "name": "Sierra Leone",
-        "category": "Countries"
-    },
-    {
-        "tid": "202",
-        "name": "Singapore",
-        "category": "Countries"
-    },
-    {
-        "tid": "203",
-        "name": "Slovakia",
-        "category": "Countries"
-    },
-    {
-        "tid": "204",
-        "name": "Slovenia",
-        "category": "Countries"
+        "category": "Focus",
+        "name": "Awareness of privacy and security threats",
+        "tid": "363",
     },
+    {"category": "Focus", "name": "Privacy enhancement", "tid": "3"},
+    {"category": "Focus", "name": "Security from danger or threat online", "tid": "1"},
+    {"category": "Objective(s)", "name": "Deploying technology", "tid": "362"},
     {
-        "tid": "205",
-        "name": "Solomon Islands",
-        "category": "Countries"
-    },
+        "category": "Objective(s)",
+        "name": "Software or hardware development",
+        "tid": "360",
+    },
+    {"category": "Objective(s)", "name": "Testing", "tid": "333"},
+    {"category": "Objective(s)", "name": "Research", "tid": "361"},
+    {"category": "Objective(s)", "name": "Technology development", "tid": "330"},
+    {"category": "Objective(s)", "name": "Training", "tid": "331"},
+    {"category": "Beneficiaries", "name": "General public", "tid": "335"},
+    {"category": "Beneficiaries", "name": "Women", "tid": "342"},
+    {"category": "Beneficiaries", "name": "Youth", "tid": "343"},
+    {"category": "Beneficiaries", "name": "Sexual minorities", "tid": "345"},
+    {"category": "Beneficiaries", "name": "Ethnic minorities", "tid": "344"},
+    {"category": "Beneficiaries", "name": "Activists", "tid": "336"},
+    {"category": "Beneficiaries", "name": "Journalists", "tid": "337"},
+    {"category": "Beneficiaries", "name": "Advocacy groups/NGOs", "tid": "338"},
+    {"category": "Beneficiaries", "name": "Academia", "tid": "339"},
+    {"category": "Beneficiaries", "name": "Technologists", "tid": "340"},
+    {"category": "Beneficiaries", "name": "Entrepreneurs", "tid": "359"},
+    {"category": "Beneficiaries", "name": "Government", "tid": "341"},
+    {"category": "Beneficiaries", "name": "Other", "tid": "350"},
+    {"category": "Region(s)", "name": "Global", "tid": "271"},
+    {"category": "Region(s)", "name": "North Africa and Middle east", "tid": "358"},
+    {"category": "Region(s)", "name": "East Africa", "tid": "369"},
+    {"category": "Region(s)", "name": "West Africa", "tid": "370"},
+    {"category": "Region(s)", "name": "South Africa", "tid": "272"},
+    {"category": "Region(s)", "name": "North Asia and Russia", "tid": "371"},
+    {"category": "Region(s)", "name": "Central Asia", "tid": "274"},
+    {"category": "Region(s)", "name": "East Asia", "tid": "372"},
+    {"category": "Region(s)", "name": "South Asia", "tid": "373"},
+    {"category": "Region(s)", "name": "South-East Asia", "tid": "365"},
+    {"category": "Region(s)", "name": "Eastern Europe", "tid": "291"},
+    {"category": "Region(s)", "name": "Central America", "tid": "273"},
+    {"category": "Region(s)", "name": "Caribbean", "tid": "374"},
+    {"category": "Region(s)", "name": "Andean", "tid": "375"},
+    {"category": "Region(s)", "name": "Southern cone", "tid": "376"},
+    {"category": "Project status", "name": "Just an Idea (Pre-alpha)", "tid": "329"},
+    {"category": "Project status", "name": "It Exists! (Alpha/Beta)", "tid": "328"},
     {
-        "tid": "206",
-        "name": "Somalia",
-        "category": "Countries"
-    },
+        "category": "Project status",
+        "name": "It's basically done. (Release)",
+        "tid": "366",
+    },
+    {"category": "Project status", "name": "People Use It. (Production)", "tid": "367"},
+    {"tid": "6", "name": "Afghanistan", "category": "Countries"},
+    {"tid": "7", "name": "Aland Islands", "category": "Countries"},
+    {"tid": "8", "name": "Albania", "category": "Countries"},
+    {"tid": "9", "name": "Algeria", "category": "Countries"},
+    {"tid": "10", "name": "American Samoa", "category": "Countries"},
+    {"tid": "11", "name": "Andorra", "category": "Countries"},
+    {"tid": "12", "name": "Angola", "category": "Countries"},
+    {"tid": "13", "name": "Anguilla", "category": "Countries"},
+    {"tid": "14", "name": "Antarctica", "category": "Countries"},
+    {"tid": "15", "name": "Antigua and Barbuda", "category": "Countries"},
+    {"tid": "16", "name": "Argentina", "category": "Countries"},
+    {"tid": "17", "name": "Armenia", "category": "Countries"},
+    {"tid": "18", "name": "Aruba", "category": "Countries"},
+    {"tid": "19", "name": "Australia", "category": "Countries"},
+    {"tid": "20", "name": "Austria", "category": "Countries"},
+    {"tid": "21", "name": "Azerbaijan", "category": "Countries"},
+    {"tid": "22", "name": "Bahamas", "category": "Countries"},
+    {"tid": "23", "name": "Bahrain", "category": "Countries"},
+    {"tid": "24", "name": "Bangladesh", "category": "Countries"},
+    {"tid": "25", "name": "Barbados", "category": "Countries"},
+    {"tid": "26", "name": "Belarus", "category": "Countries"},
+    {"tid": "27", "name": "Belgium", "category": "Countries"},
+    {"tid": "28", "name": "Belize", "category": "Countries"},
+    {"tid": "29", "name": "Benin", "category": "Countries"},
+    {"tid": "30", "name": "Bermuda", "category": "Countries"},
+    {"tid": "31", "name": "Bhutan", "category": "Countries"},
+    {"tid": "32", "name": "Bolivia", "category": "Countries"},
+    {"tid": "33", "name": "Bosnia and Herzegovina", "category": "Countries"},
+    {"tid": "34", "name": "Botswana", "category": "Countries"},
+    {"tid": "35", "name": "Bouvet Island", "category": "Countries"},
+    {"tid": "36", "name": "Brazil", "category": "Countries"},
+    {"tid": "37", "name": "British Indian Ocean Territory", "category": "Countries"},
+    {"tid": "38", "name": "British Virgin Islands", "category": "Countries"},
+    {"tid": "39", "name": "Brunei", "category": "Countries"},
+    {"tid": "40", "name": "Bulgaria", "category": "Countries"},
+    {"tid": "41", "name": "Burkina Faso", "category": "Countries"},
+    {"tid": "42", "name": "Burundi", "category": "Countries"},
+    {"tid": "43", "name": "Cambodia", "category": "Countries"},
+    {"tid": "44", "name": "Cameroon", "category": "Countries"},
+    {"tid": "45", "name": "Canada", "category": "Countries"},
+    {"tid": "46", "name": "Cape Verde", "category": "Countries"},
+    {"tid": "47", "name": "Cayman Islands", "category": "Countries"},
+    {"tid": "48", "name": "Central African Republic", "category": "Countries"},
+    {"tid": "49", "name": "Chad", "category": "Countries"},
+    {"tid": "50", "name": "Chile", "category": "Countries"},
+    {"tid": "51", "name": "China", "category": "Countries"},
+    {"tid": "52", "name": "Christmas Island", "category": "Countries"},
+    {"tid": "53", "name": "Cocos (Keeling) Islands", "category": "Countries"},
+    {"tid": "54", "name": "Colombia", "category": "Countries"},
+    {"tid": "55", "name": "Comoros", "category": "Countries"},
+    {"tid": "56", "name": "Congo (Brazzaville)", "category": "Countries"},
+    {"tid": "57", "name": "Congo (Kinshasa)", "category": "Countries"},
+    {"tid": "58", "name": "Cook Islands", "category": "Countries"},
+    {"tid": "59", "name": "Costa Rica", "category": "Countries"},
+    {"tid": "60", "name": "Croatia", "category": "Countries"},
+    {"tid": "61", "name": "Cuba", "category": "Countries"},
+    {"tid": "62", "name": "Curaçao", "category": "Countries"},
+    {"tid": "63", "name": "Cyprus", "category": "Countries"},
+    {"tid": "64", "name": "Czech Republic", "category": "Countries"},
+    {"tid": "65", "name": "Denmark", "category": "Countries"},
+    {"tid": "66", "name": "Djibouti", "category": "Countries"},
+    {"tid": "67", "name": "Dominica", "category": "Countries"},
+    {"tid": "68", "name": "Dominican Republic", "category": "Countries"},
+    {"tid": "69", "name": "Ecuador", "category": "Countries"},
+    {"tid": "70", "name": "Egypt", "category": "Countries"},
+    {"tid": "71", "name": "El Salvador", "category": "Countries"},
+    {"tid": "72", "name": "Equatorial Guinea", "category": "Countries"},
+    {"tid": "73", "name": "Eritrea", "category": "Countries"},
+    {"tid": "74", "name": "Estonia", "category": "Countries"},
+    {"tid": "75", "name": "Ethiopia", "category": "Countries"},
+    {"tid": "76", "name": "Falkland Islands", "category": "Countries"},
+    {"tid": "77", "name": "Faroe Islands", "category": "Countries"},
+    {"tid": "78", "name": "Fiji", "category": "Countries"},
+    {"tid": "79", "name": "Finland", "category": "Countries"},
+    {"tid": "80", "name": "France", "category": "Countries"},
+    {"tid": "81", "name": "French Guiana", "category": "Countries"},
+    {"tid": "82", "name": "French Polynesia", "category": "Countries"},
+    {"tid": "83", "name": "French Southern Territories", "category": "Countries"},
+    {"tid": "84", "name": "Gabon", "category": "Countries"},
+    {"tid": "85", "name": "Gambia", "category": "Countries"},
+    {"tid": "86", "name": "Georgia", "category": "Countries"},
+    {"tid": "87", "name": "Germany", "category": "Countries"},
+    {"tid": "88", "name": "Ghana", "category": "Countries"},
+    {"tid": "89", "name": "Gibraltar", "category": "Countries"},
+    {"tid": "90", "name": "Greece", "category": "Countries"},
+    {"tid": "91", "name": "Greenland", "category": "Countries"},
+    {"tid": "92", "name": "Grenada", "category": "Countries"},
+    {"tid": "93", "name": "Guadeloupe", "category": "Countries"},
+    {"tid": "94", "name": "Guam", "category": "Countries"},
+    {"tid": "95", "name": "Guatemala", "category": "Countries"},
+    {"tid": "96", "name": "Guernsey", "category": "Countries"},
+    {"tid": "97", "name": "Guinea", "category": "Countries"},
+    {"tid": "98", "name": "Guinea-Bissau", "category": "Countries"},
+    {"tid": "99", "name": "Guyana", "category": "Countries"},
+    {"tid": "100", "name": "Haiti", "category": "Countries"},
     {
-        "tid": "207",
-        "name": "South Africa",
-        "category": "Countries"
-    },
+        "tid": "101",
+        "name": "Heard Island and McDonald Islands",
+        "category": "Countries",
+    },
+    {"tid": "102", "name": "Honduras", "category": "Countries"},
+    {"tid": "103", "name": "Hungary", "category": "Countries"},
+    {"tid": "104", "name": "Iceland", "category": "Countries"},
+    {"tid": "105", "name": "India", "category": "Countries"},
+    {"tid": "106", "name": "Indonesia", "category": "Countries"},
+    {"tid": "107", "name": "Iran", "category": "Countries"},
+    {"tid": "108", "name": "Iraq", "category": "Countries"},
+    {"tid": "109", "name": "Ireland", "category": "Countries"},
+    {"tid": "110", "name": "Isle of Man", "category": "Countries"},
+    {"tid": "111", "name": "Israel", "category": "Countries"},
+    {"tid": "112", "name": "Italy", "category": "Countries"},
+    {"tid": "113", "name": "Ivory Coast", "category": "Countries"},
+    {"tid": "114", "name": "Jamaica", "category": "Countries"},
+    {"tid": "115", "name": "Japan", "category": "Countries"},
+    {"tid": "116", "name": "Jersey", "category": "Countries"},
+    {"tid": "117", "name": "Jordan", "category": "Countries"},
+    {"tid": "118", "name": "Kazakhstan", "category": "Countries"},
+    {"tid": "119", "name": "Kenya", "category": "Countries"},
+    {"tid": "120", "name": "Kiribati", "category": "Countries"},
+    {"tid": "488", "name": "Kosovo", "category": "Countries"},
+    {"tid": "121", "name": "Kuwait", "category": "Countries"},
+    {"tid": "122", "name": "Kyrgyzstan", "category": "Countries"},
+    {"tid": "123", "name": "Laos", "category": "Countries"},
+    {"tid": "124", "name": "Latvia", "category": "Countries"},
+    {"tid": "125", "name": "Lebanon", "category": "Countries"},
+    {"tid": "126", "name": "Lesotho", "category": "Countries"},
+    {"tid": "127", "name": "Liberia", "category": "Countries"},
+    {"tid": "128", "name": "Libya", "category": "Countries"},
+    {"tid": "129", "name": "Liechtenstein", "category": "Countries"},
+    {"tid": "130", "name": "Lithuania", "category": "Countries"},
+    {"tid": "131", "name": "Luxembourg", "category": "Countries"},
+    {"tid": "132", "name": "Macedonia", "category": "Countries"},
+    {"tid": "133", "name": "Madagascar", "category": "Countries"},
+    {"tid": "134", "name": "Malawi", "category": "Countries"},
+    {"tid": "135", "name": "Malaysia", "category": "Countries"},
+    {"tid": "136", "name": "Maldives", "category": "Countries"},
+    {"tid": "137", "name": "Mali", "category": "Countries"},
+    {"tid": "138", "name": "Malta", "category": "Countries"},
+    {"tid": "139", "name": "Marshall Islands", "category": "Countries"},
+    {"tid": "140", "name": "Martinique", "category": "Countries"},
+    {"tid": "141", "name": "Mauritania", "category": "Countries"},
+    {"tid": "142", "name": "Mauritius", "category": "Countries"},
+    {"tid": "143", "name": "Mayotte", "category": "Countries"},
+    {"tid": "144", "name": "Mexico", "category": "Countries"},
+    {"tid": "145", "name": "Micronesia", "category": "Countries"},
+    {"tid": "146", "name": "Moldova", "category": "Countries"},
+    {"tid": "147", "name": "Monaco", "category": "Countries"},
+    {"tid": "148", "name": "Mongolia", "category": "Countries"},
+    {"tid": "149", "name": "Montenegro", "category": "Countries"},
+    {"tid": "150", "name": "Montserrat", "category": "Countries"},
+    {"tid": "151", "name": "Morocco", "category": "Countries"},
+    {"tid": "152", "name": "Mozambique", "category": "Countries"},
+    {"tid": "153", "name": "Myanmar", "category": "Countries"},
+    {"tid": "154", "name": "Namibia", "category": "Countries"},
+    {"tid": "155", "name": "Nauru", "category": "Countries"},
+    {"tid": "156", "name": "Nepal", "category": "Countries"},
+    {"tid": "157", "name": "Netherlands", "category": "Countries"},
+    {"tid": "158", "name": "Netherlands Antilles", "category": "Countries"},
+    {"tid": "159", "name": "New Caledonia", "category": "Countries"},
+    {"tid": "160", "name": "New Zealand", "category": "Countries"},
+    {"tid": "161", "name": "Nicaragua", "category": "Countries"},
+    {"tid": "162", "name": "Niger", "category": "Countries"},
+    {"tid": "163", "name": "Nigeria", "category": "Countries"},
+    {"tid": "164", "name": "Niue", "category": "Countries"},
+    {"tid": "165", "name": "Norfolk Island", "category": "Countries"},
+    {"tid": "166", "name": "North Korea", "category": "Countries"},
+    {"tid": "167", "name": "Northern Mariana Islands", "category": "Countries"},
+    {"tid": "168", "name": "Norway", "category": "Countries"},
+    {"tid": "169", "name": "Oman", "category": "Countries"},
+    {"tid": "170", "name": "Pakistan", "category": "Countries"},
+    {"tid": "171", "name": "Palau", "category": "Countries"},
+    {"tid": "172", "name": "Palestinian Territory", "category": "Countries"},
+    {"tid": "173", "name": "Panama", "category": "Countries"},
+    {"tid": "174", "name": "Papua New Guinea", "category": "Countries"},
+    {"tid": "175", "name": "Paraguay", "category": "Countries"},
+    {"tid": "176", "name": "Peru", "category": "Countries"},
+    {"tid": "177", "name": "Philippines", "category": "Countries"},
+    {"tid": "178", "name": "Pitcairn", "category": "Countries"},
+    {"tid": "179", "name": "Poland", "category": "Countries"},
+    {"tid": "180", "name": "Portugal", "category": "Countries"},
+    {"tid": "181", "name": "Puerto Rico", "category": "Countries"},
+    {"tid": "182", "name": "Qatar", "category": "Countries"},
+    {"tid": "183", "name": "Reunion", "category": "Countries"},
+    {"tid": "184", "name": "Romania", "category": "Countries"},
+    {"tid": "185", "name": "Russia", "category": "Countries"},
+    {"tid": "186", "name": "Rwanda", "category": "Countries"},
+    {"tid": "187", "name": "Saint Barthélemy", "category": "Countries"},
+    {"tid": "188", "name": "Saint Helena", "category": "Countries"},
+    {"tid": "189", "name": "Saint Kitts and Nevis", "category": "Countries"},
+    {"tid": "190", "name": "Saint Lucia", "category": "Countries"},
+    {"tid": "191", "name": "Saint Martin (French part)", "category": "Countries"},
+    {"tid": "192", "name": "Saint Pierre and Miquelon", "category": "Countries"},
+    {"tid": "193", "name": "Saint Vincent and the Grenadines", "category": "Countries"},
+    {"tid": "194", "name": "Samoa", "category": "Countries"},
+    {"tid": "195", "name": "San Marino", "category": "Countries"},
+    {"tid": "196", "name": "Sao Tome and Principe", "category": "Countries"},
+    {"tid": "197", "name": "Saudi Arabia", "category": "Countries"},
+    {"tid": "198", "name": "Senegal", "category": "Countries"},
+    {"tid": "199", "name": "Serbia", "category": "Countries"},
+    {"tid": "200", "name": "Seychelles", "category": "Countries"},
+    {"tid": "201", "name": "Sierra Leone", "category": "Countries"},
+    {"tid": "202", "name": "Singapore", "category": "Countries"},
+    {"tid": "203", "name": "Slovakia", "category": "Countries"},
+    {"tid": "204", "name": "Slovenia", "category": "Countries"},
+    {"tid": "205", "name": "Solomon Islands", "category": "Countries"},
+    {"tid": "206", "name": "Somalia", "category": "Countries"},
+    {"tid": "207", "name": "South Africa", "category": "Countries"},
     {
         "tid": "208",
         "name": "South Georgia and the South Sandwich Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "209",
-        "name": "South Korea",
-        "category": "Countries"
-    },
-    {
-        "tid": "476",
-        "name": "South Sudan",
-        "category": "Countries"
-    },
-    {
-        "tid": "210",
-        "name": "Spain",
-        "category": "Countries"
-    },
-    {
-        "tid": "211",
-        "name": "Sri Lanka",
-        "category": "Countries"
-    },
-    {
-        "tid": "212",
-        "name": "Sudan",
-        "category": "Countries"
-    },
-    {
-        "tid": "213",
-        "name": "Suriname",
-        "category": "Countries"
-    },
-    {
-        "tid": "214",
-        "name": "Svalbard and Jan Mayen",
-        "category": "Countries"
-    },
-    {
-        "tid": "215",
-        "name": "Swaziland",
-        "category": "Countries"
-    },
-    {
-        "tid": "216",
-        "name": "Sweden",
-        "category": "Countries"
-    },
-    {
-        "tid": "217",
-        "name": "Switzerland",
-        "category": "Countries"
-    },
-    {
-        "tid": "218",
-        "name": "Syria",
-        "category": "Countries"
-    },
-    {
-        "tid": "219",
-        "name": "Taiwan",
-        "category": "Countries"
-    },
-    {
-        "tid": "220",
-        "name": "Tajikistan",
-        "category": "Countries"
-    },
-    {
-        "tid": "221",
-        "name": "Tanzania",
-        "category": "Countries"
-    },
-    {
-        "tid": "222",
-        "name": "Thailand",
-        "category": "Countries"
-    },
-    {
-        "tid": "223",
-        "name": "Timor-Leste",
-        "category": "Countries"
-    },
-    {
-        "tid": "224",
-        "name": "Togo",
-        "category": "Countries"
-    },
-    {
-        "tid": "225",
-        "name": "Tokelau",
-        "category": "Countries"
-    },
-    {
-        "tid": "226",
-        "name": "Tonga",
-        "category": "Countries"
-    },
-    {
-        "tid": "227",
-        "name": "Trinidad and Tobago",
-        "category": "Countries"
-    },
-    {
-        "tid": "228",
-        "name": "Tunisia",
-        "category": "Countries"
-    },
-    {
-        "tid": "229",
-        "name": "Turkey",
-        "category": "Countries"
-    },
-    {
-        "tid": "230",
-        "name": "Turkmenistan",
-        "category": "Countries"
-    },
-    {
-        "tid": "231",
-        "name": "Turks and Caicos Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "232",
-        "name": "Tuvalu",
-        "category": "Countries"
-    },
-    {
-        "tid": "233",
-        "name": "U.S. Virgin Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "234",
-        "name": "Uganda",
-        "category": "Countries"
-    },
-    {
-        "tid": "235",
-        "name": "Ukraine",
-        "category": "Countries"
-    },
-    {
-        "tid": "236",
-        "name": "United Arab Emirates",
-        "category": "Countries"
-    },
-    {
-        "tid": "237",
-        "name": "United Kingdom",
-        "category": "Countries"
-    },
-    {
-        "tid": "238",
-        "name": "United States",
-        "category": "Countries"
-    },
+        "category": "Countries",
+    },
+    {"tid": "209", "name": "South Korea", "category": "Countries"},
+    {"tid": "476", "name": "South Sudan", "category": "Countries"},
+    {"tid": "210", "name": "Spain", "category": "Countries"},
+    {"tid": "211", "name": "Sri Lanka", "category": "Countries"},
+    {"tid": "212", "name": "Sudan", "category": "Countries"},
+    {"tid": "213", "name": "Suriname", "category": "Countries"},
+    {"tid": "214", "name": "Svalbard and Jan Mayen", "category": "Countries"},
+    {"tid": "215", "name": "Swaziland", "category": "Countries"},
+    {"tid": "216", "name": "Sweden", "category": "Countries"},
+    {"tid": "217", "name": "Switzerland", "category": "Countries"},
+    {"tid": "218", "name": "Syria", "category": "Countries"},
+    {"tid": "219", "name": "Taiwan", "category": "Countries"},
+    {"tid": "220", "name": "Tajikistan", "category": "Countries"},
+    {"tid": "221", "name": "Tanzania", "category": "Countries"},
+    {"tid": "222", "name": "Thailand", "category": "Countries"},
+    {"tid": "223", "name": "Timor-Leste", "category": "Countries"},
+    {"tid": "224", "name": "Togo", "category": "Countries"},
+    {"tid": "225", "name": "Tokelau", "category": "Countries"},
+    {"tid": "226", "name": "Tonga", "category": "Countries"},
+    {"tid": "227", "name": "Trinidad and Tobago", "category": "Countries"},
+    {"tid": "228", "name": "Tunisia", "category": "Countries"},
+    {"tid": "229", "name": "Turkey", "category": "Countries"},
+    {"tid": "230", "name": "Turkmenistan", "category": "Countries"},
+    {"tid": "231", "name": "Turks and Caicos Islands", "category": "Countries"},
+    {"tid": "232", "name": "Tuvalu", "category": "Countries"},
+    {"tid": "233", "name": "U.S. Virgin Islands", "category": "Countries"},
+    {"tid": "234", "name": "Uganda", "category": "Countries"},
+    {"tid": "235", "name": "Ukraine", "category": "Countries"},
+    {"tid": "236", "name": "United Arab Emirates", "category": "Countries"},
+    {"tid": "237", "name": "United Kingdom", "category": "Countries"},
+    {"tid": "238", "name": "United States", "category": "Countries"},
     {
         "tid": "239",
         "name": "United States Minor Outlying Islands",
-        "category": "Countries"
-    },
-    {
-        "tid": "240",
-        "name": "Uruguay",
-        "category": "Countries"
-    },
-    {
-        "tid": "241",
-        "name": "Uzbekistan",
-        "category": "Countries"
-    },
-    {
-        "tid": "242",
-        "name": "Vanuatu",
-        "category": "Countries"
-    },
-    {
-        "tid": "243",
-        "name": "Vatican",
-        "category": "Countries"
-    },
-    {
-        "tid": "244",
-        "name": "Venezuela",
-        "category": "Countries"
-    },
-    {
-        "tid": "245",
-        "name": "Vietnam",
-        "category": "Countries"
-    },
-    {
-        "tid": "246",
-        "name": "Wallis and Futuna",
-        "category": "Countries"
-    },
-    {
-        "tid": "247",
-        "name": "Western Sahara",
-        "category": "Countries"
-    },
-    {
-        "tid": "248",
-        "name": "Yemen",
-        "category": "Countries"
-    },
-    {
-        "tid": "249",
-        "name": "Zambia",
-        "category": "Countries"
-    },
-    {
-        "tid": "250",
-        "name": "Zimbabwe",
-        "category": "Countries"
-    },
-    {
-        "tid": "302",
-        "category": "Technology attributes",
-        "name": "Anonymity"
-    },
+        "category": "Countries",
+    },
+    {"tid": "240", "name": "Uruguay", "category": "Countries"},
+    {"tid": "241", "name": "Uzbekistan", "category": "Countries"},
+    {"tid": "242", "name": "Vanuatu", "category": "Countries"},
+    {"tid": "243", "name": "Vatican", "category": "Countries"},
+    {"tid": "244", "name": "Venezuela", "category": "Countries"},
+    {"tid": "245", "name": "Vietnam", "category": "Countries"},
+    {"tid": "246", "name": "Wallis and Futuna", "category": "Countries"},
+    {"tid": "247", "name": "Western Sahara", "category": "Countries"},
+    {"tid": "248", "name": "Yemen", "category": "Countries"},
+    {"tid": "249", "name": "Zambia", "category": "Countries"},
+    {"tid": "250", "name": "Zimbabwe", "category": "Countries"},
+    {"tid": "302", "category": "Technology attributes", "name": "Anonymity"},
     {
         "tid": "303",
         "category": "Technology attributes",
-        "name": "Application deployment"
-    },
-    {
-        "tid": "298",
-        "category": "Technology attributes",
-        "name": "Browser extension"
-    },
-    {
-        "tid": "299",
-        "category": "Technology attributes",
-        "name": "Browser plugin"
-    },
-    {
-        "tid": "308",
-        "category": "Technology attributes",
-        "name": "Cryptography"
+        "name": "Application deployment",
     },
+    {"tid": "298", "category": "Technology attributes", "name": "Browser extension"},
+    {"tid": "299", "category": "Technology attributes", "name": "Browser plugin"},
+    {"tid": "308", "category": "Technology attributes", "name": "Cryptography"},
     {
         "tid": "310",
         "category": "Technology attributes",
-        "name": "Dependency integration"
-    },
-    {
-        "tid": "312",
-        "category": "Technology attributes",
-        "name": "Desktop App"
-    },
-    {
-        "tid": "311",
-        "category": "Technology attributes",
-        "name": "Desktop client"
+        "name": "Dependency integration",
     },
+    {"tid": "312", "category": "Technology attributes", "name": "Desktop App"},
+    {"tid": "311", "category": "Technology attributes", "name": "Desktop client"},
     {
         "tid": "316",
         "category": "Technology attributes",
-        "name": "Hardware/Embedded device(s)"
+        "name": "Hardware/Embedded device(s)",
     },
     {
         "tid": "347",
         "category": "Technology attributes",
-        "name": "Infrastructure as a service (IaaS)"
+        "name": "Infrastructure as a service (IaaS)",
     },
     {
         "tid": "306",
         "category": "Technology attributes",
-        "name": "Mobile application (clientside)"
-    },
-    {
-        "tid": "314",
-        "category": "Technology attributes",
-        "name": "Networking"
-    },
-    {
-        "tid": "356",
-        "category": "Technology attributes",
-        "name": "Not applicable"
-    },
-    {
-        "tid": "317",
-        "category": "Technology attributes",
-        "name": "Other"
+        "name": "Mobile application (clientside)",
     },
+    {"tid": "314", "category": "Technology attributes", "name": "Networking"},
+    {"tid": "356", "category": "Technology attributes", "name": "Not applicable"},
+    {"tid": "317", "category": "Technology attributes", "name": "Other"},
     {
         "tid": "346",
         "category": "Technology attributes",
-        "name": "Platform as a service (PaaS)"
-    },
-    {
-        "tid": "349",
-        "category": "Technology attributes",
-        "name": "Reverse Engineering"
-    },
-    {
-        "tid": "313",
-        "category": "Technology attributes",
-        "name": "Sensitive data"
-    },
-    {
-        "tid": "305",
-        "category": "Technology attributes",
-        "name": "Server daemon"
+        "name": "Platform as a service (PaaS)",
     },
+    {"tid": "349", "category": "Technology attributes", "name": "Reverse Engineering"},
+    {"tid": "313", "category": "Technology attributes", "name": "Sensitive data"},
+    {"tid": "305", "category": "Technology attributes", "name": "Server daemon"},
     {
         "tid": "315",
         "category": "Technology attributes",
-        "name": "Software as a Service (SaaS)"
-    },
-    {
-        "tid": "300",
-        "category": "Technology attributes",
-        "name": "Unmanaged language"
+        "name": "Software as a Service (SaaS)",
     },
+    {"tid": "300", "category": "Technology attributes", "name": "Unmanaged language"},
     {
         "tid": "301",
         "category": "Technology attributes",
-        "name": "User interface/experience"
+        "name": "User interface/experience",
     },
     {
         "tid": "307",
         "category": "Technology attributes",
-        "name": "Web API/Mobile application (serverside)"
-    },
-    {
-        "tid": "304",
-        "category": "Technology attributes",
-        "name": "Web application"
+        "name": "Web API/Mobile application (serverside)",
     },
+    {"tid": "304", "category": "Technology attributes", "name": "Web application"},
     {
         "tid": "309",
         "category": "Technology attributes",
-        "name": "Wireless Communication"
-    }
+        "name": "Wireless Communication",
+    },
 ]
diff --git a/hypha/apply/categories/management/commands/seed_categories.py b/hypha/apply/categories/management/commands/seed_categories.py
index e5b0526db74c296293a7e82eb382b94ffb90a1a1..61e616427e1b12ca699d706efb6dbb247ae451f9 100644
--- a/hypha/apply/categories/management/commands/seed_categories.py
+++ b/hypha/apply/categories/management/commands/seed_categories.py
@@ -11,9 +11,15 @@ class Command(BaseCommand):
     @transaction.atomic
     def handle(self, *args, **options):
         for item in CATEGORIES:
-            category, created = Category.objects.get_or_create(name=item['category'])
+            category, created = Category.objects.get_or_create(name=item["category"])
             if created:
-                self.stdout.write(self.style.SUCCESS(f"Category {item['category']} created"))
-            term, created = Option.objects.get_or_create(value=item['name'], category=category)
+                self.stdout.write(
+                    self.style.SUCCESS(f"Category {item['category']} created")
+                )
+            term, created = Option.objects.get_or_create(
+                value=item["name"], category=category
+            )
             if created:
-                self.stdout.write(f"Term {item['name']} added to category {item['category']}")
+                self.stdout.write(
+                    f"Term {item['name']} added to category {item['category']}"
+                )
diff --git a/hypha/apply/categories/migrations/0001_initial.py b/hypha/apply/categories/migrations/0001_initial.py
index fa8ce2994a2d30959bc9dd9c466191f31832f497..da244f34fc3bf7688efebe1beec6fb3177a8b490 100644
--- a/hypha/apply/categories/migrations/0001_initial.py
+++ b/hypha/apply/categories/migrations/0001_initial.py
@@ -8,35 +8,59 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
-    dependencies = [
-    ]
+    dependencies = []
 
     operations = [
         migrations.CreateModel(
-            name='Category',
+            name="Category",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('help_text', models.CharField(blank=True, max_length=255)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
+                ("help_text", models.CharField(blank=True, max_length=255)),
             ],
             options={
-                'verbose_name_plural': 'Categories',
+                "verbose_name_plural": "Categories",
             },
         ),
         migrations.CreateModel(
-            name='Option',
+            name="Option",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('value', models.CharField(max_length=255)),
-                ('category', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='options', to='categories.Category')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                ("value", models.CharField(max_length=255)),
+                (
+                    "category",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="options",
+                        to="categories.Category",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/categories/migrations/0002_metacategory.py b/hypha/apply/categories/migrations/0002_metacategory.py
index 0f47ec33488f216aeafa47b0d35b9f11dcbe92c3..3496b8d0063b8fc3fd22384d0ea3d6529437f707 100644
--- a/hypha/apply/categories/migrations/0002_metacategory.py
+++ b/hypha/apply/categories/migrations/0002_metacategory.py
@@ -5,25 +5,42 @@ import wagtail.search.index
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0001_initial'),
+        ("categories", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='MetaCategory',
+            name="MetaCategory",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('path', models.CharField(max_length=255, unique=True)),
-                ('depth', models.PositiveIntegerField()),
-                ('numchild', models.PositiveIntegerField(default=0)),
-                ('name', models.CharField(help_text='Keep the name short, ideally one word.', max_length=50, unique=True)),
-                ('node_order_index', models.IntegerField(blank=True, default=0, editable=False)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("path", models.CharField(max_length=255, unique=True)),
+                ("depth", models.PositiveIntegerField()),
+                ("numchild", models.PositiveIntegerField(default=0)),
+                (
+                    "name",
+                    models.CharField(
+                        help_text="Keep the name short, ideally one word.",
+                        max_length=50,
+                        unique=True,
+                    ),
+                ),
+                (
+                    "node_order_index",
+                    models.IntegerField(blank=True, default=0, editable=False),
+                ),
             ],
             options={
-                'verbose_name': 'Meta Category',
-                'verbose_name_plural': 'Meta Categories',
+                "verbose_name": "Meta Category",
+                "verbose_name_plural": "Meta Categories",
             },
             bases=(wagtail.search.index.Indexed, models.Model),
         ),
diff --git a/hypha/apply/categories/migrations/0003_rename_meta_categories_to_meta_terms.py b/hypha/apply/categories/migrations/0003_rename_meta_categories_to_meta_terms.py
index 76e8fa9ad601b03668897d40708db4b3415e24ff..d0184f9ef515cccb84b5170474e998af7934a3bd 100644
--- a/hypha/apply/categories/migrations/0003_rename_meta_categories_to_meta_terms.py
+++ b/hypha/apply/categories/migrations/0003_rename_meta_categories_to_meta_terms.py
@@ -6,29 +6,59 @@ import wagtail.search.index
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0002_metacategory'),
+        ("categories", "0002_metacategory"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='MetaTerm',
+            name="MetaTerm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('path', models.CharField(max_length=255, unique=True)),
-                ('depth', models.PositiveIntegerField()),
-                ('numchild', models.PositiveIntegerField(default=0)),
-                ('name', models.CharField(help_text='Keep the name short, ideally one word.', max_length=50, unique=True)),
-                ('is_archived', models.BooleanField(default=False, verbose_name='Archived')),
-                ('help_text', wagtail.fields.RichTextField(blank=True)),
-                ('filter_on_dashboard', models.BooleanField(default=True, help_text='Make available to filter on dashboard')),
-                ('available_to_applicants', models.BooleanField(default=False, help_text='Make available to applicants')),
-                ('node_order_index', models.IntegerField(blank=True, default=0, editable=False)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("path", models.CharField(max_length=255, unique=True)),
+                ("depth", models.PositiveIntegerField()),
+                ("numchild", models.PositiveIntegerField(default=0)),
+                (
+                    "name",
+                    models.CharField(
+                        help_text="Keep the name short, ideally one word.",
+                        max_length=50,
+                        unique=True,
+                    ),
+                ),
+                (
+                    "is_archived",
+                    models.BooleanField(default=False, verbose_name="Archived"),
+                ),
+                ("help_text", wagtail.fields.RichTextField(blank=True)),
+                (
+                    "filter_on_dashboard",
+                    models.BooleanField(
+                        default=True, help_text="Make available to filter on dashboard"
+                    ),
+                ),
+                (
+                    "available_to_applicants",
+                    models.BooleanField(
+                        default=False, help_text="Make available to applicants"
+                    ),
+                ),
+                (
+                    "node_order_index",
+                    models.IntegerField(blank=True, default=0, editable=False),
+                ),
             ],
             options={
-                'verbose_name': 'Meta Term',
-                'verbose_name_plural': 'Meta Terms',
+                "verbose_name": "Meta Term",
+                "verbose_name_plural": "Meta Terms",
             },
             bases=(wagtail.search.index.Indexed, models.Model),
         ),
diff --git a/hypha/apply/categories/migrations/0004_rename_meta_categories_to_meta_terms.py b/hypha/apply/categories/migrations/0004_rename_meta_categories_to_meta_terms.py
index 75b2953ddc2c0ff94c4d008d2e821e2eaa7b0c9f..7915bdfdb101b9bb7cc34b4ef36903cb79392ed5 100644
--- a/hypha/apply/categories/migrations/0004_rename_meta_categories_to_meta_terms.py
+++ b/hypha/apply/categories/migrations/0004_rename_meta_categories_to_meta_terms.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0003_rename_meta_categories_to_meta_terms'),
-        ('funds', '0070_rename_meta_categories_to_meta_terms'),
+        ("categories", "0003_rename_meta_categories_to_meta_terms"),
+        ("funds", "0070_rename_meta_categories_to_meta_terms"),
     ]
 
     operations = [
         migrations.DeleteModel(
-            name='MetaCategory',
+            name="MetaCategory",
         ),
     ]
diff --git a/hypha/apply/categories/migrations/0005_alter_is_archived_field_on_terms.py b/hypha/apply/categories/migrations/0005_alter_is_archived_field_on_terms.py
index 5d34f431c5450b403863fde6ea343bd531f57398..06403469d18986ba2d74411037addefead05b709 100644
--- a/hypha/apply/categories/migrations/0005_alter_is_archived_field_on_terms.py
+++ b/hypha/apply/categories/migrations/0005_alter_is_archived_field_on_terms.py
@@ -4,15 +4,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0004_rename_meta_categories_to_meta_terms'),
+        ("categories", "0004_rename_meta_categories_to_meta_terms"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='metaterm',
-            name='is_archived',
-            field=models.BooleanField(default=False, help_text='Archived terms can be viewed but not set on content.', verbose_name='Archived'),
+            model_name="metaterm",
+            name="is_archived",
+            field=models.BooleanField(
+                default=False,
+                help_text="Archived terms can be viewed but not set on content.",
+                verbose_name="Archived",
+            ),
         ),
     ]
diff --git a/hypha/apply/categories/migrations/0006_use_category_options_as_submission_filter.py b/hypha/apply/categories/migrations/0006_use_category_options_as_submission_filter.py
index 624fbd8dd1b5ecc362c1930c92ac483ec4306214..68f85e009f34b9a8e8f56a79564fef8a3eff7063 100644
--- a/hypha/apply/categories/migrations/0006_use_category_options_as_submission_filter.py
+++ b/hypha/apply/categories/migrations/0006_use_category_options_as_submission_filter.py
@@ -4,15 +4,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0005_alter_is_archived_field_on_terms'),
+        ("categories", "0005_alter_is_archived_field_on_terms"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='category',
-            name='filter_on_dashboard',
-            field=models.BooleanField(default=False, help_text='Make available to filter on dashboard'),
+            model_name="category",
+            name="filter_on_dashboard",
+            field=models.BooleanField(
+                default=False, help_text="Make available to filter on dashboard"
+            ),
         ),
     ]
diff --git a/hypha/apply/categories/models.py b/hypha/apply/categories/models.py
index e8ef4d7c10d3d3b07b727ff17aad100d27330d7d..dca6f99428c61c511181754b6ea919ea4b685ae1 100644
--- a/hypha/apply/categories/models.py
+++ b/hypha/apply/categories/models.py
@@ -15,7 +15,7 @@ from wagtail.search import index
 
 class Option(Orderable):
     value = models.CharField(max_length=255)
-    category = ParentalKey('Category', related_name='options')
+    category = ParentalKey("Category", related_name="options")
 
     def __str__(self):
         return self.value
@@ -27,92 +27,100 @@ class Category(ClusterableModel):
 
     When used in a form: name -> field label and help_text -> help_text
     """
+
     name = models.CharField(max_length=255)
     filter_on_dashboard = models.BooleanField(
-        default=False, help_text=_('Make available to filter on dashboard')
+        default=False, help_text=_("Make available to filter on dashboard")
     )
     help_text = models.CharField(max_length=255, blank=True)
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('filter_on_dashboard'),
-        FieldPanel('help_text'),
-        InlinePanel('options', label=_('Options')),
+        FieldPanel("name"),
+        FieldPanel("filter_on_dashboard"),
+        FieldPanel("help_text"),
+        InlinePanel("options", label=_("Options")),
     ]
 
     def __str__(self):
         return self.name
 
     class Meta:
-        verbose_name_plural = 'Categories'
+        verbose_name_plural = "Categories"
 
 
 class MetaTerm(index.Indexed, MP_Node):
-    """ Hierarchal "Meta" terms """
+    """Hierarchal "Meta" terms"""
+
     name = models.CharField(
-        max_length=50, unique=True, help_text=_('Keep the name short, ideally one word.')
+        max_length=50,
+        unique=True,
+        help_text=_("Keep the name short, ideally one word."),
     )
     is_archived = models.BooleanField(
-        default=False, verbose_name=_('Archived'),
-        help_text=_('Archived terms can be viewed but not set on content.')
+        default=False,
+        verbose_name=_("Archived"),
+        help_text=_("Archived terms can be viewed but not set on content."),
     )
     filter_on_dashboard = models.BooleanField(
-        default=True, help_text=_('Make available to filter on dashboard')
+        default=True, help_text=_("Make available to filter on dashboard")
     )
     available_to_applicants = models.BooleanField(
-        default=False, help_text=_('Make available to applicants')
+        default=False, help_text=_("Make available to applicants")
+    )
+    help_text = RichTextField(
+        features=["h2", "h3", "bold", "italic", "link", "hr", "ol", "ul"], blank=True
     )
-    help_text = RichTextField(features=[
-        'h2', 'h3', 'bold', 'italic', 'link', 'hr', 'ol', 'ul'], blank=True)
 
     # node tree specific fields and attributes
     node_order_index = models.IntegerField(blank=True, default=0, editable=False)
-    node_child_verbose_name = 'child'
+    node_child_verbose_name = "child"
 
     # important: node_order_by should NOT be changed after first Node created
-    node_order_by = ['node_order_index', 'name']
+    node_order_by = ["node_order_index", "name"]
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('parent'),
+        FieldPanel("name"),
+        FieldPanel("parent"),
         MultiFieldPanel(
             [
-                FieldPanel('is_archived'),
-                FieldPanel('filter_on_dashboard'),
-                FieldPanel('available_to_applicants'),
-                FieldPanel('help_text'),
+                FieldPanel("is_archived"),
+                FieldPanel("filter_on_dashboard"),
+                FieldPanel("available_to_applicants"),
+                FieldPanel("help_text"),
             ],
-            heading=_('Options'),
+            heading=_("Options"),
         ),
     ]
 
     def get_as_listing_header(self):
         depth = self.get_depth()
         rendered = render_to_string(
-            'categories/admin/includes/meta_term_list_header.html',
+            "categories/admin/includes/meta_term_list_header.html",
             {
-                'depth': depth,
-                'depth_minus_1': depth - 1,
-                'is_root': self.is_root(),
-                'name': self.name,
-                'is_archived': self.is_archived,
-            }
+                "depth": depth,
+                "depth_minus_1": depth - 1,
+                "is_root": self.is_root(),
+                "name": self.name,
+                "is_archived": self.is_archived,
+            },
         )
         return rendered
-    get_as_listing_header.short_description = 'Name'
-    get_as_listing_header.admin_order_field = 'name'
+
+    get_as_listing_header.short_description = "Name"
+    get_as_listing_header.admin_order_field = "name"
 
     def get_parent(self, *args, **kwargs):
         return super().get_parent(*args, **kwargs)
-    get_parent.short_description = 'Parent'
+
+    get_parent.short_description = "Parent"
 
     search_fields = [
-        index.SearchField('name', partial_match=True),
+        index.SearchField("name", partial_match=True),
     ]
 
     def delete(self):
         if self.is_root():
-            raise PermissionDenied('Cannot delete root term.')
+            raise PermissionDenied("Cannot delete root term.")
         else:
             super().delete()
 
@@ -128,13 +136,13 @@ class MetaTerm(index.Indexed, MP_Node):
         return self.name
 
     class Meta:
-        verbose_name = 'Meta Term'
-        verbose_name_plural = 'Meta Terms'
+        verbose_name = "Meta Term"
+        verbose_name_plural = "Meta Terms"
 
 
 class MetaTermChoiceField(forms.ModelChoiceField):
     def label_from_instance(self, obj):
-        depth_line = '-' * (obj.get_depth() - 1)
+        depth_line = "-" * (obj.get_depth() - 1)
         return "{} {}".format(depth_line, super().label_from_instance(obj))
 
 
@@ -147,29 +155,31 @@ class MetaTermForm(WagtailAdminModelForm):
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        instance = kwargs['instance']
+        instance = kwargs["instance"]
 
         if instance.is_root() or MetaTerm.objects.count() == 0:
-            self.fields['parent'].disabled = True
-            self.fields['parent'].required = False
-            self.fields['parent'].empty_label = 'N/A - Root Term'
-            self.fields['parent'].widget = forms.HiddenInput()
+            self.fields["parent"].disabled = True
+            self.fields["parent"].required = False
+            self.fields["parent"].empty_label = "N/A - Root Term"
+            self.fields["parent"].widget = forms.HiddenInput()
 
-            self.fields['name'].label += ' (Root - First term can be named root)'
+            self.fields["name"].label += " (Root - First term can be named root)"
         elif instance.id:
-            self.fields['parent'].initial = instance.get_parent()
+            self.fields["parent"].initial = instance.get_parent()
 
     def clean_parent(self):
-        parent = self.cleaned_data['parent']
+        parent = self.cleaned_data["parent"]
 
         if parent and parent.is_archived:
-            raise forms.ValidationError('The parent is archived therefore can not add child under it.')
+            raise forms.ValidationError(
+                "The parent is archived therefore can not add child under it."
+            )
 
         return parent
 
     def save(self, commit=True, *args, **kwargs):
         instance = super().save(*args, **kwargs, commit=False)
-        parent = self.cleaned_data['parent']
+        parent = self.cleaned_data["parent"]
 
         if not commit:
             return instance
@@ -182,7 +192,7 @@ class MetaTermForm(WagtailAdminModelForm):
         else:
             instance.save()
             if instance.get_parent() != parent:
-                instance.move(parent, pos='sorted-child')
+                instance.move(parent, pos="sorted-child")
         return instance
 
 
diff --git a/hypha/apply/categories/templates/categories/admin/includes/meta_term_list_header.html b/hypha/apply/categories/templates/categories/admin/includes/meta_term_list_header.html
index 4350cfd26ed1c8924c43827067664d3c178005f4..e4d90faf94e825dbe40173b54c8d3055063b261e 100644
--- a/hypha/apply/categories/templates/categories/admin/includes/meta_term_list_header.html
+++ b/hypha/apply/categories/templates/categories/admin/includes/meta_term_list_header.html
@@ -6,9 +6,9 @@
     <span class="inline-block" style="margin-left:{{ depth }}em; font-size:{% if depth is 1 %}90{% elif depth is 2 %}80{% else %}100{% endif %}%;"></span>
     <i class="icon icon-fa-level-up icon-fa-rotate-90" style="display: inline-block;"></i>
     {% if is_archived %}
-        <span style="color: LightGray">{{ name }} ({% trans "archived" %})</span>
+      <span style="color: LightGray">{{ name }} ({% trans "archived" %})</span>
     {% else %}
-        {{ name }}
+      {{ name }}
     {% endif %}
   </span>
 {% endif %}
diff --git a/hypha/apply/categories/tests/factories.py b/hypha/apply/categories/tests/factories.py
index d63bc904a8aa890052fe417663d37dc077e4fa60..2b380422cc0346f8a1d3f6990679cc4a2f7c8611 100644
--- a/hypha/apply/categories/tests/factories.py
+++ b/hypha/apply/categories/tests/factories.py
@@ -7,13 +7,13 @@ class CategoryFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Category
 
-    name = factory.Faker('word')
-    help_text = factory.Faker('sentence')
+    name = factory.Faker("word")
+    help_text = factory.Faker("sentence")
 
 
 class OptionFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Option
 
-    value = factory.Faker('word')
+    value = factory.Faker("word")
     category = factory.SubFactory(CategoryFactory)
diff --git a/hypha/apply/categories/tests/test_blocks.py b/hypha/apply/categories/tests/test_blocks.py
index f4f90c83fbef4267aab79cf183e66f59784e6be1..c940d7642f59f7288742b28641efde6084e39517 100644
--- a/hypha/apply/categories/tests/test_blocks.py
+++ b/hypha/apply/categories/tests/test_blocks.py
@@ -14,10 +14,10 @@ class TestCategoryQuestionBlock(TestCase):
 
     def get_field(self, **kwargs):
         data = {
-            'field_label': '',
-            'help_text': '',
-            'category': self.category.id,
-            'multi': False,
+            "field_label": "",
+            "help_text": "",
+            "category": self.category.id,
+            "multi": False,
         }
         data.update(kwargs)
 
@@ -26,15 +26,15 @@ class TestCategoryQuestionBlock(TestCase):
         return self.block.get_field(block)
 
     def test_field_and_help_default(self):
-        field = self.get_field(field_label='', help_text='')
+        field = self.get_field(field_label="", help_text="")
         self.assertEqual(self.category.name, field.label)
         self.assertEqual(self.category.help_text, field.help_text)
 
     def test_supplied_field_and_help(self):
-        values = {'field_label': 'LABEL', 'help_text': 'HELP'}
+        values = {"field_label": "LABEL", "help_text": "HELP"}
         field = self.get_field(**values)
-        self.assertEqual(values['field_label'], field.label)
-        self.assertEqual(values['help_text'], field.help_text)
+        self.assertEqual(values["field_label"], field.label)
+        self.assertEqual(values["help_text"], field.help_text)
 
     def test_multi_select_enabled(self):
         field = self.get_field(multi=True)
@@ -50,9 +50,9 @@ class TestCategoryQuestionBlock(TestCase):
         field = self.get_field()
         self.assertEqual(
             field.choices,
-            [(option.id, option.value) for option in self.category.options.all()]
+            [(option.id, option.value) for option in self.category.options.all()],
         )
 
     def test_can_render_if_no_response(self):
-        display = self.block.render({'category': self.category}, {'data': None})
+        display = self.block.render({"category": self.category}, {"data": None})
         self.assertIn(self.block.no_response()[0], display)
diff --git a/hypha/apply/dashboard/apps.py b/hypha/apply/dashboard/apps.py
index c694d18cb5726ec1c0ec403397b38e5d28586664..f4704c74493115bb1bd273832bfdd5f3c179f030 100644
--- a/hypha/apply/dashboard/apps.py
+++ b/hypha/apply/dashboard/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class DashboardConfig(AppConfig):
-    name = 'hypha.apply.dashboard'
+    name = "hypha.apply.dashboard"
diff --git a/hypha/apply/dashboard/static/js/django_select2-checkboxes.js b/hypha/apply/dashboard/static/js/django_select2-checkboxes.js
index e64657c6d7eb94d11456bbcef5cbcece03e50393..40abe6a090857f3ea7b217e4ac2da047021f726c 100644
--- a/hypha/apply/dashboard/static/js/django_select2-checkboxes.js
+++ b/hypha/apply/dashboard/static/js/django_select2-checkboxes.js
@@ -1,31 +1,39 @@
-(function($) {
-  $.fn.select2.amd.require(
-    [
-      'select2/multi-checkboxes/selection',
-      'select2/multi-checkboxes/results'
-    ],
-    function(SelectionAdapter, ResultsAdapter) {
+(function ($) {
+    $.fn.select2.amd.require(
+        [
+            "select2/multi-checkboxes/selection",
+            "select2/multi-checkboxes/results",
+        ],
+        function (SelectionAdapter, ResultsAdapter) {
+            $(function () {
+                $(".django-select2-checkboxes").each(function (i, element) {
+                    var $element = $(element);
+                    $element.select2({
+                        placeholder: $element.data("placeholder"),
+                        closeOnSelect: false,
+                        templateSelection: function (data) {
+                            let filterType = $element.data("placeholder");
 
-      $(function () {
-        $('.django-select2-checkboxes').each(function (i, element) {
-          var $element = $(element);
-            $element.select2({
-              placeholder: $element.data('placeholder'),
-              closeOnSelect: false,
-              templateSelection: function(data) {
-                let filterType = $element.data('placeholder');
-
-                if (!data.selected.length) {
-                  return filterType
-                } else if (data.selected.length == data.all.length) {
-                  return 'All ' + filterType + ' selected';
-                }
-                return data.selected.length + ' of ' + data.all.length + ' ' + filterType;
-              },
-              selectionAdapter: SelectionAdapter,
-              returnesultsAdapter: ResultsAdapter
+                            if (!data.selected.length) {
+                                return filterType;
+                            } else if (
+                                data.selected.length == data.all.length
+                            ) {
+                                return "All " + filterType + " selected";
+                            }
+                            return (
+                                data.selected.length +
+                                " of " +
+                                data.all.length +
+                                " " +
+                                filterType
+                            );
+                        },
+                        selectionAdapter: SelectionAdapter,
+                        returnesultsAdapter: ResultsAdapter,
+                    });
+                });
             });
-        });
-      });
-    });
-}(this.jQuery));
+        }
+    );
+})(this.jQuery);
diff --git a/hypha/apply/dashboard/static/js/select2.multi-checkboxes.js b/hypha/apply/dashboard/static/js/select2.multi-checkboxes.js
index 815268be46a8d18945b295f22fbac4c39da6cf2a..9faf906943183fa84bbfc5a010c68131edf486f8 100644
--- a/hypha/apply/dashboard/static/js/select2.multi-checkboxes.js
+++ b/hypha/apply/dashboard/static/js/select2.multi-checkboxes.js
@@ -9,118 +9,121 @@
  */
 
 /* global define jQuery */
-(function(factory) {
-  if (typeof define === 'function' && define.amd) {
-    define(['jquery'], factory);
-  } else {
-    // Browser globals
-    factory(jQuery);
-  }
-}(function(jQuery) {
-  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
-    define = jQuery.fn.select2.amd.define;
-  }
-  var define;
-
-  /* global define */
-  define('select2/multi-checkboxes/dropdown', [
-    'select2/utils',
-    'select2/dropdown',
-    'select2/dropdown/search',
-    'select2/dropdown/attachBody'
-  ],
-  function(Utils, Dropdown, DropdownSearch, AttachBody) {
-    return Utils.Decorate(
-      Utils.Decorate(
-        Dropdown,
-        DropdownSearch
-      ),
-      AttachBody
-    );
-  });
-
-
-  /* global define */
-  define('select2/multi-checkboxes/results', [
-    'jquery',
-    'select2/utils',
-    'select2/results'
-  ],
-  function($, Utils, _Results) {
-    function Results() {
-      Results.__super__.constructor.apply(this, arguments);
+(function (factory) {
+    if (typeof define === "function" && define.amd) {
+        define(["jquery"], factory);
+    } else {
+        // Browser globals
+        factory(jQuery);
     }
-    Utils.Extend(Results, _Results);
-
-    Results.prototype.highlightFirstItem = function() {
-      this.ensureHighlightVisible();
-    };
-
-    Results.prototype.bind = function(container) {
-      container.on('open', function() {
-        var $options = this.$results.find('.select2-results__option[aria-selected]');
-        var $selected = $options.filter('[aria-selected=true]');
-        var $optionToScrollTo = ($selected.length > 0 ? $selected : $selected).first();
-        $optionToScrollTo.trigger('mouseenter');
-      });
-      Results.__super__.bind.apply(this, arguments);
-    };
-
-    Results.prototype.template = function(result, container) {
-      var template = this.options.get('templateResult');
-      var escapeMarkup = this.options.get('escapeMarkup');
-
-      var content = template(result, container);
-      $(container).addClass('multi-checkboxes_wrap');
-
-      if (content == null) {
-        container.style.display = 'none';
-      } else if (typeof content === 'string') {
-        container.innerHTML = escapeMarkup(content);
-      } else {
-        $(container).append(content);
-      }
-    };
-
-    return Results;
-  });
+})(function (jQuery) {
+    if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
+        define = jQuery.fn.select2.amd.define;
+    }
+    var define;
+
+    /* global define */
+    define("select2/multi-checkboxes/dropdown", [
+        "select2/utils",
+        "select2/dropdown",
+        "select2/dropdown/search",
+        "select2/dropdown/attachBody",
+    ], function (Utils, Dropdown, DropdownSearch, AttachBody) {
+        return Utils.Decorate(
+            Utils.Decorate(Dropdown, DropdownSearch),
+            AttachBody
+        );
+    });
+
+    /* global define */
+    define("select2/multi-checkboxes/results", [
+        "jquery",
+        "select2/utils",
+        "select2/results",
+    ], function ($, Utils, _Results) {
+        function Results() {
+            Results.__super__.constructor.apply(this, arguments);
+        }
+        Utils.Extend(Results, _Results);
+
+        Results.prototype.highlightFirstItem = function () {
+            this.ensureHighlightVisible();
+        };
 
+        Results.prototype.bind = function (container) {
+            container.on("open", function () {
+                var $options = this.$results.find(
+                    ".select2-results__option[aria-selected]"
+                );
+                var $selected = $options.filter("[aria-selected=true]");
+                var $optionToScrollTo = (
+                    $selected.length > 0 ? $selected : $selected
+                ).first();
+                $optionToScrollTo.trigger("mouseenter");
+            });
+            Results.__super__.bind.apply(this, arguments);
+        };
 
-  /* global define */
-  define('select2/multi-checkboxes/selection', [
-    'select2/utils',
-    'select2/selection/multiple',
-    'select2/selection/placeholder',
-    'select2/selection/single',
-    'select2/selection/eventRelay'
-  ],
-  function(Utils, MultipleSelection, Placeholder, SingleSelection, EventRelay) {
-    var adapter = Utils.Decorate(MultipleSelection, Placeholder);
-    adapter = Utils.Decorate(adapter, EventRelay);
+        Results.prototype.template = function (result, container) {
+            var template = this.options.get("templateResult");
+            var escapeMarkup = this.options.get("escapeMarkup");
 
-    adapter.prototype.render = function() {
-      return SingleSelection.prototype.render.call(this);
-    };
+            var content = template(result, container);
+            $(container).addClass("multi-checkboxes_wrap");
 
-    adapter.prototype.update = function(data) {
-      var $rendered = this.$selection.find('.select2-selection__rendered');
-      var formatted = '';
+            if (content == null) {
+                container.style.display = "none";
+            } else if (typeof content === "string") {
+                container.innerHTML = escapeMarkup(content);
+            } else {
+                $(container).append(content);
+            }
+        };
 
-      if (data.length === 0) {
-        formatted = this.options.get('placeholder') || '';
-      } else {
-        var itemsData = {
-          selected: data || [],
-          all: this.$element.find('option') || []
+        return Results;
+    });
+
+    /* global define */
+    define("select2/multi-checkboxes/selection", [
+        "select2/utils",
+        "select2/selection/multiple",
+        "select2/selection/placeholder",
+        "select2/selection/single",
+        "select2/selection/eventRelay",
+    ], function (
+        Utils,
+        MultipleSelection,
+        Placeholder,
+        SingleSelection,
+        EventRelay
+    ) {
+        var adapter = Utils.Decorate(MultipleSelection, Placeholder);
+        adapter = Utils.Decorate(adapter, EventRelay);
+
+        adapter.prototype.render = function () {
+            return SingleSelection.prototype.render.call(this);
         };
-        formatted = this.display(itemsData, $rendered);
-      }
 
-      $rendered.empty().append(formatted);
-      $rendered.prop('title', formatted);
-    };
+        adapter.prototype.update = function (data) {
+            var $rendered = this.$selection.find(
+                ".select2-selection__rendered"
+            );
+            var formatted = "";
+
+            if (data.length === 0) {
+                formatted = this.options.get("placeholder") || "";
+            } else {
+                var itemsData = {
+                    selected: data || [],
+                    all: this.$element.find("option") || [],
+                };
+                formatted = this.display(itemsData, $rendered);
+            }
+
+            $rendered.empty().append(formatted);
+            $rendered.prop("title", formatted);
+        };
 
-    return adapter;
-  });
-})
-);
+        return adapter;
+    });
+});
diff --git a/hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html b/hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html
index 3369c546f6a58b9712763761e9f624af2ea1d4b4..b83e83de14f7608334e91eb15d7a1fb20c2d8a6f 100644
--- a/hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html
@@ -1,73 +1,84 @@
 {% extends "base-apply.html" %}
 {% load render_table from django_tables2 %}
-{% load i18n static wagtailcore_tags workflow_tags statusbar_tags %}
+{% load i18n static wagtailcore_tags workflow_tags statusbar_tags heroicons %}
 
 {% block title %}{% trans "Dashboard" %}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner wrapper--applicant-dashboard">
-        <div>
-            <h3 class="heading heading--no-margin">{% trans "Dashboard" %}</h3>
-            <h5>{% trans "An overview of active and past submissions and projects" %}</h5>
-        </div>
+    {% adminbar %}
+        {% slot header %}{% trans "Dashboard" %}{% endslot %}
+        {% slot sub_heading %}{% trans "An overview of active and past submissions and projects" %}{% endslot %}
+
         <div class="wrapper wrapper--cta-box">
-            <h4 class="heading heading--no-margin">{% trans "Submit a new application" %}</h4>
-            <h5 class="heading heading--normal">{% trans "Apply now for our open rounds" %}</h5>
+            <h3 class="text-xl mb-0">{% trans "Submit a new application" %}</h3>
+            <p class="mt-0 mb-4 text-fg-muted text-sm">{% trans "Apply now for our open rounds" %}</p>
             <a class="button button--primary" href="{% pageurl APPLY_SITE.root_page %}" class="button">{% trans "Apply" %}</a>
         </div>
-    </div>
-</div>
+    {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    <h3>{% trans "Your active submissions" %}</h3>
-    {% for submission in my_active_submissions %}
-        <div class="wrapper wrapper--status-bar-outer">
-            <div class="wrapper wrapper--status-bar-inner">
-                <div>
-                    <h5 class="heading heading--no-margin"><a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></h5>
-                    <h6 class="heading heading--no-margin heading--submission-meta"><span>{% trans "Submitted" %}:</span> {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}</h6>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium mb-4">
+        <h2 class="text-xl mb-2">
+            {% trans "Your active submissions" %}
+        </h2>
+        <div class="">
+            {% for submission in my_active_submissions %}
+                <div class="wrapper wrapper--status-bar-outer">
+                    <div class="wrapper wrapper--status-bar-inner">
+                        <div class="flex max-w-sm sm:max-w-lg flex-col gap-2 md:flex-row md:justify-between md:w-full md:max-w-none lg:flex-col lg:justify-start lg:w-auto lg:max-w-sm">
+                            <div>
+                                <h3 class="heading heading--no-margin text-base font-bold">
+                                    <a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">
+                                        {{ submission.title }}
+                                    </a>
+                                </h3>
+                                <p class="heading heading--no-margin text-fg-muted text-sm">
+                                    {% trans "Submitted" %}: {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}
+                                </p>
+                            </div>
+                            {% if request.user|has_edit_perm:submission %}
+                                <div>
+                                    <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
+                                        {% if submission.status == 'draft_proposal' %}
+                                            {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
+                                        {% else %}
+                                            <span class="whitespace-nowrap">
+                                                {% heroicon_mini "pencil-square" size=18 class="inline mr-1 align-text-bottom" aria_hidden=true %}
+                                                {% trans "Edit" %}
+                                            </span>
+                                        {% endif %}
+                                    </a>
+                                </div>
+                            {% endif %}
+
+                        </div>
+                        {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
+                    </div>
                 </div>
-                {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
-            </div>
-            {% if request.user|has_edit_perm:submission %}
-                <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
-                    {% if submission.status == 'draft_proposal' %}
-                        {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
-                    {% else %}
-                        {% trans "Edit" %}
-                    {% endif %}
-                </a>
-            {% endif %}
+            {% empty %}
+                {% trans "No active submissions" %}
+            {% endfor %}
         </div>
-    {% empty %}
-        {% trans "No active submissions" %}
-    {% endfor %}
-</div>
-
-{% if active_projects.count %}
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    <h3>{% trans "Your active projects" %}</h3>
-    {% render_table active_projects.table %}
-</div>
-{% endif %}
+    </div>
 
-{% if historical_submissions.count %}
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    <h3>{% trans "Submission history" %}</h3>
-    {% render_table historical_submissions.table %}
-</div>
-{% endif %}
+    {% if active_projects.count %}
+        <div class="wrapper wrapper--large wrapper--inner-space-medium mb-8">
+            <h2 class="text-xl mb-2">{% trans "Your active projects" %}</h2>
+            {% render_table active_projects.table %}
+        </div>
+    {% endif %}
 
-{% if historical_projects.count %}
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    <h3>{% trans "Project history" %}</h3>
-    {% render_table historical_projects.table %}
-</div>
-{% endif %}
+    {% if historical_submissions.count %}
+        <div class="wrapper wrapper--large wrapper--inner-space-medium mb-8">
+            <h2 class="text-xl mb-2">{% trans "Submission history" %}</h3>
+            {% render_table historical_submissions.table %}
+        </div>
+    {% endif %}
 
-{% endblock %}
+    {% if historical_projects.count %}
+        <div class="wrapper wrapper--large wrapper--inner-space-medium mb-8">
+            <h2 class="text-xl mb-2">{% trans "Project history" %}</h2>
+            {% render_table historical_projects.table %}
+        </div>
+    {% endif %}
 
-{% block extra_js %}
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/dashboard/templates/dashboard/community_dashboard.html b/hypha/apply/dashboard/templates/dashboard/community_dashboard.html
index 56296aca209d18ec11e63aa53067c496c1aa6d99..641de6d2603ee523c5b01462db4393b90a1e0b9a 100644
--- a/hypha/apply/dashboard/templates/dashboard/community_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/community_dashboard.html
@@ -1,6 +1,6 @@
 {% extends "base-apply.html" %}
 {% load render_table from django_tables2 %}
-{% load i18n static statusbar_tags workflow_tags wagtailcore_tags %}
+{% load i18n static statusbar_tags workflow_tags wagtailcore_tags heroicons %}
 
 {% block title %}{% trans "Dashboard" %}{% endblock %}
 
@@ -11,65 +11,85 @@
         {% slot sub_heading %}{% trans "An overview of active and past submissions" %}{% endslot %}
 
         <div class="wrapper wrapper--cta-box">
-            <h4 class="heading heading--no-margin">{% trans "Submit a new application" %}</h4>
-            <h5 class="heading heading--normal">{% trans "Apply now for our open rounds" %}</h5>
+            <h3 class="text-xl mb-0">{% trans "Submit a new application" %}</h3>
+            <p class="mt-0 mb-4 text-fg-muted text-sm">{% trans "Apply now for our open rounds" %}</p>
             <a class="button button--primary" href="{% pageurl APPLY_SITE.root_page %}" class="button">{% trans "Apply" %}</a>
         </div>
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
 
-    <div class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">
-            {% trans "Community review submissions" %} <span class="bg-blue-100 text-blue-800 text-sm font-medium mr-2 px-2.5 py-0.5 rounded dark:bg-blue-900 dark:text-blue-300">{{ my_community_review_count }}</span>
-        </h4>
+        <div class="wrapper wrapper--bottom-space">
+            <h2 class="text-xl mb-2">
+                {% trans "Community review submissions" %} <span class="bg-blue-100 text-blue-800 text-sm font-medium mr-2 px-2.5 py-0.5 rounded">{{ my_community_review_count }}</span>
+            </h2>
+
+            {% if my_community_review.data %}
+                {% render_table my_community_review %}
+            {% else %}
+                {% trans "No submissions" %}
+            {% endif %}
+        </div>
 
-        {% if my_community_review.data %}
-            {% render_table my_community_review %}
-        {% else %}
-            {% trans "No submissions" %}
+        {% if my_reviewed.data %}
+            <div class="wrapper wrapper--bottom-space">
+                <h2 class="text-xl mb-2">
+                    {% trans "Your previous reviews" %}
+                </h2>
+                {% render_table my_reviewed %}
+            </div>
         {% endif %}
-    </div>
 
-    {% if my_reviewed.data %}
         <div class="wrapper wrapper--bottom-space">
-            <h4 class="heading heading--normal">{% trans "Your previous reviews" %}</h4>
-            {% render_table my_reviewed %}
-        </div>
-    {% endif %}
+            <h2 class="text-xl mb-2">
+                {% trans "Your active submissions" %}
+            </h2>
+            {% for submission in my_submissions %}
+                <div class="wrapper wrapper--status-bar-outer">
+                    <div class="wrapper wrapper--status-bar-inner">
+                        <div class="flex max-w-sm sm:max-w-lg flex-col gap-2 md:flex-row md:justify-between md:w-full md:max-w-none lg:flex-col lg:justify-start lg:w-auto lg:max-w-sm">
+                            <div>
+                                <h3 class="heading heading--no-margin text-base font-bold">
+                                    <a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">
+                                        {{ submission.title }}
+                                    </a>
+                                </h3>
+                                <p class="heading heading--no-margin text-fg-muted text-sm">
+                                    {% trans "Submitted" %}: {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}
+                                </p>
+                            </div>
+                            {% if request.user|has_edit_perm:submission %}
+                                <div>
+                                    <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
+                                        {% if submission.status == 'draft_proposal' %}
+                                            {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
+                                        {% else %}
+                                            <span class="whitespace-nowrap">
+                                                {% heroicon_mini "pencil-square" size=18 class="inline mr-1 align-text-bottom" aria_hidden=true %}
+                                                {% trans "Edit" %}
+                                            </span>
+                                        {% endif %}
+                                    </a>
+                                </div>
+                            {% endif %}
+                        </div>
 
-    <div class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "Your active submissions" %}</h4>
-        {% for submission in my_submissions %}
-            <div class="wrapper wrapper--status-bar-outer">
-                <div class="wrapper wrapper--status-bar-inner">
-                    <div>
-                        <h5 class="heading heading--no-margin"><a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></h5>
-                        <h6 class="heading heading--no-margin heading--submission-meta"><span>{% trans "Submitted" %}:</span> {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}</h6>
+                        {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
                     </div>
-                    {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
                 </div>
-                {% if request.user|has_edit_perm:submission %}
-                    <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
-                        {% if submission.status == 'draft_proposal' %}
-                            {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
-                        {% else %}
-                            {% trans "Edit" %}
-                        {% endif %}
-                    </a>
-                {% endif %}
+            {% empty %}
+                {% trans "No active submissions" %}
+            {% endfor %}
+        </div>
+
+        {% if my_inactive_submissions.data %}
+            <div class="wrapper wrapper--bottom-space">
+                <h2 class="text-xl mb-2">
+                    {% trans "Submission history" %}
+                </h2>
+                {% render_table my_inactive_submissions %}
             </div>
-        {% empty %}
-            {% trans "No active submissions" %}
-        {% endfor %}
+        {% endif %}
     </div>
 
-    {% if my_inactive_submissions.data %}
-        <div class="wrapper wrapper--bottom-space">
-            <h4 class="heading heading--normal">{% trans "Submission history" %}</h4>
-            {% render_table my_inactive_submissions %}
-        </div>
-    {% endif %}
-</div>
-
 {% endblock %}
diff --git a/hypha/apply/dashboard/templates/dashboard/contracting_dashboard.html b/hypha/apply/dashboard/templates/dashboard/contracting_dashboard.html
index d7825145169cc09bd953dc813ab1091e0051f0be..a382b38822cd77d49a028280610e5a2a916d30a5 100644
--- a/hypha/apply/dashboard/templates/dashboard/contracting_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/contracting_dashboard.html
@@ -5,39 +5,35 @@
 {% block title %}{% trans "Dashboard" %}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner admin-bar__inner--with-button">
-        {% block page_header %}
-            <h1 class="gamma heading heading--no-margin heading--bold">{% trans "Dashboard" %}</h1>
-        {% endblock %}
+    {% adminbar %}
+        {% slot header %}{% trans "Dashboard" %}{% endslot %}
+
         <a href="{% url 'wagtailadmin_home' %}" class="button button--primary button--arrow-pixels-white">
             {% trans "Apply admin" %}
             <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
         </a>
-    </div>
-</div>
+    {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% if paf_waiting_for_approval.count %}
-        {% include "dashboard/includes/paf_waiting_for_approval.html" with paf_waiting_for_approval=paf_waiting_for_approval %}
-    {% endif %}
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% if paf_waiting_for_approval.count %}
+            {% include "dashboard/includes/paf_waiting_for_approval.html" with paf_waiting_for_approval=paf_waiting_for_approval %}
+        {% endif %}
 
-    {% if paf_waiting_for_assignment.count %}
-     <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
-        {% render_table paf_waiting_for_assignment.table %}
-    </div>
-    {% endif %}
+        {% if paf_waiting_for_assignment.count %}
+            <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
+                <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
+                {% render_table paf_waiting_for_assignment.table %}
+            </div>
+        {% endif %}
 
-    {% if projects_in_contracting.count %}
-        {% include "dashboard/includes/projects_in_contracting.html" with projects_in_contracting=projects_in_contracting %}
-    {% endif %}
-</div>
+        {% if projects_in_contracting.count %}
+            {% include "dashboard/includes/projects_in_contracting.html" with projects_in_contracting=projects_in_contracting %}
+        {% endif %}
+    </div>
 {% endblock %}
 
 {% block extra_js %}
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
     <script src="{% static 'js/apply/tabs.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/dashboard/templates/dashboard/dashboard.html b/hypha/apply/dashboard/templates/dashboard/dashboard.html
index beb08b907d056ce16b8e02ecf7ec7ca9643975e2..006d7812ef70475f7c1f68212cc3a16be6086925 100644
--- a/hypha/apply/dashboard/templates/dashboard/dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/dashboard.html
@@ -22,111 +22,110 @@
         {% endif %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    <div class="wrapper wrapper--bottom-space">
-        <div class="stat-block">
-            <a href="#submissions-awaiting-review" class="stat-block__item border">
-                <p class="stat-block__number">{{ awaiting_reviews.count }}</p>
-                <p class="stat-block__text">{% trans "Submissions waiting for your review" %}</p>
-                {% if awaiting_reviews.count %}
-                    <div class="stat-block__view">{% trans "View" %}</div>
-                {% endif %}
-            </a>
-            <a href="#active-projects" class="stat-block__item border">
-                <p class="stat-block__number">{{ projects.count }}</p>
-                <p class="stat-block__text">{% trans "Live projects under your management" %}</p>
-                {% if projects.count %}
-                    <div class="stat-block__view">{% trans "View" %}</div>
-                {% endif %}
-            </a>
-            {% if not paf_waiting_for_approval.count is None%}
-            <a href="#paf-awaiting-approval" class="stat-block__item border">
-                <p class="stat-block__number">{{ paf_waiting_for_approval.count }}</p>
-                <p class="stat-block__text">{% trans "Projects awaiting approval" %}</p>
-                {% if paf_waiting_for_approval.count %}
-                    <div class="stat-block__view">{% trans "View" %}</div>
-                {% endif %}
-            </a>
-            {% endif %}
-            <a href="#active-invoices" class="stat-block__item border">
-                <p class="stat-block__number">{{ active_invoices.count }}</p>
-                <p class="stat-block__text">{% trans "Requests for invoices requiring your attention" %}</p>
-                {% if active_invoices.count %}
-                    <div class="stat-block__view">{% trans "View" %}</div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        <div class="wrapper wrapper--bottom-space">
+            <div class="stat-block">
+                <a href="#submissions-awaiting-review" class="stat-block__item border">
+                    <p class="stat-block__number">{{ awaiting_reviews.count }}</p>
+                    <p class="stat-block__text">{% trans "Submissions waiting for your review" %}</p>
+                    {% if awaiting_reviews.count %}
+                        <div class="stat-block__view">{% trans "View" %}</div>
+                    {% endif %}
+                </a>
+                <a href="#active-projects" class="stat-block__item border">
+                    <p class="stat-block__number">{{ projects.count }}</p>
+                    <p class="stat-block__text">{% trans "Live projects under your management" %}</p>
+                    {% if projects.count %}
+                        <div class="stat-block__view">{% trans "View" %}</div>
+                    {% endif %}
+                </a>
+                {% if not paf_waiting_for_approval.count is None%}
+                    <a href="#paf-awaiting-approval" class="stat-block__item border">
+                        <p class="stat-block__number">{{ paf_waiting_for_approval.count }}</p>
+                        <p class="stat-block__text">{% trans "Projects awaiting approval" %}</p>
+                        {% if paf_waiting_for_approval.count %}
+                            <div class="stat-block__view">{% trans "View" %}</div>
+                        {% endif %}
+                    </a>
                 {% endif %}
-            </a>
+                <a href="#active-invoices" class="stat-block__item border">
+                    <p class="stat-block__number">{{ active_invoices.count }}</p>
+                    <p class="stat-block__text">{% trans "Requests for invoices requiring your attention" %}</p>
+                    {% if active_invoices.count %}
+                        <div class="stat-block__view">{% trans "View" %}</div>
+                    {% endif %}
+                </a>
+            </div>
         </div>
-    </div>
 
-    <div id="submissions-awaiting-review" class="wrapper wrapper--bottom-space">
-        {% include "dashboard/includes/submissions-waiting-for-review.html" with in_review_count=awaiting_reviews.count my_review=awaiting_reviews.table display_more=awaiting_reviews.display_more active_statuses_filter=awaiting_reviews.active_statuses_filter %}
-    </div>
+        <div id="submissions-awaiting-review" class="wrapper wrapper--bottom-space">
+            {% include "dashboard/includes/submissions-waiting-for-review.html" with in_review_count=awaiting_reviews.count my_review=awaiting_reviews.table display_more=awaiting_reviews.display_more active_statuses_filter=awaiting_reviews.active_statuses_filter %}
+        </div>
 
-    {% if my_flagged.table.data %}
-    <div id="submissions-flagged" class="wrapper wrapper--bottom-space">
-        {% include "dashboard/includes/flagged.html" with my_flagged=my_flagged.table display_more=my_flagged.display_more %}
-    </div>
-    {% endif %}
+        {% if my_flagged.table.data %}
+            <div id="submissions-flagged" class="wrapper wrapper--bottom-space">
+                {% include "dashboard/includes/flagged.html" with my_flagged=my_flagged.table display_more=my_flagged.display_more %}
+            </div>
+        {% endif %}
+
+        {% if rounds.closed or rounds.open %}
+            {% include "funds/includes/round-block.html" with can_export=can_export closed_rounds=rounds.closed open_rounds=rounds.open title="Your rounds and labs" page_type='dashboard' %}
+        {% endif %}
 
-    {% if rounds.closed or rounds.open %}
-        {% include "funds/includes/round-block.html" with closed_rounds=rounds.closed open_rounds=rounds.open title="Your rounds and labs" page_type='dashboard' %}
-    {% endif %}
+        {% if paf_waiting_for_approval.count %}
+            {% include "dashboard/includes/paf_waiting_for_approval.html" with paf_waiting_for_approval=paf_waiting_for_approval %}
+        {% endif %}
 
-    {% if paf_waiting_for_approval.count %}
-        {% include "dashboard/includes/paf_waiting_for_approval.html" with paf_waiting_for_approval=paf_waiting_for_approval %}
-    {% endif %}
+        {% if paf_waiting_for_assignment.count %}
+            <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
+                <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
+                {% render_table paf_waiting_for_assignment.table %}
+            </div>
+        {% endif %}
 
-    {% if paf_waiting_for_assignment.count %}
-     <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
-        {% render_table paf_waiting_for_assignment.table %}
-    </div>
-    {% endif %}
+        {% if projects.table.data %}
+            <div id="active-projects" class="wrapper wrapper--bottom-space">
+                {% trans "Your projects" as project_heading %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=projects.filterset filter_action=projects.url search_term=search_term search_action=projects.url search_placeholder="projects" use_search=True use_batch_actions=False heading="Your projects" %}
+                {% render_table projects.table %}
 
-    {% if projects.table.data %}
-    <div id="active-projects" class="wrapper wrapper--bottom-space">
-        {% trans "Your projects" as project_heading %}
-        {% include "funds/includes/table_filter_and_search.html" with filter=projects.filterset filter_action=projects.url search_term=search_term search_action=projects.url search_placeholder="projects" use_search=True use_batch_actions=False heading="Your projects" %}
-        {% render_table projects.table %}
+                {% if projects.display_more %}
+                    <div class="all-submissions-table__more">
+                        <a href="{{ projects.url }}?lead={{ request.user.pk }}">{% trans "Show all" %}</a>
+                    </div>
+                {% endif %}
 
-        {% if projects.display_more %}
-        <div class="all-submissions-table__more">
-            <a href="{{ projects.url }}?lead={{ request.user.pk }}">{% trans "Show all" %}</a>
-        </div>
+            </div>
         {% endif %}
 
-    </div>
-    {% endif %}
+        {% if active_invoices.count %}
+            <div id="active-invoices" class="wrapper wrapper--bottom-space">
+                <h4 class="heading heading--normal">{% trans "Active Invoices" %}</h4>
+                {% render_table active_invoices.table %}
+            </div>
+        {% endif %}
 
-    {% if active_invoices.count %}
-    <div id="active-invoices" class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "Active Invoices" %}</h4>
-        {% render_table active_invoices.table %}
-    </div>
-    {% endif %}
+        {% if my_reviewed.table.data %}
+            <div class="wrapper wrapper--bottom-space">
+                {% trans "Your previous reviews" as review_heading %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=my_reviewed.filterset filter_action=my_reviewed.url search_term=search_term search_action=my_reviewed.url use_search=True use_batch_actions=False heading=review_heading %}
+                {% render_table my_reviewed.table %}
 
-    {% if my_reviewed.table.data %}
-        <div class="wrapper wrapper--bottom-space">
-            {% trans "Your previous reviews" as review_heading %}
-            {% include "funds/includes/table_filter_and_search.html" with filter=my_reviewed.filterset filter_action=my_reviewed.url search_term=search_term search_action=my_reviewed.url use_search=True use_batch_actions=False heading=review_heading %}
-            {% render_table my_reviewed.table %}
-
-            {% if my_reviewed.display_more %}
-                <div class="all-submissions-table__more">
-                    <a href="{{ my_reviewed.url }}?reviewers={{ request.user.pk }}">{% trans "Show all" %}</a>
-                </div>
-            {% endif %}
-        </div>
-    {% endif %}
+                {% if my_reviewed.display_more %}
+                    <div class="all-submissions-table__more">
+                        <a href="{{ my_reviewed.url }}?reviewers={{ request.user.pk }}">{% trans "Show all" %}</a>
+                    </div>
+                {% endif %}
+            </div>
+        {% endif %}
 
-</div>
+    </div>
 {% endblock %}
 
 {% block extra_js %}
     {{ my_reviewed.filterset.form.media.js }}
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
     <script src="{% static 'js/apply/tabs.js' %}"></script>
     <script src="{% static 'js/apply/flag.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/dashboard/templates/dashboard/finance_dashboard.html b/hypha/apply/dashboard/templates/dashboard/finance_dashboard.html
index a95b0f681f71ac5b595828d7ef9ef33471f52b9d..2b0e6f9a5dd3f98e8a49a34b22c8b55f9b5de6a8 100644
--- a/hypha/apply/dashboard/templates/dashboard/finance_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/finance_dashboard.html
@@ -5,48 +5,46 @@
 {% block title %}{% trans "Dashboard" %}{% endblock %}
 
 {% block content %}
-    <div class="admin-bar">
-        <div class="admin-bar__inner admin-bar__inner--with-button">
-            {% block page_header %}
-                <h1 class="gamma heading heading--no-margin heading--bold">{% trans "Dashboard" %}</h1>
-            {% endblock %}
-            <a href="{% url 'wagtailadmin_home' %}" class="button button--primary button--arrow-pixels-white">
-                {% trans "Apply admin" %}
-                <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-            </a>
-        </div>
-    </div>
+
+    {% adminbar %}
+        {% slot header %}{% trans "Dashboard" %}{% endslot %}
+        <a href="{% url 'wagtailadmin_home' %}" class="button button--primary button--arrow-pixels-white">
+            {% trans "Apply admin" %}
+            <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+        </a>
+    {% endadminbar %}
+
     <div class="wrapper wrapper--large wrapper--inner-space-medium">
         <div class="wrapper wrapper--bottom-space"
-            role="tablist" aria-label="Invoice Tabs"
-            x-data="{ tab: '{% trans "Active" %}' }"
+             role="tablist" aria-label="Invoice Tabs"
+             x-data="{ tab: '{% trans "Active" %}' }"
         >
             <section class="section section--with-options">
                 <h4 class="heading heading--normal heading--no-margin">{% trans 'Invoices' %} </h4>
                 <nav>
                     <a class="tab__item tab__item--alt"
-                        role="tab"
-                        href="#"
-                        id="tab-invoices-active"
-                        aria-controls="panel-invoices-active"
-                        :class="{ 'tab__item--active': tab === '{% trans "Active" %}' }"
-                        @click.prevent="tab = '{% trans "Active" %}'"
+                       role="tab"
+                       href="#"
+                       id="tab-invoices-active"
+                       aria-controls="panel-invoices-active"
+                       :class="{ 'tab__item--active': tab === '{% trans "Active" %}' }"
+                       @click.prevent="tab = '{% trans "Active" %}'"
                     >{% trans "Active Invoices" %}</a>
                     <a class="tab__item tab__item--alt"
-                        role="tab"
-                        href="#"
-                        id="tab-invoices-for-approval"
-                        aria-controls="panel-invoices-for-approval"
-                        :class="{ 'tab__item--active': tab === '{% trans "For Approval" %}' }"
-                        @click.prevent="tab = '{% trans "For Approval" %}'"
+                       role="tab"
+                       href="#"
+                       id="tab-invoices-for-approval"
+                       aria-controls="panel-invoices-for-approval"
+                       :class="{ 'tab__item--active': tab === '{% trans "For Approval" %}' }"
+                       @click.prevent="tab = '{% trans "For Approval" %}'"
                     >{% trans "For Approval" %}</a>
                     <a class="tab__item tab__item--alt"
-                        role="tab"
-                        href="#"
-                        id="tab-invoices-for-conversion"
-                        aria-controls="panel-invoices-for-conversion"
-                        :class="{ 'tab__item--active': tab === '{% trans "For Conversion" %}' }"
-                        @click.prevent="tab = '{% trans "For Conversion" %}'"
+                       role="tab"
+                       href="#"
+                       id="tab-invoices-for-conversion"
+                       aria-controls="panel-invoices-for-conversion"
+                       :class="{ 'tab__item--active': tab === '{% trans "For Conversion" %}' }"
+                       @click.prevent="tab = '{% trans "For Conversion" %}'"
                     >{% trans "For Conversion" %}</a>
                 </nav>
             </section>
@@ -56,7 +54,9 @@
                 {% if active_invoices.count %}
                     {% render_table active_invoices.table %}
                 {% else %}
-                    {% trans "No Active Invoices" %}
+                    <div class="border px-2 py-4">
+                        {% trans "No Active Invoices" %}
+                    </div>
                 {% endif %}
             </div>
 
@@ -65,7 +65,9 @@
                 {% if invoices_for_approval.count %}
                     {% render_table invoices_for_approval.table %}
                 {% else %}
-                    {% trans "No Invoices for Approval " %}
+                    <div class="border px-2 py-4">
+                        {% trans "No Invoices for Approval " %}
+                    </div>
                 {% endif %}
             </div>
 
@@ -74,22 +76,24 @@
                 {% if invoices_to_convert.count %}
                     {% render_table invoices_to_convert.table %}
                 {% else %}
-                    {% trans "No Invoices for Conversion " %}
+                    <div class="border px-2 py-4">
+                        {% trans "No Invoices for Conversion " %}
+                    </div>
                 {% endif %}
             </div>
 
         </div>
 
-    {% if paf_waiting_for_approval.count %}
-        {% include "dashboard/includes/paf_waiting_for_approval.html" with paf_waiting_for_approval=paf_waiting_for_approval %}
-    {% endif %}
+        {% if paf_waiting_for_approval.count %}
+            {% include "dashboard/includes/paf_waiting_for_approval.html" with paf_waiting_for_approval=paf_waiting_for_approval %}
+        {% endif %}
 
-    {% if paf_waiting_for_assignment.count %}
-        <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
-            <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
-            {% render_table paf_waiting_for_assignment.table %}
-        </div>
-    {% endif %}
+        {% if paf_waiting_for_assignment.count %}
+            <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
+                <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
+                {% render_table paf_waiting_for_assignment.table %}
+            </div>
+        {% endif %}
     </div>
 {% endblock %}
 
@@ -97,5 +101,4 @@
     {{ my_reviewed.filterset.form.media.js }}
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/dashboard/templates/dashboard/includes/flagged.html b/hypha/apply/dashboard/templates/dashboard/includes/flagged.html
index 41d3484f97cb846e5c94cb3f77c0cddceaa7e2ec..0badca3a3a724d9c1c504520033f0d3dae239f42 100644
--- a/hypha/apply/dashboard/templates/dashboard/includes/flagged.html
+++ b/hypha/apply/dashboard/templates/dashboard/includes/flagged.html
@@ -1,9 +1,9 @@
 {% load render_table from django_tables2 %}
 {% load i18n %}
 
-<h4 class="heading heading--normal">
+<h2 class="text-xl mb-2">
     {% trans "Your Flagged Submissions" %}
-</h4>
+</h2>
 
 {% if my_flagged.data %}
     {% render_table my_flagged %}
diff --git a/hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html b/hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html
index dc54fc8d2820dd39cf5b4e607cf5bc79cc5f6db1..0fdfcaa1a55c3617e701533744494a2ed0bd6301 100644
--- a/hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html
+++ b/hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html
@@ -3,23 +3,25 @@
 
 <div id="paf-awaiting-approval" class="wrapper wrapper--bottom-space" x-data="{ tab: '{% trans "Awaiting your approval" %}' }">
     <section class="section section--with-options">
-        <h4 class="heading heading--normal heading--no-margin">{% trans 'PAF waiting for approval' %}</h4>
+        <h2 class="text-xl mb-2">
+            {% trans 'PAF waiting for internal approval' %}
+        </h2>
         <nav>
             <a class="tab__item tab__item--alt"
-                role="tab"
-                href="#"
-                id="tab-paf-awaiting"
-                aria-controls="panel-paf-awaiting"
-                :class="{ 'tab__item--active': tab === '{% trans "Awaiting your approval" %}' }"
-                @click.prevent="tab = '{% trans "Awaiting your approval" %}'"
+               role="tab"
+               href="#"
+               id="tab-paf-awaiting"
+               aria-controls="panel-paf-awaiting"
+               :class="{ 'tab__item--active': tab === '{% trans "Awaiting your approval" %}' }"
+               @click.prevent="tab = '{% trans "Awaiting your approval" %}'"
             >{% trans "Awaiting your approval" %}</a>
             <a class="tab__item tab__item--alt"
-                role="tab"
-                href="#"
-                id="tab-paf-approved"
-                aria-controls="panel-paf-approved"
-                :class="{ 'tab__item--active': tab === '{% trans "Approved by you" %}' }"
-                @click.prevent="tab = '{% trans "Approved by you" %}'"
+               role="tab"
+               href="#"
+               id="tab-paf-approved"
+               aria-controls="panel-paf-approved"
+               :class="{ 'tab__item--active': tab === '{% trans "Approved by you" %}' }"
+               @click.prevent="tab = '{% trans "Approved by you" %}'"
             >{% trans "Approved by you" %}</a>
         </nav>
     </section>
@@ -28,14 +30,18 @@
         {% if paf_waiting_for_approval.awaiting_your_approval.count %}
             {% render_table paf_waiting_for_approval.awaiting_your_approval.table %}
         {% else %}
-            {% trans "You have approved all PAFs, no PAF is waiting for your Approval " %}
+            <div class="border px-2 py-4">
+                {% trans "You have approved all PAFs, no PAF is waiting for your Approval " %}
+            </div>
         {% endif %}
     </div>
     <div x-show="tab === '{% trans "Approved by you" %}'" role="tabpanel" tabindex="0" aria-labelledby="tab-paf-approved" id="panel-paf-approved">
         {% if paf_waiting_for_approval.approved_by_you.count %}
             {% render_table paf_waiting_for_approval.approved_by_you.table %}
         {% else %}
-            {% trans "No PAF is approved by you yet " %}
+            <div class="border px-2 py-4">
+                {% trans "No PAF is approved by you yet " %}
+            </div>
         {% endif %}
     </div>
 
diff --git a/hypha/apply/dashboard/templates/dashboard/includes/projects_in_contracting.html b/hypha/apply/dashboard/templates/dashboard/includes/projects_in_contracting.html
index e0a8c14e9f2989441c352f012aad3716b622ee35..157854bc4d86a69dacd30d4c51d0a1c40ee2dc49 100644
--- a/hypha/apply/dashboard/templates/dashboard/includes/projects_in_contracting.html
+++ b/hypha/apply/dashboard/templates/dashboard/includes/projects_in_contracting.html
@@ -3,23 +3,25 @@
 
 <div id="projects-in-contracting" class="wrapper wrapper--bottom-space" x-data="{ tab: '{% trans "Waiting for contract" %}' }">
     <section class="section section--with-options">
-        <h4 class="heading heading--normal heading--no-margin">{% trans 'Projects in contracting' %}</h4>
+        <h2 class="text-xl mb-2">
+            {% trans 'Projects in contracting' %}
+        </h2>
         <nav>
             <a class="tab__item tab__item--alt"
-                role="tab"
-                href="#"
-                id="tab-contract-awaiting"
-                aria-controls="panel-contract-awaiting"
-                :class="{ 'tab__item--active': tab === '{% trans "Waiting for contract" %}' }"
-                @click.prevent="tab = '{% trans "Waiting for contract" %}'"
+               role="tab"
+               href="#"
+               id="tab-contract-awaiting"
+               aria-controls="panel-contract-awaiting"
+               :class="{ 'tab__item--active': tab === '{% trans "Waiting for contract" %}' }"
+               @click.prevent="tab = '{% trans "Waiting for contract" %}'"
             >{% trans "Waiting for contract" %}</a>
             <a class="tab__item tab__item--alt"
-                role="tab"
-                href="#"
-                id="tab-contract-approval"
-                aria-controls="panel-contract-approval"
-                :class="{ 'tab__item--active': tab === '{% trans "Waiting for contract approval" %}' }"
-                @click.prevent="tab = '{% trans "Waiting for contract approval" %}'"
+               role="tab"
+               href="#"
+               id="tab-contract-approval"
+               aria-controls="panel-contract-approval"
+               :class="{ 'tab__item--active': tab === '{% trans "Waiting for contract approval" %}' }"
+               @click.prevent="tab = '{% trans "Waiting for contract approval" %}'"
             >{% trans "Waiting for contract approval" %}</a>
         </nav>
     </section>
@@ -28,14 +30,18 @@
         {% if projects_in_contracting.waiting_for_contract.count %}
             {% render_table projects_in_contracting.waiting_for_contract.table %}
         {% else %}
-            {% trans "No project is waiting for contract" %}
+            <div class="border px-2 py-4">
+                {% trans "No project is waiting for contract" %}
+            </div>
         {% endif %}
     </div>
     <div x-show="tab === '{% trans "Waiting for contract approval" %}'" role="tabpanel" tabindex="0" aria-labelledby="tab-contract-approval" id="panel-contract-approval">
         {% if projects_in_contracting.waiting_for_contract_approval.count %}
             {% render_table projects_in_contracting.waiting_for_contract_approval.table %}
         {% else %}
-            {% trans "No project is waiting for contract approval " %}
+            <div class="border px-2 py-4">
+                {% trans "No project is waiting for contract approval " %}
+            </div>
         {% endif %}
     </div>
 
diff --git a/hypha/apply/dashboard/templates/dashboard/includes/submissions-waiting-for-review.html b/hypha/apply/dashboard/templates/dashboard/includes/submissions-waiting-for-review.html
index 416a634090133bad114389e75bb744cbc2559f17..e7162005a568f21563a8c52e482e4d7d3ef761b5 100644
--- a/hypha/apply/dashboard/templates/dashboard/includes/submissions-waiting-for-review.html
+++ b/hypha/apply/dashboard/templates/dashboard/includes/submissions-waiting-for-review.html
@@ -1,9 +1,9 @@
 {% load render_table from django_tables2 %}
 {% load i18n %}
 
-<h4 class="text-xl font-medium mb-1">
-    {% trans "Submissions waiting for your review" %} <span class="bg-blue-100 text-blue-800 text-sm font-medium mr-2 px-2.5 py-0.5 rounded dark:bg-blue-900 dark:text-blue-300">{{ in_review_count }}</span>
-</h4>
+<h2 class="text-xl mb-2">
+    {% trans "Submissions waiting for your review" %} <span class="bg-blue-100 text-blue-800 text-sm font-medium mr-2 px-2.5 py-0.5 rounded">{{ in_review_count }}</span>
+</h2>
 
 {% if my_review.data %}
     {% render_table my_review %}
diff --git a/hypha/apply/dashboard/templates/dashboard/partner_dashboard.html b/hypha/apply/dashboard/templates/dashboard/partner_dashboard.html
index ff466c71f6e1b3ade529392bee1031583f34747f..8ff142e2a610935c9566bd4a47a87a3e9aa56ac2 100644
--- a/hypha/apply/dashboard/templates/dashboard/partner_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/partner_dashboard.html
@@ -13,52 +13,52 @@
 
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
 
-    <div class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">
-            {% trans "You are the partner of these submissions" %} <span class="bg-blue-100 text-blue-800 text-sm font-medium mr-2 px-2.5 py-0.5 rounded dark:bg-blue-900 dark:text-blue-300">{{ partner_submissions_count }}</span>
-        </h4>
+        <div class="wrapper wrapper--bottom-space">
+            <h4 class="heading heading--normal">
+                {% trans "You are the partner of these submissions" %} <span class="bg-blue-100 text-blue-800 text-sm font-medium mr-2 px-2.5 py-0.5 rounded dark:bg-blue-900 dark:text-blue-300">{{ partner_submissions_count }}</span>
+            </h4>
 
-        {% if partner_submissions.data %}
-            {% render_table partner_submissions %}
-        {% else %}
-            {% trans "No submissions" %}
-        {% endif %}
-    </div>
+            {% if partner_submissions.data %}
+                {% render_table partner_submissions %}
+            {% else %}
+                {% trans "No submissions" %}
+            {% endif %}
+        </div>
 
-    <div class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "Your active submissions" %}</h4>
-        {% for submission in my_submissions %}
-            <div class="wrapper wrapper--status-bar-outer">
-                <div class="wrapper wrapper--status-bar-inner">
-                    <div>
-                        <h5 class="heading heading--no-margin"><a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></h5>
-                        <h6 class="heading heading--no-margin heading--submission-meta"><span>{% trans "Submitted" %}:</span> {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}</h6>
+        <div class="wrapper wrapper--bottom-space">
+            <h4 class="heading heading--normal">{% trans "Your active submissions" %}</h4>
+            {% for submission in my_submissions %}
+                <div class="wrapper wrapper--status-bar-outer">
+                    <div class="wrapper wrapper--status-bar-inner">
+                        <div>
+                            <h5 class="heading heading--no-margin"><a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></h5>
+                            <h6 class="heading heading--no-margin heading--submission-meta"><span>{% trans "Submitted" %}:</span> {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}</h6>
+                        </div>
+                        {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
                     </div>
-                    {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
+                    {% if request.user|has_edit_perm:submission %}
+                        <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
+                            {% if submission.status == 'draft_proposal' %}
+                                {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
+                            {% else %}
+                                {% trans "Edit" %}
+                            {% endif %}
+                        </a>
+                    {% endif %}
                 </div>
-                {% if request.user|has_edit_perm:submission %}
-                    <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
-                        {% if submission.status == 'draft_proposal' %}
-                            {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
-                        {% else %}
-                            {% trans "Edit" %}
-                        {% endif %}
-                    </a>
-                {% endif %}
+            {% empty %}
+                {% trans "No active submissions" %}
+            {% endfor %}
+        </div>
+
+        {% if my_inactive_submissions.data %}
+            <div class="wrapper wrapper--bottom-space">
+                <h4 class="heading heading--normal">{% trans "Submission history" %}</h4>
+                {% render_table my_inactive_submissions %}
             </div>
-        {% empty %}
-            {% trans "No active submissions" %}
-        {% endfor %}
+        {% endif %}
     </div>
 
-    {% if my_inactive_submissions.data %}
-        <div class="wrapper wrapper--bottom-space">
-            <h4 class="heading heading--normal">{% trans "Submission history" %}</h4>
-            {% render_table my_inactive_submissions %}
-        </div>
-    {% endif %}
-</div>
-
 {% endblock %}
diff --git a/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html b/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html
index 83011ccd6d71562e665964fe1f61abf8e1e5f5d6..1d6d0c05b667b8c308a190c3bc01c27d4cc8f564 100644
--- a/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html
@@ -9,81 +9,84 @@
 {% block title %}{% trans "Dashboard" %}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        {% block page_header %}
-            <h1 class="gamma heading heading--no-margin heading--bold">{% trans "Dashboard" %}</h1>
-        {% endblock %}
-    </div>
-</div>
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
+    {% adminbar %}
+        {% slot header %}{% trans "Dashboard" %}{% endslot %}
+    {% endadminbar %}
 
-    <div class="wrapper wrapper--bottom-space">
-        {% include "dashboard/includes/submissions-waiting-for-review.html" with in_review_count=awaiting_reviews.count my_review=awaiting_reviews.table display_more=awaiting_reviews.display_more active_statuses_filter=awaiting_reviews.active_statuses_filter %}
-    </div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
 
-    {% if my_flagged.table.data %}
-    <div id="submissions-flagged" class="wrapper wrapper--bottom-space">
-        {% include "dashboard/includes/flagged.html" with my_flagged=my_flagged.table display_more=my_flagged.display_more %}
-    </div>
-    {% endif %}
-
-    {% if my_reviewed.table.data %}
         <div class="wrapper wrapper--bottom-space">
+            {% include "dashboard/includes/submissions-waiting-for-review.html" with in_review_count=awaiting_reviews.count my_review=awaiting_reviews.table display_more=awaiting_reviews.display_more active_statuses_filter=awaiting_reviews.active_statuses_filter %}
+        </div>
 
-            {% trans "Your previous reviews" as review_heading %}
-            {% include "funds/includes/table_filter_and_search.html" with filter=my_reviewed.filterset filter_action=my_reviewed.url search_term=search_term search_action=my_reviewed.url use_search=True use_batch_actions=False heading=review_heading %}
-            {% render_table my_reviewed.table %}
+        {% if my_flagged.table.data %}
+            <div id="submissions-flagged" class="wrapper wrapper--bottom-space">
+                {% include "dashboard/includes/flagged.html" with my_flagged=my_flagged.table display_more=my_flagged.display_more %}
+            </div>
+        {% endif %}
 
-            {% if my_reviewed.display_more %}
-                <div class="all-submissions-table__more">
-                    <a href="{{ my_reviewed.url }}?reviewers={{ request.user.pk }}">{% trans "Show all" %}</a>
-                </div>
-            {% endif %}
-        </div>
-    {% endif %}
+        {% if my_reviewed.table.data %}
+            <div class="wrapper wrapper--bottom-space">
+
+                {% trans "Your previous reviews" as review_heading %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=my_reviewed.filterset filter_action=my_reviewed.url search_term=search_term search_action=my_reviewed.url use_search=True use_batch_actions=False heading=review_heading %}
+                {% render_table my_reviewed.table %}
 
-    {% if my_submissions %}
-    <div class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "Your active submissions" %}</h4>
-        {% for submission in my_submissions %}
-            <div class="wrapper wrapper--status-bar-outer">
-                <div class="wrapper wrapper--status-bar-inner">
-                    <div>
-                        <h5 class="heading heading--no-margin"><a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></h5>
-                        <h6 class="heading heading--no-margin heading--submission-meta"><span>{% trans "Submitted" %}:</span> {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}</h6>
+                {% if my_reviewed.display_more %}
+                    <div class="all-submissions-table__more">
+                        <a href="{{ my_reviewed.url }}?reviewers={{ request.user.pk }}">{% trans "Show all" %}</a>
                     </div>
-                    {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
-                </div>
-                {% if request.user|has_edit_perm:submission %}
-                    <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
-                        {% if submission.status == 'draft_proposal' %}
-                            {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
-                        {% else %}
-                            {% trans "Edit" %}
-                        {% endif %}
-                    </a>
                 {% endif %}
             </div>
-        {% endfor %}
-    </div>
-    {% endif %}
+        {% endif %}
 
-    {% if paf_waiting_for_assignment.count %}
-     <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "PAF waiting for assignee" %}</h4>
-        {% render_table paf_waiting_for_assignment.table %}
-    </div>
-    {% endif %}
+        {% if my_submissions %}
+            <div class="wrapper wrapper--bottom-space">
+                <h2 class="text-xl mb-2">
+                    {% trans "Your active submissions" %}
+                </h2>
+                {% for submission in my_submissions %}
+                    <div class="wrapper wrapper--status-bar-outer">
+                        <div class="wrapper wrapper--status-bar-inner">
+                            <div>
+                                <h5 class="heading heading--no-margin"><a class="link link--underlined" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></h5>
+                                <h6 class="heading heading--no-margin heading--submission-meta"><span>{% trans "Submitted" %}:</span> {{ submission.submit_time.date }} {% trans "by" %} {{ submission.user.get_full_name }}</h6>
+                            </div>
+                            {% status_bar submission.workflow submission.phase request.user css_class="status-bar--small" %}
+                        </div>
+                        {% if request.user|has_edit_perm:submission %}
+                            <a class="button button--primary" href="{% url 'funds:submissions:edit' submission.id %}">
+                                {% if submission.status == 'draft_proposal' %}
+                                    {% trans "Start your" %} {{ submission.stage }} {% trans "application" %}
+                                {% else %}
+                                    {% trans "Edit" %}
+                                {% endif %}
+                            </a>
+                        {% endif %}
+                    </div>
+                {% endfor %}
+            </div>
+        {% endif %}
 
-    {% if my_inactive_submissions.data %}
-        <div class="wrapper wrapper--bottom-space">
-            <h4 class="heading heading--normal">{% trans "Submission history" %}</h4>
-            {% render_table my_inactive_submissions %}
-        </div>
-    {% endif %}
-</div>
+        {% if paf_waiting_for_assignment.count %}
+            <div id="paf_waiting_for_assignment" class="wrapper wrapper--bottom-space">
+                <h2 class="text-xl mb-2">
+                    {% trans "PAF waiting for assignee" %}
+                </h2>
+                {% render_table paf_waiting_for_assignment.table %}
+            </div>
+        {% endif %}
+
+        {% if my_inactive_submissions.data %}
+            <div class="wrapper wrapper--bottom-space">
+                <h2 class="text-xl mb-2">
+                    {% trans "Submission history" %}
+                </h2>
+                {% render_table my_inactive_submissions %}
+            </div>
+        {% endif %}
+    </div>
 
 {% endblock %}
 
@@ -91,6 +94,5 @@
     {{ filter.form.media.js }}
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
     <script src="{% static 'js/apply/flag.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/dashboard/tests/test_views.py b/hypha/apply/dashboard/tests/test_views.py
index 869799bbe982ee100a7ecd9b01d3461cdb6592c3..980dd6dcce8fe87bba3372159cfd67153ebe0062 100644
--- a/hypha/apply/dashboard/tests/test_views.py
+++ b/hypha/apply/dashboard/tests/test_views.py
@@ -10,7 +10,7 @@ from hypha.apply.projects.models.payment import (
     RESUBMITTED,
     SUBMITTED,
 )
-from hypha.apply.projects.models.project import WAITING_FOR_APPROVAL
+from hypha.apply.projects.models.project import INTERNAL_APPROVAL
 from hypha.apply.projects.tests.factories import InvoiceFactory, ProjectFactory
 from hypha.apply.review.tests.factories import ReviewFactory, ReviewOpinionFactory
 from hypha.apply.users.tests.factories import (
@@ -26,14 +26,16 @@ from hypha.apply.utils.testing.tests import BaseViewTestCase
 
 class TestApplicantDashboard(BaseViewTestCase):
     user_factory = ApplicantFactory
-    url_name = 'dashboard:{}'
-    base_view_name = 'dashboard'
+    url_name = "dashboard:{}"
+    base_view_name = "dashboard"
 
     def test_can_access_dashboard_with_active(self):
-        application = ApplicationSubmissionFactory(user=self.user, form_data__title='Improve the internet')
+        application = ApplicationSubmissionFactory(
+            user=self.user, form_data__title="Improve the internet"
+        )
         response = self.get_page()
         self.assertContains(response, application.title)
-        self.assertNotContains(response, 'Submission history')
+        self.assertNotContains(response, "Submission history")
 
     def test_can_have_draft_titles_on_dashboard(self):
         submission = ApplicationSubmissionFactory(user=self.user)
@@ -43,58 +45,75 @@ class TestApplicantDashboard(BaseViewTestCase):
         response = self.get_page()
         self.assertNotContains(response, submission.title)
         self.assertContains(response, submission.from_draft().title)
-        self.assertNotContains(response, 'Submission history')
+        self.assertNotContains(response, "Submission history")
 
     def test_can_not_access_other_users_active(self):
-        application = ApplicationSubmissionFactory(form_data__title='Ruin the internet')
+        application = ApplicationSubmissionFactory(form_data__title="Ruin the internet")
         response = self.get_page()
         self.assertNotContains(response, application.title)
-        self.assertNotContains(response, 'Submission history')
+        self.assertNotContains(response, "Submission history")
 
     def test_gets_invite_if_invited_to_proposal(self):
         InvitedToProposalFactory(user=self.user, draft=True)
         response = self.get_page()
-        self.assertContains(response, 'Start your ')
+        self.assertContains(response, "Start your ")
 
     def test_no_invite_if_can_edit(self):
-        ApplicationSubmissionFactory(user=self.user, status='concept_more_info', workflow_stages=2)
+        ApplicationSubmissionFactory(
+            user=self.user, status="concept_more_info", workflow_stages=2
+        )
         response = self.get_page()
-        self.assertNotContains(response, 'Start your ')
-        self.assertContains(response, 'Edit', 1)
+        self.assertNotContains(response, "Start your ")
+        self.assertContains(response, "Edit", 1)
 
     def test_no_edit_if_in_review(self):
-        ApplicationSubmissionFactory(user=self.user, status='internal_review')
+        ApplicationSubmissionFactory(user=self.user, status="internal_review")
         response = self.get_page()
-        self.assertNotContains(response, 'Edit')
-        self.assertNotContains(response, 'Submission history')
+        self.assertNotContains(response, "Edit")
+        self.assertNotContains(response, "Submission history")
 
 
 class TestStaffDashboard(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'dashboard:{}'
-    base_view_name = 'dashboard'
+    url_name = "dashboard:{}"
+    base_view_name = "dashboard"
 
     def test_cannot_see_submission_in_determination_when_not_lead(self):
-        ApplicationSubmissionFactory(status='concept_review_discussion', workflow_stages=2, form_data__title='Reviewr')
+        ApplicationSubmissionFactory(
+            status="concept_review_discussion",
+            workflow_stages=2,
+            form_data__title="Reviewr",
+        )
         response = self.get_page()
-        self.assertNotContains(response, 'Reviewr')
+        self.assertNotContains(response, "Reviewr")
 
     def test_waiting_for_review_with_count(self):
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2, reviewers=[self.user]
+        )
         response = self.get_page()
-        self.assertContains(response, 'Submissions waiting for your review')
+        self.assertContains(response, "Submissions waiting for your review")
         self.assertContains(response, submission.title)
-        self.assertEqual(response.context['awaiting_reviews']['count'], 1)
+        self.assertEqual(response.context["awaiting_reviews"]["count"], 1)
 
     def test_waiting_for_review_after_agreement_is_empty(self):
         staff = StaffFactory()
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2, reviewers=[staff, self.user])
-        review = ReviewFactory(submission=submission, author__reviewer=staff, author__staff=True, recommendation_yes=True)
-        ReviewOpinionFactory(review=review, author__reviewer=self.user, opinion_agree=True)
-        response = self.get_page()
-        self.assertContains(response, 'Submissions waiting for your review')
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2, reviewers=[staff, self.user]
+        )
+        review = ReviewFactory(
+            submission=submission,
+            author__reviewer=staff,
+            author__staff=True,
+            recommendation_yes=True,
+        )
+        ReviewOpinionFactory(
+            review=review, author__reviewer=self.user, opinion_agree=True
+        )
+        response = self.get_page()
+        self.assertContains(response, "Submissions waiting for your review")
         self.assertContains(response, "Nice! You're all caught up.")
-        self.assertEqual(response.context['awaiting_reviews']['count'], 0)
+        self.assertEqual(response.context["awaiting_reviews"]["count"], 0)
 
     def test_active_invoices_with_no_project(self):
         response = self.get_page()
@@ -133,7 +152,7 @@ class TestStaffDashboard(BaseViewTestCase):
         self.assertNotContains(response, "Active Invoices")
 
     def test_unassigned_staff_cant_see_projects_awaiting_review_stats_or_table(self):
-        ProjectFactory(is_locked=False, status=WAITING_FOR_APPROVAL)
+        ProjectFactory(is_locked=False, status=INTERNAL_APPROVAL)
 
         response = self.get_page()
         self.assertNotContains(response, "Projects awaiting approval")
@@ -141,54 +160,60 @@ class TestStaffDashboard(BaseViewTestCase):
 
 class TestStaffDashboardWithWagtailAdminAccess(BaseViewTestCase):
     user_factory = StaffWithWagtailAdminAccessFactory
-    url_name = 'dashboard:{}'
-    base_view_name = 'dashboard'
+    url_name = "dashboard:{}"
+    base_view_name = "dashboard"
 
     def test_does_show_admin_button_to_staff_with_wagtail_admin_access(self):
         response = self.get_page()
-        self.assertContains(response, 'wagtail-admin-button')
+        self.assertContains(response, "wagtail-admin-button")
 
 
 class TestStaffDashboardWithoutWagtailAdminAccess(BaseViewTestCase):
     user_factory = StaffWithoutWagtailAdminAccessFactory
-    url_name = 'dashboard:{}'
-    base_view_name = 'dashboard'
+    url_name = "dashboard:{}"
+    base_view_name = "dashboard"
 
     def test_doesnt_show_admin_button_to_staff_without_wagtail_admin_access(self):
         response = self.get_page()
-        self.assertNotContains(response, 'wagtail-admin-button')
+        self.assertNotContains(response, "wagtail-admin-button")
 
 
 class TestReviewerDashboard(BaseViewTestCase):
     user_factory = ReviewerFactory
-    url_name = 'dashboard:{}'
-    base_view_name = 'dashboard'
+    url_name = "dashboard:{}"
+    base_view_name = "dashboard"
 
     def test_waiting_for_review_with_count(self):
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2, reviewers=[self.user]
+        )
         response = self.get_page()
-        self.assertContains(response, 'Submissions waiting for your review')
+        self.assertContains(response, "Submissions waiting for your review")
         self.assertContains(response, submission.title)
-        self.assertEqual(response.context['in_review_count'], 1)
+        self.assertEqual(response.context["in_review_count"], 1)
 
     def test_no_submissions_waiting_for_review(self):
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2, reviewers=[])
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2, reviewers=[]
+        )
         response = self.get_page()
         self.assertNotContains(response, submission.title)
-        self.assertEqual(response.context['in_review_count'], 0)
+        self.assertEqual(response.context["in_review_count"], 0)
 
     def test_submission_assigned_but_not_in_external_review_status(self):
-        submission = ApplicationSubmissionFactory(status='concept_review_discussion', workflow_stages=2, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="concept_review_discussion", workflow_stages=2, reviewers=[self.user]
+        )
         response = self.get_page()
         self.assertNotContains(response, submission.title)
-        self.assertEqual(response.context['in_review_count'], 0)
+        self.assertEqual(response.context["in_review_count"], 0)
 
 
 class TestAdminDashboard(BaseViewTestCase):
     user_factory = AdminFactory
-    url_name = 'dashboard:{}'
-    base_view_name = 'dashboard'
+    url_name = "dashboard:{}"
+    base_view_name = "dashboard"
 
     def test_does_show_admin_button_to_admins(self):
         response = self.get_page()
-        self.assertContains(response, 'wagtail-admin-button')
+        self.assertContains(response, "wagtail-admin-button")
diff --git a/hypha/apply/dashboard/urls.py b/hypha/apply/dashboard/urls.py
index 1c906f43b08660fb471cab4ddb5ead6a499067ec..b1d468c529155bf8de7029f58148735e12b38b66 100644
--- a/hypha/apply/dashboard/urls.py
+++ b/hypha/apply/dashboard/urls.py
@@ -2,8 +2,8 @@ from django.urls import path
 
 from .views import DashboardView
 
-app_name = 'dashboard'
+app_name = "dashboard"
 
 urlpatterns = [
-    path('', DashboardView.as_view(), name="dashboard"),
+    path("", DashboardView.as_view(), name="dashboard"),
 ]
diff --git a/hypha/apply/dashboard/views.py b/hypha/apply/dashboard/views.py
index 258bcb7d897f7ad4bbfa4c8f2e4030236af2342c..81a47dde41a94987175af78645249509d7322e42 100644
--- a/hypha/apply/dashboard/views.py
+++ b/hypha/apply/dashboard/views.py
@@ -10,6 +10,7 @@ from hypha.apply.funds.models import (
     ReviewerSettings,
     RoundsAndLabs,
 )
+from hypha.apply.funds.permissions import can_export_submissions
 from hypha.apply.funds.tables import (
     ReviewerSubmissionsTable,
     SubmissionFilterAndSearch,
@@ -21,7 +22,7 @@ from hypha.apply.funds.tables import (
 )
 from hypha.apply.projects.filters import ProjectListFilter
 from hypha.apply.projects.models import Invoice, PAFApprovals, Project, ProjectSettings
-from hypha.apply.projects.models.project import WAITING_FOR_APPROVAL
+from hypha.apply.projects.models.project import INTERNAL_APPROVAL
 from hypha.apply.projects.permissions import has_permission
 from hypha.apply.projects.tables import (
     InvoiceDashboardTable,
@@ -34,16 +35,19 @@ from hypha.apply.utils.views import ViewDispatcher
 class MySubmissionContextMixin:
     def get_context_data(self, **kwargs):
         submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
-        my_submissions = submissions.filter(
-            user=self.request.user
-        ).active().current().select_related('draft_revision')
-        my_submissions = [
-            submission.from_draft() for submission in my_submissions
-        ]
-
-        my_inactive_submissions = submissions.filter(user=self.request.user).inactive().current()
+        my_submissions = (
+            submissions.filter(user=self.request.user)
+            .active()
+            .current()
+            .select_related("draft_revision")
+        )
+        my_submissions = [submission.from_draft() for submission in my_submissions]
+
+        my_inactive_submissions = (
+            submissions.filter(user=self.request.user).inactive().current()
+        )
         my_inactive_submissions_table = ReviewerSubmissionsTable(
-            my_inactive_submissions, prefix='my-submissions-'
+            my_inactive_submissions, prefix="my-submissions-"
         )
 
         return super().get_context_data(
@@ -55,46 +59,63 @@ class MySubmissionContextMixin:
 
 class MyFlaggedMixin:
     def my_flagged(self, submissions):
-        submissions = submissions.flagged_by(self.request.user).order_by('-submit_time')
-        row_attrs = dict({'data-flag-type': 'user'}, **SummarySubmissionsTable._meta.row_attrs)
+        submissions = submissions.flagged_by(self.request.user).order_by("-submit_time")
+        row_attrs = dict(
+            {"data-flag-type": "user"}, **SummarySubmissionsTable._meta.row_attrs
+        )
 
         limit = 5
         return {
-            'table': SummarySubmissionsTable(submissions[:limit], prefix='my-flagged-', attrs={'class': 'all-submissions-table flagged-table'}, row_attrs=row_attrs),
-            'display_more': submissions.count() > limit,
+            "table": SummarySubmissionsTable(
+                submissions[:limit],
+                prefix="my-flagged-",
+                attrs={"class": "all-submissions-table flagged-table"},
+                row_attrs=row_attrs,
+            ),
+            "display_more": submissions.count() > limit,
         }
 
 
 class AdminDashboardView(MyFlaggedMixin, TemplateView):
-    template_name = 'dashboard/dashboard.html'
+    template_name = "dashboard/dashboard.html"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
         submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
-        context.update({
-            'active_invoices': self.active_invoices(),
-            'awaiting_reviews': self.awaiting_reviews(submissions),
-            'my_reviewed': self.my_reviewed(submissions),
-            'projects': self.projects(),
-            'paf_waiting_for_approval': self.paf_waiting_for_approval(),
-            'rounds': self.rounds(),
-            'my_flagged': self.my_flagged(submissions),
-            'paf_waiting_for_assignment': self.paf_waiting_for_approver_assignment(),
-        })
+        context.update(
+            {
+                "active_invoices": self.active_invoices(),
+                "awaiting_reviews": self.awaiting_reviews(submissions),
+                "can_export": can_export_submissions(self.request.user),
+                "my_reviewed": self.my_reviewed(submissions),
+                "projects": self.projects(),
+                "paf_waiting_for_approval": self.paf_waiting_for_approval(),
+                "rounds": self.rounds(),
+                "my_flagged": self.my_flagged(submissions),
+                "paf_waiting_for_assignment": self.paf_waiting_for_approver_assignment(),
+            }
+        )
 
         return context
 
     def awaiting_reviews(self, submissions):
-        submissions = submissions.in_review_for(self.request.user).order_by('-submit_time')
+        submissions = submissions.in_review_for(self.request.user).order_by(
+            "-submit_time"
+        )
         count = submissions.count()
 
         limit = 5
         return {
-            'active_statuses_filter': ''.join(f'&status={status}' for status in review_filter_for_user(self.request.user)),
-            'count': count,
-            'display_more': count > limit,
-            'table': SummarySubmissionsTableWithRole(submissions[:limit], prefix='my-review-'),
+            "active_statuses_filter": "".join(
+                f"&status={status}"
+                for status in review_filter_for_user(self.request.user)
+            ),
+            "count": count,
+            "display_more": count > limit,
+            "table": SummarySubmissionsTableWithRole(
+                submissions[:limit], prefix="my-review-"
+            ),
         }
 
     def active_invoices(self):
@@ -103,82 +124,100 @@ class AdminDashboardView(MyFlaggedMixin, TemplateView):
         ).in_progress()
 
         return {
-            'count': invoices.count(),
-            'table': InvoiceDashboardTable(invoices),
+            "count": invoices.count(),
+            "table": InvoiceDashboardTable(invoices),
         }
 
     def projects(self):
         projects = Project.objects.filter(lead=self.request.user).for_table()
 
         filterset = ProjectListFilter(
-            data=self.request.GET or None, request=self.request, queryset=projects)
+            data=self.request.GET or None, request=self.request, queryset=projects
+        )
 
         limit = 10
 
         return {
-            'count': projects.count(),
-            'filterset': filterset,
-            'table': ProjectsDashboardTable(projects[:limit]),
-            'display_more': projects.count() > limit,
-            'url': reverse('apply:projects:all'),
+            "count": projects.count(),
+            "filterset": filterset,
+            "table": ProjectsDashboardTable(projects[:limit]),
+            "display_more": projects.count() > limit,
+            "url": reverse("apply:projects:all"),
         }
 
     def paf_waiting_for_approver_assignment(self):
         project_settings = ProjectSettings.for_request(self.request)
 
         paf_approvals = PAFApprovals.objects.annotate(
-            roles_count=Count('paf_reviewer_role__user_roles')
-        ).filter(roles_count=len(list(self.request.user.groups.all())), approved=False, user__isnull=True)
+            roles_count=Count("paf_reviewer_role__user_roles")
+        ).filter(
+            roles_count=len(list(self.request.user.groups.all())),
+            approved=False,
+            user__isnull=True,
+        )
 
         for role in self.request.user.groups.all():
-            paf_approvals = paf_approvals.filter(paf_reviewer_role__user_roles__id=role.id)
+            paf_approvals = paf_approvals.filter(
+                paf_reviewer_role__user_roles__id=role.id
+            )
 
-        paf_approvals_ids = paf_approvals.values_list('id', flat=True)
-        projects = Project.objects.filter(paf_approvals__id__in=paf_approvals_ids).for_table()
+        paf_approvals_ids = paf_approvals.values_list("id", flat=True)
+        projects = Project.objects.filter(
+            paf_approvals__id__in=paf_approvals_ids
+        ).for_table()
 
         if project_settings.paf_approval_sequential:
             all_projects = list(projects)
             for project in all_projects:
-                matched_paf_approval = paf_approvals.filter(project=project).order_by(
-                    'paf_reviewer_role__sort_order').first()
+                matched_paf_approval = (
+                    paf_approvals.filter(project=project)
+                    .order_by("paf_reviewer_role__sort_order")
+                    .first()
+                )
                 if project.paf_approvals.filter(
                     paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order,
-                    approved=False).exists():
+                    approved=False,
+                ).exists():
                     projects = projects.exclude(id=project.id)
 
         return {
-            'count': projects.count(),
-            'table': ProjectsAssigneeDashboardTable(projects),
+            "count": projects.count(),
+            "table": ProjectsAssigneeDashboardTable(projects),
         }
 
     def paf_waiting_for_approval(self):
-        if not self.request.user.is_apply_staff or not PAFApprovals.objects.filter(
-            project__status=WAITING_FOR_APPROVAL,
-            user=self.request.user,
-        ).exists():
+        if (
+            not self.request.user.is_apply_staff
+            or not PAFApprovals.objects.filter(
+                project__status=INTERNAL_APPROVAL,
+                user=self.request.user,
+            ).exists()
+        ):
             return {
-                'count': None,
-                'awaiting_your_approval': {
-                    'count': None,
-                    'table': None,
+                "count": None,
+                "awaiting_your_approval": {
+                    "count": None,
+                    "table": None,
+                },
+                "approved_by_you": {
+                    "count": None,
+                    "table": None,
                 },
-                'approved_by_you': {
-                    'count': None,
-                    'table': None,
-                }
             }
 
-        waiting_paf_approval = Project.objects.waiting_for_approval().for_table()
+        waiting_paf_approval = Project.objects.internal_approval().for_table()
         project_settings = ProjectSettings.for_request(self.request)
         if project_settings.paf_approval_sequential:
             awaiting_user_approval = []
-            for waiting_project in waiting_paf_approval.filter(paf_approvals__approved=False):
+            for waiting_project in waiting_paf_approval.filter(
+                paf_approvals__approved=False
+            ):
                 permission, _ = has_permission(
-                    'paf_status_update',
+                    "paf_status_update",
                     self.request.user,
                     object=waiting_project,
                     raise_exception=False,
-                    request=self.request
+                    request=self.request,
                 )
                 if permission:
                     awaiting_user_approval.append(waiting_project)
@@ -193,53 +232,66 @@ class AdminDashboardView(MyFlaggedMixin, TemplateView):
         )
 
         return {
-            'count': waiting_paf_approval.count(),
-            'awaiting_your_approval': {
-                'count': len(awaiting_user_approval),
-                'table': ProjectsDashboardTable(data=awaiting_user_approval),
+            "count": len(awaiting_user_approval) + len(approved_by_user),
+            "awaiting_your_approval": {
+                "count": len(awaiting_user_approval),
+                "table": ProjectsDashboardTable(data=awaiting_user_approval),
+            },
+            "approved_by_you": {
+                "count": len(approved_by_user),
+                "table": ProjectsDashboardTable(data=approved_by_user),
             },
-            'approved_by_you': {
-                'count': len(approved_by_user),
-                'table': ProjectsDashboardTable(data=approved_by_user),
-            }
         }
 
     def my_reviewed(self, submissions):
         """Staff reviewer's reviewed submissions for 'Previous reviews' block"""
-        submissions = submissions.reviewed_by(self.request.user).order_by('-submit_time')
+        submissions = submissions.reviewed_by(self.request.user).order_by(
+            "-submit_time"
+        )
 
         limit = 5
         return {
-            'filterset': SubmissionFilterAndSearch(
-                data=self.request.GET or None, request=self.request, queryset=submissions),
-            'table': SummarySubmissionsTableWithRole(submissions[:limit], prefix='my-review-'),
-            'display_more': submissions.count() > limit,
-            'url': reverse('funds:submissions:list'),
+            "filterset": SubmissionFilterAndSearch(
+                data=self.request.GET or None,
+                request=self.request,
+                queryset=submissions,
+            ),
+            "table": SummarySubmissionsTableWithRole(
+                submissions[:limit], prefix="my-review-"
+            ),
+            "display_more": submissions.count() > limit,
+            "url": reverse("funds:submissions:list"),
         }
 
     def rounds(self):
         limit = 6
-        rounds = RoundsAndLabs.objects.with_progress().active().order_by('-end_date').by_lead(
-            self.request.user)
+        rounds = (
+            RoundsAndLabs.objects.with_progress()
+            .active()
+            .order_by("-end_date")
+            .by_lead(self.request.user)
+        )
         return {
-            'closed': rounds.closed()[:limit],
-            'open': rounds.open()[:limit],
+            "closed": rounds.closed()[:limit],
+            "open": rounds.open()[:limit],
         }
 
 
 class FinanceDashboardView(MyFlaggedMixin, TemplateView):
-    template_name = 'dashboard/finance_dashboard.html'
+    template_name = "dashboard/finance_dashboard.html"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
 
-        context.update({
-            'active_invoices': self.active_invoices(),
-            'invoices_for_approval': self.invoices_for_approval(),
-            'invoices_to_convert': self.invoices_to_convert(),
-            'paf_waiting_for_approval': self.paf_waiting_for_approval(),
-            'paf_waiting_for_assignment': self.paf_waiting_for_approver_assignment(),
-        })
+        context.update(
+            {
+                "active_invoices": self.active_invoices(),
+                "invoices_for_approval": self.invoices_for_approval(),
+                "invoices_to_convert": self.invoices_to_convert(),
+                "paf_waiting_for_approval": self.paf_waiting_for_approval(),
+                "paf_waiting_for_assignment": self.paf_waiting_for_approver_assignment(),
+            }
+        )
 
         return context
 
@@ -250,33 +302,48 @@ class FinanceDashboardView(MyFlaggedMixin, TemplateView):
             invoices = Invoice.objects.for_finance_1()
 
         return {
-            'count': invoices.count(),
-            'table': InvoiceDashboardTable(invoices),
+            "count": invoices.count(),
+            "table": InvoiceDashboardTable(invoices),
         }
 
     def paf_waiting_for_approver_assignment(self):
         project_settings = ProjectSettings.for_request(self.request)
 
         paf_approvals = PAFApprovals.objects.annotate(
-                roles_count=Count('paf_reviewer_role__user_roles')
-            ).filter(roles_count=len(list(self.request.user.groups.all())), approved=False, user__isnull=True)
+            roles_count=Count("paf_reviewer_role__user_roles")
+        ).filter(
+            roles_count=len(list(self.request.user.groups.all())),
+            approved=False,
+            user__isnull=True,
+        )
 
         for role in self.request.user.groups.all():
-            paf_approvals = paf_approvals.filter(paf_reviewer_role__user_roles__id=role.id)
+            paf_approvals = paf_approvals.filter(
+                paf_reviewer_role__user_roles__id=role.id
+            )
 
-        paf_approvals_ids = paf_approvals.values_list('id', flat=True)
-        projects = Project.objects.filter(paf_approvals__id__in=paf_approvals_ids).for_table()
+        paf_approvals_ids = paf_approvals.values_list("id", flat=True)
+        projects = Project.objects.filter(
+            paf_approvals__id__in=paf_approvals_ids
+        ).for_table()
 
         if project_settings.paf_approval_sequential:
             all_projects = list(projects)
             for project in all_projects:
-                matched_paf_approval = paf_approvals.filter(project=project).order_by('paf_reviewer_role__sort_order').first()
-                if project.paf_approvals.filter(paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order, approved=False).exists():
+                matched_paf_approval = (
+                    paf_approvals.filter(project=project)
+                    .order_by("paf_reviewer_role__sort_order")
+                    .first()
+                )
+                if project.paf_approvals.filter(
+                    paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order,
+                    approved=False,
+                ).exists():
                     projects = projects.exclude(id=project.id)
 
         return {
-            'count': projects.count(),
-            'table': ProjectsAssigneeDashboardTable(projects),
+            "count": projects.count(),
+            "table": ProjectsAssigneeDashboardTable(projects),
         }
 
     def invoices_for_approval(self):
@@ -285,51 +352,53 @@ class FinanceDashboardView(MyFlaggedMixin, TemplateView):
         else:
             invoices = Invoice.objects.approved_by_staff()
 
-        return {
-            'count': invoices.count(),
-            'table': InvoiceDashboardTable(invoices)
-        }
+        return {"count": invoices.count(), "table": InvoiceDashboardTable(invoices)}
 
     def invoices_to_convert(self):
         if settings.INVOICE_EXTENDED_WORKFLOW and self.request.user.is_finance_level_1:
             return {
-                'count': None,
-                'table': None,
+                "count": None,
+                "table": None,
             }
         invoices = Invoice.objects.waiting_to_convert()
         return {
-            'count': invoices.count(),
-            'table': InvoiceDashboardTable(invoices),
+            "count": invoices.count(),
+            "table": InvoiceDashboardTable(invoices),
         }
 
     def paf_waiting_for_approval(self):
-        if not self.request.user.is_finance or not PAFApprovals.objects.filter(
-            project__status=WAITING_FOR_APPROVAL,
-            user=self.request.user,
-        ).exists():
+        if (
+            not self.request.user.is_finance
+            or not PAFApprovals.objects.filter(
+                project__status=INTERNAL_APPROVAL,
+                user=self.request.user,
+            ).exists()
+        ):
             return {
-                'count': None,
-                'awaiting_your_approval': {
-                    'count': None,
-                    'table': None,
+                "count": None,
+                "awaiting_your_approval": {
+                    "count": None,
+                    "table": None,
+                },
+                "approved_by_you": {
+                    "count": None,
+                    "table": None,
                 },
-                'approved_by_you': {
-                    'count': None,
-                    'table': None,
-                }
             }
 
-        waiting_paf_approval = Project.objects.waiting_for_approval().for_table()
+        waiting_paf_approval = Project.objects.internal_approval().for_table()
         project_settings = ProjectSettings.for_request(self.request)
         if project_settings.paf_approval_sequential:
             awaiting_user_approval = []
-            for waiting_project in waiting_paf_approval.filter(paf_approvals__approved=False):
+            for waiting_project in waiting_paf_approval.filter(
+                paf_approvals__approved=False
+            ):
                 permission, _ = has_permission(
-                    'paf_status_update',
+                    "paf_status_update",
                     self.request.user,
                     object=waiting_project,
                     raise_exception=False,
-                    request=self.request
+                    request=self.request,
                 )
                 if permission:
                     awaiting_user_approval.append(waiting_project)
@@ -344,170 +413,216 @@ class FinanceDashboardView(MyFlaggedMixin, TemplateView):
         )
 
         return {
-            'count': waiting_paf_approval.count(),
-            'awaiting_your_approval': {
-                'count': len(awaiting_user_approval),
-                'table': ProjectsDashboardTable(data=awaiting_user_approval),
+            "count": len(awaiting_user_approval) + len(approved_by_user),
+            "awaiting_your_approval": {
+                "count": len(awaiting_user_approval),
+                "table": ProjectsDashboardTable(data=awaiting_user_approval),
+            },
+            "approved_by_you": {
+                "count": len(approved_by_user),
+                "table": ProjectsDashboardTable(data=approved_by_user),
             },
-            'approved_by_you': {
-                'count': len(approved_by_user),
-                'table': ProjectsDashboardTable(data=approved_by_user),
-            }
         }
 
 
 class ReviewerDashboardView(MyFlaggedMixin, MySubmissionContextMixin, TemplateView):
-    template_name = 'dashboard/reviewer_dashboard.html'
+    template_name = "dashboard/reviewer_dashboard.html"
 
     def get(self, request, *args, **kwargs):
         # redirect to submissions list when we use the filter to search for something
         if len(request.GET):
-            query_str = '?'
+            query_str = "?"
             for key, value in request.GET.items():
-                query_str += key + '=' + value + '&'
-            return HttpResponseRedirect(reverse_lazy('funds:submissions:list') + query_str)
+                query_str += key + "=" + value + "&"
+            return HttpResponseRedirect(
+                reverse_lazy("funds:submissions:list") + query_str
+            )
 
         context = self.get_context_data(**kwargs)
         return render(request, self.template_name, context)
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        '''
+        """
         If use_settings variable is set for ReviewerSettings use settings
         parameters to filter submissions or return all as it
         was by default.
-        '''
+        """
         reviewer_settings = ReviewerSettings.for_request(self.request)
         if reviewer_settings.use_settings:
-            submissions = ApplicationSubmission.objects.for_reviewer_settings(self.request.user, reviewer_settings).for_table(self.request.user)
+            submissions = ApplicationSubmission.objects.for_reviewer_settings(
+                self.request.user, reviewer_settings
+            ).for_table(self.request.user)
         else:
-            submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
+            submissions = ApplicationSubmission.objects.all().for_table(
+                self.request.user
+            )
 
-        context.update({
-            'awaiting_reviews': self.awaiting_reviews(submissions),
-            'my_reviewed': self.my_reviewed(submissions),
-            'my_flagged': self.my_flagged(submissions),
-            'paf_waiting_for_assignment': self.paf_waiting_for_approver_assignment(),
-        })
+        context.update(
+            {
+                "awaiting_reviews": self.awaiting_reviews(submissions),
+                "my_reviewed": self.my_reviewed(submissions),
+                "my_flagged": self.my_flagged(submissions),
+                "paf_waiting_for_assignment": self.paf_waiting_for_approver_assignment(),
+            }
+        )
 
         return context
 
     def awaiting_reviews(self, submissions):
-        submissions = submissions.in_review_for(self.request.user).order_by('-submit_time')
+        submissions = submissions.in_review_for(self.request.user).order_by(
+            "-submit_time"
+        )
         count = submissions.count()
 
         limit = 5
         return {
-            'active_statuses_filter': ''.join(f'&status={status}' for status in review_filter_for_user(self.request.user)),
-            'count': count,
-            'display_more': count > limit,
-            'table': ReviewerSubmissionsTable(submissions[:limit], prefix='my-review-'),
+            "active_statuses_filter": "".join(
+                f"&status={status}"
+                for status in review_filter_for_user(self.request.user)
+            ),
+            "count": count,
+            "display_more": count > limit,
+            "table": ReviewerSubmissionsTable(submissions[:limit], prefix="my-review-"),
         }
 
     def paf_waiting_for_approver_assignment(self):
         project_settings = ProjectSettings.for_request(self.request)
 
         paf_approvals = PAFApprovals.objects.annotate(
-                roles_count=Count('paf_reviewer_role__user_roles')
-            ).filter(roles_count=len(list(self.request.user.groups.all())), approved=False, user__isnull=True)
+            roles_count=Count("paf_reviewer_role__user_roles")
+        ).filter(
+            roles_count=len(list(self.request.user.groups.all())),
+            approved=False,
+            user__isnull=True,
+        )
 
         for role in self.request.user.groups.all():
-            paf_approvals = paf_approvals.filter(paf_reviewer_role__user_roles__id=role.id)
+            paf_approvals = paf_approvals.filter(
+                paf_reviewer_role__user_roles__id=role.id
+            )
 
-        paf_approvals_ids = paf_approvals.values_list('id', flat=True)
-        projects = Project.objects.filter(paf_approvals__id__in=paf_approvals_ids).for_table()
+        paf_approvals_ids = paf_approvals.values_list("id", flat=True)
+        projects = Project.objects.filter(
+            paf_approvals__id__in=paf_approvals_ids
+        ).for_table()
 
         if project_settings.paf_approval_sequential:
             all_projects = list(projects)
             for project in all_projects:
-                matched_paf_approval = paf_approvals.filter(project=project).order_by('paf_reviewer_role__sort_order').first()
-                if project.paf_approvals.filter(paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order, approved=False).exists():
+                matched_paf_approval = (
+                    paf_approvals.filter(project=project)
+                    .order_by("paf_reviewer_role__sort_order")
+                    .first()
+                )
+                if project.paf_approvals.filter(
+                    paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order,
+                    approved=False,
+                ).exists():
                     projects = projects.exclude(id=project.id)
 
         return {
-            'count': projects.count(),
-            'table': ProjectsAssigneeDashboardTable(projects),
+            "count": projects.count(),
+            "table": ProjectsAssigneeDashboardTable(projects),
         }
 
     def my_reviewed(self, submissions):
         """Staff reviewer's reviewed submissions for 'Previous reviews' block"""
-        submissions = submissions.reviewed_by(self.request.user).order_by('-submit_time')
+        submissions = submissions.reviewed_by(self.request.user).order_by(
+            "-submit_time"
+        )
 
         limit = 5
         return {
-            'filterset': SubmissionReviewerFilterAndSearch(
-                data=self.request.GET or None, request=self.request, queryset=submissions),
-            'table': ReviewerSubmissionsTable(submissions[:limit], prefix='my-review-'),
-            'display_more': submissions.count() > limit,
-            'url': reverse('funds:submissions:list'),
+            "filterset": SubmissionReviewerFilterAndSearch(
+                data=self.request.GET or None,
+                request=self.request,
+                queryset=submissions,
+            ),
+            "table": ReviewerSubmissionsTable(submissions[:limit], prefix="my-review-"),
+            "display_more": submissions.count() > limit,
+            "url": reverse("funds:submissions:list"),
         }
 
 
 class PartnerDashboardView(MySubmissionContextMixin, TemplateView):
-    template_name = 'dashboard/partner_dashboard.html'
+    template_name = "dashboard/partner_dashboard.html"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
         submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
         # Submissions in which user added as partner
-        partner_submissions, partner_submissions_table = self.partner_submissions(self.request.user, submissions)
+        partner_submissions, partner_submissions_table = self.partner_submissions(
+            self.request.user, submissions
+        )
 
-        context.update({
-            'partner_submissions': partner_submissions_table,
-            'partner_submissions_count': partner_submissions.count(),
-        })
+        context.update(
+            {
+                "partner_submissions": partner_submissions_table,
+                "partner_submissions_count": partner_submissions.count(),
+            }
+        )
 
         return context
 
     def partner_submissions(self, user, submissions):
-        partner_submissions = submissions.partner_for(user).order_by('-submit_time')
-        partner_submissions_table = SubmissionsTable(partner_submissions, prefix='my-partnered-')
+        partner_submissions = submissions.partner_for(user).order_by("-submit_time")
+        partner_submissions_table = SubmissionsTable(
+            partner_submissions, prefix="my-partnered-"
+        )
 
         return partner_submissions, partner_submissions_table
 
 
 class ContractingDashboardView(MyFlaggedMixin, TemplateView):
-    template_name = 'dashboard/contracting_dashboard.html'
+    template_name = "dashboard/contracting_dashboard.html"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context.update({
-            'paf_waiting_for_approval': self.paf_waiting_for_approval(),
-            'projects_in_contracting': self.projects_in_contracting(),
-            'paf_waiting_for_assignment': self.paf_waiting_for_approver_assignment(),
-        })
+        context.update(
+            {
+                "paf_waiting_for_approval": self.paf_waiting_for_approval(),
+                "projects_in_contracting": self.projects_in_contracting(),
+                "paf_waiting_for_assignment": self.paf_waiting_for_approver_assignment(),
+            }
+        )
 
         return context
 
     def paf_waiting_for_approval(self):
-        if not self.request.user.is_contracting or not PAFApprovals.objects.filter(
-            project__status=WAITING_FOR_APPROVAL,
-            user=self.request.user,
-        ).exists():
+        if (
+            not self.request.user.is_contracting
+            or not PAFApprovals.objects.filter(
+                project__status=INTERNAL_APPROVAL,
+                user=self.request.user,
+            ).exists()
+        ):
             return {
-                'count': None,
-                'awaiting_your_approval': {
-                    'count': None,
-                    'table': None,
+                "count": None,
+                "awaiting_your_approval": {
+                    "count": None,
+                    "table": None,
+                },
+                "approved_by_you": {
+                    "count": None,
+                    "table": None,
                 },
-                'approved_by_you': {
-                    'count': None,
-                    'table': None,
-                }
             }
 
-        waiting_paf_approval = Project.objects.waiting_for_approval().for_table()
+        waiting_paf_approval = Project.objects.internal_approval().for_table()
         project_settings = ProjectSettings.for_request(self.request)
         if project_settings.paf_approval_sequential:
             awaiting_user_approval = []
-            for waiting_project in waiting_paf_approval.filter(paf_approvals__approved=False):
+            for waiting_project in waiting_paf_approval.filter(
+                paf_approvals__approved=False
+            ):
                 permission, _ = has_permission(
-                    'paf_status_update',
+                    "paf_status_update",
                     self.request.user,
                     object=waiting_project,
                     raise_exception=False,
-                    request=self.request
+                    request=self.request,
                 )
                 if permission:
                     awaiting_user_approval.append(waiting_project)
@@ -522,144 +637,188 @@ class ContractingDashboardView(MyFlaggedMixin, TemplateView):
         )
 
         return {
-            'count': waiting_paf_approval.count(),
-            'awaiting_your_approval': {
-                'count': len(awaiting_user_approval),
-                'table': ProjectsDashboardTable(data=awaiting_user_approval),
+            "count": len(awaiting_user_approval) + len(approved_by_user),
+            "awaiting_your_approval": {
+                "count": len(awaiting_user_approval),
+                "table": ProjectsDashboardTable(data=awaiting_user_approval),
+            },
+            "approved_by_you": {
+                "count": len(approved_by_user),
+                "table": ProjectsDashboardTable(data=approved_by_user),
             },
-            'approved_by_you': {
-                'count': len(approved_by_user),
-                'table': ProjectsDashboardTable(data=approved_by_user),
-            }
         }
 
     def paf_waiting_for_approver_assignment(self):
         project_settings = ProjectSettings.for_request(self.request)
 
         paf_approvals = PAFApprovals.objects.annotate(
-                roles_count=Count('paf_reviewer_role__user_roles')
-            ).filter(roles_count=len(list(self.request.user.groups.all())), approved=False, user__isnull=True)
+            roles_count=Count("paf_reviewer_role__user_roles")
+        ).filter(
+            roles_count=len(list(self.request.user.groups.all())),
+            approved=False,
+            user__isnull=True,
+        )
 
         for role in self.request.user.groups.all():
-            paf_approvals = paf_approvals.filter(paf_reviewer_role__user_roles__id=role.id)
+            paf_approvals = paf_approvals.filter(
+                paf_reviewer_role__user_roles__id=role.id
+            )
 
-        paf_approvals_ids = paf_approvals.values_list('id', flat=True)
-        projects = Project.objects.filter(paf_approvals__id__in=paf_approvals_ids).for_table()
+        paf_approvals_ids = paf_approvals.values_list("id", flat=True)
+        projects = Project.objects.filter(
+            paf_approvals__id__in=paf_approvals_ids
+        ).for_table()
 
         if project_settings.paf_approval_sequential:
             all_projects = list(projects)
             for project in all_projects:
-                matched_paf_approval = paf_approvals.filter(project=project).order_by('paf_reviewer_role__sort_order').first()
-                if project.paf_approvals.filter(paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order, approved=False).exists():
+                matched_paf_approval = (
+                    paf_approvals.filter(project=project)
+                    .order_by("paf_reviewer_role__sort_order")
+                    .first()
+                )
+                if project.paf_approvals.filter(
+                    paf_reviewer_role__sort_order__lt=matched_paf_approval.paf_reviewer_role.sort_order,
+                    approved=False,
+                ).exists():
                     projects = projects.exclude(id=project.id)
 
         return {
-            'count': projects.count(),
-            'table': ProjectsAssigneeDashboardTable(projects),
+            "count": projects.count(),
+            "table": ProjectsAssigneeDashboardTable(projects),
         }
 
     def projects_in_contracting(self):
         if not self.request.user.is_contracting:
             return {
-                'count': None,
-                'waiting_for_contract': {
-                    'count': None,
-                    'table': None,
+                "count": None,
+                "waiting_for_contract": {
+                    "count": None,
+                    "table": None,
+                },
+                "waiting_for_contract_approval": {
+                    "count": None,
+                    "table": None,
                 },
-                'waiting_for_contract_approval': {
-                    'count': None,
-                    'table': None,
-                }
             }
         projects_in_contracting = Project.objects.in_contracting()
-        waiting_for_contract = projects_in_contracting.filter(contracts__isnull=True).for_table()
-        waiting_for_contract_approval = projects_in_contracting.filter(contracts__isnull=False).for_table()
+        waiting_for_contract = projects_in_contracting.filter(
+            contracts__isnull=True
+        ).for_table()
+        waiting_for_contract_approval = projects_in_contracting.filter(
+            contracts__isnull=False
+        ).for_table()
         return {
-            'count': projects_in_contracting.count(),
-            'waiting_for_contract': {
-                'count': waiting_for_contract.count(),
-                'table': ProjectsDashboardTable(data=waiting_for_contract)
+            "count": projects_in_contracting.count(),
+            "waiting_for_contract": {
+                "count": waiting_for_contract.count(),
+                "table": ProjectsDashboardTable(data=waiting_for_contract),
+            },
+            "waiting_for_contract_approval": {
+                "count": waiting_for_contract_approval.count(),
+                "table": ProjectsDashboardTable(data=waiting_for_contract_approval),
             },
-            'waiting_for_contract_approval': {
-                'count': waiting_for_contract_approval.count(),
-                'table': ProjectsDashboardTable(data=waiting_for_contract_approval)
-            }
         }
 
 
 class CommunityDashboardView(MySubmissionContextMixin, TemplateView):
-    template_name = 'dashboard/community_dashboard.html'
+    template_name = "dashboard/community_dashboard.html"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
         submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
         # Submissions in community review phase
-        my_community_review, my_community_review = self.my_community_review(self.request.user, submissions)
+        my_community_review, my_community_review = self.my_community_review(
+            self.request.user, submissions
+        )
 
         # Partner's reviewed submissions
         my_reviewed = self.my_reviewed(self.request, submissions)
 
-        context.update({
-            'my_community_review': my_community_review,
-            'my_community_review_count': my_community_review.count(),
-            'my_reviewed': my_reviewed
-        })
+        context.update(
+            {
+                "my_community_review": my_community_review,
+                "my_community_review_count": my_community_review.count(),
+                "my_reviewed": my_reviewed,
+            }
+        )
 
         return context
 
     def my_community_review(self, user, submissions):
-        my_community_review = submissions.in_community_review(user).order_by('-submit_time')
-        my_community_review_table = ReviewerSubmissionsTable(my_community_review, prefix='my-community-review-')
+        my_community_review = submissions.in_community_review(user).order_by(
+            "-submit_time"
+        )
+        my_community_review_table = ReviewerSubmissionsTable(
+            my_community_review, prefix="my-community-review-"
+        )
 
         return my_community_review, my_community_review_table
 
     def my_reviewed(self, request, submissions):
-        return ReviewerSubmissionsTable(submissions.reviewed_by(request.user).order_by('-submit_time'), prefix='my-reviewed-')
+        return ReviewerSubmissionsTable(
+            submissions.reviewed_by(request.user).order_by("-submit_time"),
+            prefix="my-reviewed-",
+        )
 
 
 class ApplicantDashboardView(TemplateView):
-    template_name = 'dashboard/applicant_dashboard.html'
+    template_name = "dashboard/applicant_dashboard.html"
 
     def get_context_data(self, **kwargs):
         my_active_submissions = list(self.my_active_submissions(self.request.user))
 
         context = super().get_context_data(**kwargs)
-        context['my_active_submissions'] = my_active_submissions
-        context['active_projects'] = self.active_project_data()
-        context['historical_projects'] = self.historical_project_data()
-        context['historical_submissions'] = self.historical_submission_data()
+        context["my_active_submissions"] = my_active_submissions
+        context["active_projects"] = self.active_project_data()
+        context["historical_projects"] = self.historical_project_data()
+        context["historical_submissions"] = self.historical_submission_data()
         return context
 
     def active_project_data(self):
-        active_projects = Project.objects.filter(user=self.request.user).active().for_table()
+        active_projects = (
+            Project.objects.filter(user=self.request.user).active().for_table()
+        )
         return {
-            'count': active_projects.count(),
-            'table': ProjectsDashboardTable(data=active_projects),
+            "count": active_projects.count(),
+            "table": ProjectsDashboardTable(data=active_projects),
         }
 
     def my_active_submissions(self, user):
-        active_subs = ApplicationSubmission.objects.filter(
-            user=user,
-        ) .active().current().select_related('draft_revision')
+        active_subs = (
+            ApplicationSubmission.objects.filter(
+                user=user,
+            )
+            .active()
+            .current()
+            .select_related("draft_revision")
+        )
 
         for submission in active_subs:
             yield submission.from_draft()
 
     def historical_project_data(self):
-        historical_projects = Project.objects.filter(user=self.request.user).complete().for_table()
+        historical_projects = (
+            Project.objects.filter(user=self.request.user).complete().for_table()
+        )
         return {
-            'count': historical_projects.count(),
-            'table': ProjectsDashboardTable(data=historical_projects),
+            "count": historical_projects.count(),
+            "table": ProjectsDashboardTable(data=historical_projects),
         }
 
     def historical_submission_data(self):
-        historical_submissions = ApplicationSubmission.objects.filter(
-            user=self.request.user,
-        ).inactive().current().for_table(self.request.user)
+        historical_submissions = (
+            ApplicationSubmission.objects.filter(
+                user=self.request.user,
+            )
+            .inactive()
+            .current()
+            .for_table(self.request.user)
+        )
         return {
-            'count': historical_submissions.count(),
-            'table': SubmissionsTable(data=historical_submissions)
+            "count": historical_submissions.count(),
+            "table": SubmissionsTable(data=historical_submissions),
         }
 
 
diff --git a/hypha/apply/dashboard/wagtail_hooks.py b/hypha/apply/dashboard/wagtail_hooks.py
index 4925637e2db5d5f8dcf6604e776b645d1b11defd..28f6c0ba7f5b4beea65c7383ebb05b7f30203909 100644
--- a/hypha/apply/dashboard/wagtail_hooks.py
+++ b/hypha/apply/dashboard/wagtail_hooks.py
@@ -7,12 +7,12 @@ from wagtail.admin.menu import MenuItem
 from hypha.apply.home.models import ApplyHomePage
 
 
-@hooks.register('register_admin_menu_item')
+@hooks.register("register_admin_menu_item")
 def register_dashboard_menu_item():
     apply_home = ApplyHomePage.objects.first()
     return MenuItem(
-        'Apply Dashboard',
-        urljoin(apply_home.url, reverse('dashboard:dashboard', 'hypha.apply.urls')),
-        classnames='icon icon-arrow-left',
+        "Apply Dashboard",
+        urljoin(apply_home.url, reverse("dashboard:dashboard", "hypha.apply.urls")),
+        classnames="icon icon-arrow-left",
         order=100000,
     )
diff --git a/hypha/apply/determinations/admin.py b/hypha/apply/determinations/admin.py
index 571d185f67319773de81370f1080724990ff6868..167aa83f4b9f49e05edec2ff91525d882569d91e 100644
--- a/hypha/apply/determinations/admin.py
+++ b/hypha/apply/determinations/admin.py
@@ -22,17 +22,17 @@ class CloneView(CreateView, InstanceSpecificView):
 
 class DeterminationFormAdmin(ListRelatedMixin, ModelAdmin):
     model = DeterminationForm
-    menu_icon = 'form'
-    list_display = ('name', 'used_by')
+    menu_icon = "form"
+    list_display = ("name", "used_by")
     button_helper_class = ButtonsWithClone
     clone_view_class = CloneView
     create_view_class = CreateDeterminationFormView
     edit_view_class = EditDeterminationFormView
 
     related_models = [
-        ('applicationbasedeterminationform', 'application'),
-        ('roundbasedeterminationform', 'round'),
-        ('labbasedeterminationform', 'lab'),
+        ("applicationbasedeterminationform", "application"),
+        ("roundbasedeterminationform", "round"),
+        ("labbasedeterminationform", "lab"),
     ]
 
     def get_admin_urls_for_registration(self):
@@ -40,16 +40,16 @@ class DeterminationFormAdmin(ListRelatedMixin, ModelAdmin):
 
         urls += (
             re_path(
-                self.url_helper.get_action_url_pattern('clone'),
+                self.url_helper.get_action_url_pattern("clone"),
                 self.clone_view,
-                name=self.url_helper.get_action_url_name('clone')
+                name=self.url_helper.get_action_url_name("clone"),
             ),
         )
 
         return urls
 
     def clone_view(self, request, **kwargs):
-        kwargs.update(**{'model_admin': self})
+        kwargs.update(**{"model_admin": self})
         view_class = self.clone_view_class
         return view_class.as_view(**kwargs)(request)
 
diff --git a/hypha/apply/determinations/admin_views.py b/hypha/apply/determinations/admin_views.py
index 93e41c35ce2370100a232f540b165a298a012b0f..a363b493658f93b411c7686de4d5a657246a5ba4 100644
--- a/hypha/apply/determinations/admin_views.py
+++ b/hypha/apply/determinations/admin_views.py
@@ -4,14 +4,12 @@ from hypha.apply.utils.blocks import show_admin_form_error_messages
 
 
 class CreateDeterminationFormView(CreateView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
 
 
 class EditDeterminationFormView(EditView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/determinations/apps.py b/hypha/apply/determinations/apps.py
index 79bd7229563bc228ea12b92242b7778faf4a4088..97ed2ff3da519f9122655acfc06572835b5f750f 100644
--- a/hypha/apply/determinations/apps.py
+++ b/hypha/apply/determinations/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class DeterminationsConfig(AppConfig):
-    name = 'hypha.apply.determinations'
+    name = "hypha.apply.determinations"
diff --git a/hypha/apply/determinations/blocks.py b/hypha/apply/determinations/blocks.py
index 859a93945bebad19d08c102f28896f1abc3a193b..81e055a63f48658e14e5473ae4fe82ceaa75e7b4 100644
--- a/hypha/apply/determinations/blocks.py
+++ b/hypha/apply/determinations/blocks.py
@@ -19,51 +19,51 @@ class DeterminationMustIncludeFieldBlock(MustIncludeFieldBlock):
 
 
 class DeterminationBlock(DeterminationMustIncludeFieldBlock):
-    name = 'determination'
-    description = 'Overall determination'
+    name = "determination"
+    description = "Overall determination"
     field_class = forms.TypedChoiceField
 
     class Meta:
-        icon = 'pick'
+        icon = "pick"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['choices'] = DETERMINATION_CHOICES
+        kwargs["choices"] = DETERMINATION_CHOICES
         return kwargs
 
     def render(self, value, context=None):
-        data = int(context['data'])
+        data = int(context["data"])
         choices = dict(DETERMINATION_CHOICES)
-        context['data'] = choices[data]
+        context["data"] = choices[data]
         return super().render(value, context)
 
 
 class DeterminationMessageBlock(DeterminationMustIncludeFieldBlock):
-    name = 'message'
-    description = 'Determination message'
+    name = "message"
+    description = "Determination message"
     widget = RICH_TEXT_WIDGET
 
     class Meta:
-        icon = 'openquote'
-        template = 'stream_forms/render_unsafe_field.html'
+        icon = "openquote"
+        template = "stream_forms/render_unsafe_field.html"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['required'] = False
+        kwargs["required"] = False
         return kwargs
 
 
 class SendNoticeBlock(DeterminationMustIncludeFieldBlock):
-    name = 'send_notice'
-    description = 'Send Notice'
+    name = "send_notice"
+    description = "Send Notice"
 
     default_value = BooleanBlock(default=True, required=False)
 
     field_class = forms.BooleanField
 
     class Meta:
-        label = _('Send Notice')
-        icon = 'tick-inverse'
+        label = _("Send Notice")
+        icon = "tick-inverse"
 
     def get_searchable_content(self, value, data):
         return None
@@ -73,9 +73,9 @@ class SendNoticeBlock(DeterminationMustIncludeFieldBlock):
 
 
 class DeterminationCustomFormFieldsBlock(CustomFormFieldsBlock):
-    char = CharFieldBlock(group=_('Fields'))
-    text = TextFieldBlock(group=_('Fields'))
-    text_markup = RichTextBlock(group=_('Fields'), label=_('Paragraph'))
-    checkbox = CheckboxFieldBlock(group=_('Fields'))
-    dropdown = DropdownFieldBlock(group=_('Fields'))
+    char = CharFieldBlock(group=_("Fields"))
+    text = TextFieldBlock(group=_("Fields"))
+    text_markup = RichTextBlock(group=_("Fields"), label=_("Paragraph"))
+    checkbox = CheckboxFieldBlock(group=_("Fields"))
+    dropdown = DropdownFieldBlock(group=_("Fields"))
     required_blocks = DeterminationMustIncludeFieldBlock.__subclasses__()
diff --git a/hypha/apply/determinations/forms.py b/hypha/apply/determinations/forms.py
index ac7e3858ff533e739a10aa3855f2865eb608bb1a..9a337cf29164fa0bd1808bc12c4e50117550fedc 100644
--- a/hypha/apply/determinations/forms.py
+++ b/hypha/apply/determinations/forms.py
@@ -18,8 +18,8 @@ User = get_user_model()
 
 class BaseDeterminationForm:
     def __init__(self, *args, user, initial, action, edit=False, **kwargs):
-        if 'site' in kwargs:
-            site = kwargs.pop('site')
+        if "site" in kwargs:
+            site = kwargs.pop("site")
             self.form_settings = DeterminationFormSettings.for_site(site)
         try:
             initial.update(outcome=TRANSITION_DETERMINATION[action])
@@ -33,11 +33,11 @@ class BaseDeterminationForm:
 
     def clean_outcome(self):
         # Enforce outcome as an int
-        return int(self.cleaned_data['outcome'])
+        return int(self.cleaned_data["outcome"])
 
     def clean(self):
         cleaned_data = super().clean()
-        cleaned_data['data'] = {
+        cleaned_data["data"] = {
             key: value
             for key, value in cleaned_data.items()
             if key in self.data_fields()
@@ -47,11 +47,15 @@ class BaseDeterminationForm:
     def apply_form_settings(self, application_type, fields):
         for field in fields:
             try:
-                self.fields[field].label = getattr(self.form_settings, f'{application_type}_{field}_label')
+                self.fields[field].label = getattr(
+                    self.form_settings, f"{application_type}_{field}_label"
+                )
             except AttributeError:
                 pass
             try:
-                self.fields[field].help_text = getattr(self.form_settings, f'{application_type}_{field}_help_text')
+                self.fields[field].help_text = getattr(
+                    self.form_settings, f"{application_type}_{field}_help_text"
+                )
             except AttributeError:
                 pass
         return fields
@@ -60,7 +64,7 @@ class BaseDeterminationForm:
     def get_detailed_response(cls, saved_data):
         data = {}
         for group, title in cls.titles.items():
-            data.setdefault(group, {'title': title, 'questions': []})
+            data.setdefault(group, {"title": title, "questions": []})
 
         for name, field in cls.base_fields.items():
             try:
@@ -69,7 +73,7 @@ class BaseDeterminationForm:
                 # The field is not stored in the data
                 pass
             else:
-                data[field.group]['questions'].append((field.label, str(value)))
+                data[field.group]["questions"].append((field.label, str(value)))
 
         return data
 
@@ -79,25 +83,22 @@ class BaseNormalDeterminationForm(BaseDeterminationForm, forms.ModelForm):
 
     class Meta:
         model = Determination
-        fields = ['outcome', 'message', 'submission', 'author', 'data', 'send_notice']
+        fields = ["outcome", "message", "submission", "author", "data", "send_notice"]
 
         widgets = {
-            'submission': forms.HiddenInput(),
-            'author': forms.HiddenInput(),
-            'data': forms.HiddenInput(),
+            "submission": forms.HiddenInput(),
+            "author": forms.HiddenInput(),
+            "data": forms.HiddenInput(),
         }
 
         error_messages = {
             NON_FIELD_ERRORS: {
-                'unique_together': "You have already created a determination for this submission",
+                "unique_together": "You have already created a determination for this submission",
             }
         }
 
     def data_fields(self):
-        return [
-            field for field in self.fields
-            if field not in self._meta.fields
-        ]
+        return [field for field in self.fields if field not in self._meta.fields]
 
     def outcome_choices_for_phase(self, submission, user):
         """
@@ -105,8 +106,8 @@ class BaseNormalDeterminationForm(BaseDeterminationForm, forms.ModelForm):
         We need to filter out non-matching choices.
         i.e. a transition to In Review is not a determination, while Needs more info or Rejected are.
         """
-        available_choices = [('', _('-- No determination selected -- '))]
-        choices = dict(self.fields['outcome'].choices)
+        available_choices = [("", _("-- No determination selected -- "))]
+        choices = dict(self.fields["outcome"].choices)
 
         for transition_name in determination_actions(user, submission):
             try:
@@ -114,7 +115,9 @@ class BaseNormalDeterminationForm(BaseDeterminationForm, forms.ModelForm):
             except KeyError:
                 pass
             else:
-                available_choices.append((determination_type, choices[determination_type]))
+                available_choices.append(
+                    (determination_type, choices[determination_type])
+                )
         return available_choices
 
     def save(self, commit=True):
@@ -136,15 +139,17 @@ class BaseBatchDeterminationForm(BaseDeterminationForm, forms.Form):
 
     def data_fields(self):
         return [
-            field for field in self.fields
-            if field not in ['submissions', 'outcome', 'author', 'send_notice', 'message']
+            field
+            for field in self.fields
+            if field
+            not in ["submissions", "outcome", "author", "send_notice", "message"]
         ]
 
     def _post_clean(self):
-        submissions = self.cleaned_data['submissions'].undetermined()
+        submissions = self.cleaned_data["submissions"].undetermined()
         data = {
             field: self.cleaned_data[field]
-            for field in ['author', 'data', 'outcome', 'message']
+            for field in ["author", "data", "outcome", "message"]
         }
 
         self.instances = [
@@ -165,163 +170,168 @@ class BaseBatchDeterminationForm(BaseDeterminationForm, forms.Form):
 
 class BaseConceptDeterminationForm(forms.Form):
     titles = {
-        1: 'Feedback',
+        1: "Feedback",
     }
     outcome = forms.ChoiceField(
         choices=DETERMINATION_CHOICES,
-        label=_('Determination'),
-        help_text='Do you recommend requesting a proposal based on this concept note?',
+        label=_("Determination"),
+        help_text="Do you recommend requesting a proposal based on this concept note?",
     )
     outcome.group = 1
 
     message = RichTextField(
-        label=_('Determination message'),
-        help_text='This text will be e-mailed to the applicant. '
-        'Ones when text is first added and then every time the text is changed.'
+        label=_("Determination message"),
+        help_text="This text will be e-mailed to the applicant. "
+        "Ones when text is first added and then every time the text is changed.",
     )
     message.group = 1
 
     principles = RichTextField(
-        label=_('Goals and principles'),
-        help_text='Does the project contribute and/or have relevance to OTF goals and principles?'
-        'Are the goals and objectives of the project clear? Is it a technology research, development, or deployment '
-        'project? Can project’s effort be explained to external audiences and non-technical people? What problem are '
-        'they trying to solve and is the solution strategical or tactical? Is the project strategically or tactically '
-        'important to OTF’s goals, principles and rationale and other OTF efforts? Is it clear how? What tools, if any, '
-        'currently exist to solve this problem? How is this project different? Does the effort have any overlap with '
-        'existing OTF and/or USG supported projects? Is the overlap complementary or duplicative? If complementary, '
-        'can it be explained clearly? I.e. geographic focus, technology, organization profile, etc. What are the '
-        'liabilities and risks of taking on this project? I.e. political personalities, financial concerns, technical '
-        'controversial, etc. Is the organization or its members known within any relevant communities? If yes, what is '
-        'their reputation and why? What is the entity’s motivation and principles? What are the entity member(s) '
-        'motivations and principles? Where is the organization physically and legally based? If the organization is '
-        'distributed, where is the main point of contact? Does the organization have any conflicts of interest with '
-        'RFA, OTF, the Advisory Council, or other RFA-OTF projects? Is the project team an organization, community '
-        'or an individual?'
+        label=_("Goals and principles"),
+        help_text="Does the project contribute and/or have relevance to OTF goals and principles?"
+        "Are the goals and objectives of the project clear? Is it a technology research, development, or deployment "
+        "project? Can project’s effort be explained to external audiences and non-technical people? What problem are "
+        "they trying to solve and is the solution strategical or tactical? Is the project strategically or tactically "
+        "important to OTF’s goals, principles and rationale and other OTF efforts? Is it clear how? What tools, if any, "
+        "currently exist to solve this problem? How is this project different? Does the effort have any overlap with "
+        "existing OTF and/or USG supported projects? Is the overlap complementary or duplicative? If complementary, "
+        "can it be explained clearly? I.e. geographic focus, technology, organization profile, etc. What are the "
+        "liabilities and risks of taking on this project? I.e. political personalities, financial concerns, technical "
+        "controversial, etc. Is the organization or its members known within any relevant communities? If yes, what is "
+        "their reputation and why? What is the entity’s motivation and principles? What are the entity member(s) "
+        "motivations and principles? Where is the organization physically and legally based? If the organization is "
+        "distributed, where is the main point of contact? Does the organization have any conflicts of interest with "
+        "RFA, OTF, the Advisory Council, or other RFA-OTF projects? Is the project team an organization, community "
+        "or an individual?",
     )
     principles.group = 1
 
     technical = RichTextField(
-        label=_('Technical merit'),
-        help_text='Does the project clearly articulate the technical problem, solution, and approach? '
-        'Is the problem clearly justifiable? Does the project clearly articulate the technological objectives? '
-        'Is it an open or closed development project? I.e. Open source like Android or open source like Firefox OS '
-        'or closed like iOS. Does a similar technical solution already exist? If so, what are the differentiating '
-        'factors? Is the effort to sustain an existing technical approach? If so, are these considered successful? '
-        'Is the effort a new technical approach or improvement to an existing solution? If so, how? Is the effort '
-        'a completely new technical approach fostering new solutions in the field? Does the project’s technical '
-        'approach solve the problem? What are the limitations of the project’s technical approach and solution? '
-        'What are the unintended or illicit uses and consequences of this technology? Has the project identified '
-        'and/or developed any safeguards for these consequences?'
+        label=_("Technical merit"),
+        help_text="Does the project clearly articulate the technical problem, solution, and approach? "
+        "Is the problem clearly justifiable? Does the project clearly articulate the technological objectives? "
+        "Is it an open or closed development project? I.e. Open source like Android or open source like Firefox OS "
+        "or closed like iOS. Does a similar technical solution already exist? If so, what are the differentiating "
+        "factors? Is the effort to sustain an existing technical approach? If so, are these considered successful? "
+        "Is the effort a new technical approach or improvement to an existing solution? If so, how? Is the effort "
+        "a completely new technical approach fostering new solutions in the field? Does the project’s technical "
+        "approach solve the problem? What are the limitations of the project’s technical approach and solution? "
+        "What are the unintended or illicit uses and consequences of this technology? Has the project identified "
+        "and/or developed any safeguards for these consequences?",
     )
     technical.group = 1
 
     sustainable = RichTextField(
-        label=_('Reasonable, realistic and sustainable'),
-        help_text='Is the requested amount reasonable, realistic, and justified? If OTF doesn’t support the project, '
-        'is it likely to be realized? Does the project provide a detailed and realistic description of effort and '
-        'schedule? I.e. is the project capable of creating a work plan including objectives, activities, and '
-        'deliverable(s)? Does the project have a clear support model? Is there a known sustainability plan for the '
-        'future? What in-kind support or other revenue streams is the project receiving? I.e. volunteer developers, '
-        'service or product sales. Is the project receiving any financial support from the USG? Is this information '
-        'disclosed? Is the project receiving any other financial support? Is this information disclosed? Are existing '
-        'supporters approachable? Are they likely aware and/or comfortable with the Intellectual property language '
-        'within USG contracts?'
+        label=_("Reasonable, realistic and sustainable"),
+        help_text="Is the requested amount reasonable, realistic, and justified? If OTF doesn’t support the project, "
+        "is it likely to be realized? Does the project provide a detailed and realistic description of effort and "
+        "schedule? I.e. is the project capable of creating a work plan including objectives, activities, and "
+        "deliverable(s)? Does the project have a clear support model? Is there a known sustainability plan for the "
+        "future? What in-kind support or other revenue streams is the project receiving? I.e. volunteer developers, "
+        "service or product sales. Is the project receiving any financial support from the USG? Is this information "
+        "disclosed? Is the project receiving any other financial support? Is this information disclosed? Are existing "
+        "supporters approachable? Are they likely aware and/or comfortable with the Intellectual property language "
+        "within USG contracts?",
     )
     sustainable.group = 1
 
-    comments = RichTextField(
-        label=_('Other comments'),
-        help_text=''
-    )
+    comments = RichTextField(label=_("Other comments"), help_text="")
     comments.group = 1
 
 
 class BaseProposalDeterminationForm(forms.Form):
     titles = {
-        1: 'A. Determination',
-        2: 'B. General thoughts',
-        3: 'C. Specific aspects',
-        4: 'D. Rationale and appropriateness consideration',
-        5: 'E. General recommendation',
+        1: "A. Determination",
+        2: "B. General thoughts",
+        3: "C. Specific aspects",
+        4: "D. Rationale and appropriateness consideration",
+        5: "E. General recommendation",
     }
 
     # A. Determination
 
     outcome = forms.ChoiceField(
         choices=DETERMINATION_CHOICES,
-        label=_('Determination'),
-        help_text='Do you recommend requesting a proposal based on this concept note?'
+        label=_("Determination"),
+        help_text="Do you recommend requesting a proposal based on this concept note?",
     )
     outcome.group = 1
 
     message = RichTextField(
-        label=_('Determination message'),
-        help_text='This text will be e-mailed to the applicant. '
-        'Ones when text is first added and then every time the text is changed.'
+        label=_("Determination message"),
+        help_text="This text will be e-mailed to the applicant. "
+        "Ones when text is first added and then every time the text is changed.",
     )
     message.group = 1
 
     # B. General thoughts
     liked = RichTextField(
-        label=_('Positive aspects'),
-        help_text='Any general or specific aspects that got you really excited or that you like about this proposal.'
+        label=_("Positive aspects"),
+        help_text="Any general or specific aspects that got you really excited or that you like about this proposal.",
     )
     liked.group = 2
 
     concerns = RichTextField(
-        label=_('Concerns'),
-        help_text='Any general or specific aspects that concern you or leave you feeling uneasy about this proposal.'
+        label=_("Concerns"),
+        help_text="Any general or specific aspects that concern you or leave you feeling uneasy about this proposal.",
     )
     concerns.group = 2
 
     red_flags = RichTextField(
-        label=_('Items that must be addressed'),
-        help_text='Anything you think should be flagged for our attention.'
+        label=_("Items that must be addressed"),
+        help_text="Anything you think should be flagged for our attention.",
     )
     red_flags.group = 2
 
     # C. Specific aspects
-    overview = RichTextField(label=_('Project overview questions and comments'))
+    overview = RichTextField(label=_("Project overview questions and comments"))
     overview.group = 3
 
-    objectives = RichTextField(label=_('Objectives questions and comments'))
+    objectives = RichTextField(label=_("Objectives questions and comments"))
     objectives.group = 3
 
-    strategy = RichTextField(label=_('Methods and strategy questions and comments'))
+    strategy = RichTextField(label=_("Methods and strategy questions and comments"))
     strategy.group = 3
 
-    technical = RichTextField(label=_('Technical feasibility questions and comments'))
+    technical = RichTextField(label=_("Technical feasibility questions and comments"))
     technical.group = 3
 
-    alternative = RichTextField(label=_('Alternative analysis - "red teaming" questions and comments'))
+    alternative = RichTextField(
+        label=_('Alternative analysis - "red teaming" questions and comments')
+    )
     alternative.group = 3
 
-    usability = RichTextField(label=_('Usability questions and comments'))
+    usability = RichTextField(label=_("Usability questions and comments"))
     usability.group = 3
 
-    sustainability = RichTextField(label=_('Sustainability questions and comments'))
+    sustainability = RichTextField(label=_("Sustainability questions and comments"))
     sustainability.group = 3
 
-    collaboration = RichTextField(label=_('Collaboration questions and comments'))
+    collaboration = RichTextField(label=_("Collaboration questions and comments"))
     collaboration.group = 3
 
-    realism = RichTextField(label=_('Cost realism questions and comments'))
+    realism = RichTextField(label=_("Cost realism questions and comments"))
     realism.group = 3
 
-    qualifications = RichTextField(label=_('Qualifications questions and comments'))
+    qualifications = RichTextField(label=_("Qualifications questions and comments"))
     qualifications.group = 3
 
-    evaluation = RichTextField(label=_('Evaluation questions and comments'))
+    evaluation = RichTextField(label=_("Evaluation questions and comments"))
     evaluation.group = 3
 
     # D. Rationale and appropriateness consideration
-    rationale = RichTextField(label=_('Rationale and appropriateness questions and comments'))
+    rationale = RichTextField(
+        label=_("Rationale and appropriateness questions and comments")
+    )
     rationale.group = 4
 
 
-class ConceptDeterminationForm(BaseConceptDeterminationForm, BaseNormalDeterminationForm):
-    def __init__(self, *args, submission, user, edit=False, initial=None, instance=None, **kwargs):
+class ConceptDeterminationForm(
+    BaseConceptDeterminationForm, BaseNormalDeterminationForm
+):
+    def __init__(
+        self, *args, submission, user, edit=False, initial=None, instance=None, **kwargs
+    ):
         initial = initial or {}
         initial.update(submission=submission.id)
 
@@ -330,7 +340,9 @@ class ConceptDeterminationForm(BaseConceptDeterminationForm, BaseNormalDetermina
                 if key not in self._meta.fields:
                     initial[key] = value
 
-        super(BaseNormalDeterminationForm, self).__init__(*args, initial=initial, user=user, instance=instance, edit=edit, **kwargs)
+        super(BaseNormalDeterminationForm, self).__init__(
+            *args, initial=initial, user=user, instance=instance, edit=edit, **kwargs
+        )
 
         # convert a python dict to orderedDict, to use move_to_end method
         self.fields = OrderedDict(self.fields)
@@ -338,46 +350,58 @@ class ConceptDeterminationForm(BaseConceptDeterminationForm, BaseNormalDetermina
         for field in self._meta.widgets:
             self.fields[field].disabled = True
 
-        self.fields['outcome'].choices = self.outcome_choices_for_phase(submission, user)
+        self.fields["outcome"].choices = self.outcome_choices_for_phase(
+            submission, user
+        )
 
         if self.draft_button_name in self.data:
             for field in self.fields.values():
                 field.required = False
 
-        self.fields = self.apply_form_settings('concept', self.fields)
-        self.fields.move_to_end('send_notice')
+        self.fields = self.apply_form_settings("concept", self.fields)
+        self.fields.move_to_end("send_notice")
 
-        action = kwargs.get('action')
+        action = kwargs.get("action")
         stages_num = len(submission.workflow.stages)
 
         if stages_num > 1:
-            second_stage_forms = submission.get_from_parent('forms').filter(stage=2)
+            second_stage_forms = submission.get_from_parent("forms").filter(stage=2)
             if second_stage_forms.count() > 1:
                 proposal_form_choices = [
                     (index, form.form.name)
                     for index, form in enumerate(second_stage_forms)
                 ]
-                proposal_form_choices.insert(0, ('', _('-- No proposal form selected -- ')))
-                proposal_form_help_text = _('Select the proposal form only for determination approval')
-                if action == 'invited_to_proposal':
-                    proposal_form_help_text = _('Select the proposal form to use for proposal stage.')
-                self.fields['proposal_form'] = forms.ChoiceField(
-                    label=_('Proposal Form'),
+                proposal_form_choices.insert(
+                    0, ("", _("-- No proposal form selected -- "))
+                )
+                proposal_form_help_text = _(
+                    "Select the proposal form only for determination approval"
+                )
+                if action == "invited_to_proposal":
+                    proposal_form_help_text = _(
+                        "Select the proposal form to use for proposal stage."
+                    )
+                self.fields["proposal_form"] = forms.ChoiceField(
+                    label=_("Proposal Form"),
                     choices=proposal_form_choices,
                     help_text=proposal_form_help_text,
-                    required=True if action == 'invited_to_proposal' else False,
-                    disabled=False if action == 'invited_to_proposal' else True,
+                    required=True if action == "invited_to_proposal" else False,
+                    disabled=False if action == "invited_to_proposal" else True,
                 )
-                self.fields['proposal_form'].group = 1
-                self.fields.move_to_end('proposal_form', last=False)
+                self.fields["proposal_form"].group = 1
+                self.fields.move_to_end("proposal_form", last=False)
 
         if edit:
-            self.fields.pop('outcome')
+            self.fields.pop("outcome")
             self.draft_button_name = None
 
 
-class ProposalDeterminationForm(BaseProposalDeterminationForm, BaseNormalDeterminationForm):
-    def __init__(self, *args, submission, user, edit=False, initial=None, instance=None, **kwargs):
+class ProposalDeterminationForm(
+    BaseProposalDeterminationForm, BaseNormalDeterminationForm
+):
+    def __init__(
+        self, *args, submission, user, edit=False, initial=None, instance=None, **kwargs
+    ):
         if initial is None:
             initial = {}
         initial.update(submission=submission.id)
@@ -387,7 +411,9 @@ class ProposalDeterminationForm(BaseProposalDeterminationForm, BaseNormalDetermi
                 if key not in self._meta.fields:
                     initial[key] = value
 
-        super(BaseNormalDeterminationForm, self).__init__(*args, initial=initial, user=user, instance=instance, edit=edit, **kwargs)
+        super(BaseNormalDeterminationForm, self).__init__(
+            *args, initial=initial, user=user, instance=instance, edit=edit, **kwargs
+        )
 
         # convert a python dict to orderedDict, to use move_to_end method
         self.fields = OrderedDict(self.fields)
@@ -395,40 +421,50 @@ class ProposalDeterminationForm(BaseProposalDeterminationForm, BaseNormalDetermi
         for field in self._meta.widgets:
             self.fields[field].disabled = True
 
-        self.fields['outcome'].choices = self.outcome_choices_for_phase(submission, user)
-        self.fields.move_to_end('send_notice')
+        self.fields["outcome"].choices = self.outcome_choices_for_phase(
+            submission, user
+        )
+        self.fields.move_to_end("send_notice")
 
         if self.draft_button_name in self.data:
             for field in self.fields.values():
                 field.required = False
 
-        self.fields = self.apply_form_settings('proposal', self.fields)
+        self.fields = self.apply_form_settings("proposal", self.fields)
 
         if edit:
-            self.fields.pop('outcome')
+            self.fields.pop("outcome")
             self.draft_button_name = None
 
 
-class BatchConceptDeterminationForm(BaseConceptDeterminationForm, BaseBatchDeterminationForm):
+class BatchConceptDeterminationForm(
+    BaseConceptDeterminationForm, BaseBatchDeterminationForm
+):
     def __init__(self, *args, submissions, initial=None, **kwargs):
         if initial is None:
             initial = {}
-        initial.update(submissions=submissions.values_list('id', flat=True))
-        super(BaseBatchDeterminationForm, self).__init__(*args, initial=initial, **kwargs)
-        self.fields['outcome'].widget = forms.HiddenInput()
+        initial.update(submissions=submissions.values_list("id", flat=True))
+        super(BaseBatchDeterminationForm, self).__init__(
+            *args, initial=initial, **kwargs
+        )
+        self.fields["outcome"].widget = forms.HiddenInput()
 
-        self.fields = self.apply_form_settings('concept', self.fields)
+        self.fields = self.apply_form_settings("concept", self.fields)
 
 
-class BatchProposalDeterminationForm(BaseProposalDeterminationForm, BaseBatchDeterminationForm):
+class BatchProposalDeterminationForm(
+    BaseProposalDeterminationForm, BaseBatchDeterminationForm
+):
     def __init__(self, *args, submissions, initial=None, **kwargs):
         if initial is None:
             initial = {}
-        initial.update(submissions=submissions.values_list('id', flat=True))
-        super(BaseBatchDeterminationForm, self).__init__(*args, initial=initial, **kwargs)
-        self.fields['outcome'].widget = forms.HiddenInput()
+        initial.update(submissions=submissions.values_list("id", flat=True))
+        super(BaseBatchDeterminationForm, self).__init__(
+            *args, initial=initial, **kwargs
+        )
+        self.fields["outcome"].widget = forms.HiddenInput()
 
-        self.fields = self.apply_form_settings('proposal', self.fields)
+        self.fields = self.apply_form_settings("proposal", self.fields)
 
 
 class MixedMetaClass(type(StreamBaseForm), type(forms.ModelForm)):
@@ -440,26 +476,33 @@ class DeterminationModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMet
 
     class Meta:
         model = Determination
-        fields = ['outcome', 'message', 'submission', 'author', 'send_notice']
+        fields = ["outcome", "message", "submission", "author", "send_notice"]
 
         widgets = {
-            'outcome': forms.HiddenInput(),
-            'message': forms.HiddenInput(),
-            'submission': forms.HiddenInput(),
-            'author': forms.HiddenInput(),
-            'send_notice': forms.HiddenInput(),
+            "outcome": forms.HiddenInput(),
+            "message": forms.HiddenInput(),
+            "submission": forms.HiddenInput(),
+            "author": forms.HiddenInput(),
+            "send_notice": forms.HiddenInput(),
         }
 
         error_messages = {
             NON_FIELD_ERRORS: {
-                'unique_together': "You have already created a determination for this submission",
+                "unique_together": "You have already created a determination for this submission",
             }
         }
 
     def __init__(
-        self, *args, submission, action, user=None,
-        edit=False, initial=None, instance=None, site=None,
-        **kwargs
+        self,
+        *args,
+        submission,
+        action,
+        user=None,
+        edit=False,
+        initial=None,
+        instance=None,
+        site=None,
+        **kwargs,
     ):
         if initial is None:
             initial = {}
@@ -481,12 +524,12 @@ class DeterminationModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMet
                 field.required = False
 
         if edit:
-            self.fields.pop('outcome')
+            self.fields.pop("outcome")
             self.draft_button_name = None
 
     def clean(self):
         cleaned_data = super().clean()
-        cleaned_data['form_data'] = {
+        cleaned_data["form_data"] = {
             key: value
             for key, value in cleaned_data.items()
             if key not in self._meta.fields
@@ -497,16 +540,19 @@ class DeterminationModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMet
     def save(self, commit=True):
         self.instance.send_notice = (
             self.cleaned_data[self.instance.send_notice_field.id]
-            if self.instance.send_notice_field else True
+            if self.instance.send_notice_field
+            else True
         )
         self.instance.message = self.cleaned_data[self.instance.message_field.id]
         try:
-            self.instance.outcome = int(self.cleaned_data[self.instance.determination_field.id])
+            self.instance.outcome = int(
+                self.cleaned_data[self.instance.determination_field.id]
+            )
             # Need to catch KeyError as outcome field would not exist in case of edit.
         except KeyError:
             pass
         self.instance.is_draft = self.draft_button_name in self.data
-        self.instance.form_data = self.cleaned_data['form_data']
+        self.instance.form_data = self.cleaned_data["form_data"]
         return super().save(commit)
 
 
@@ -526,37 +572,45 @@ class BatchDeterminationForm(StreamBaseForm, forms.Form, metaclass=FormMixedMeta
     )
     outcome = forms.ChoiceField(
         choices=DETERMINATION_CHOICES,
-        label=_('Determination'),
-        help_text='Do you recommend requesting a proposal based on this concept note?',
-        widget=forms.HiddenInput()
+        label=_("Determination"),
+        help_text="Do you recommend requesting a proposal based on this concept note?",
+        widget=forms.HiddenInput(),
     )
 
     def __init__(
-        self, *args, user, submissions, action, initial=None,
-        edit=False, site=None, **kwargs
+        self,
+        *args,
+        user,
+        submissions,
+        action,
+        initial=None,
+        edit=False,
+        site=None,
+        **kwargs,
     ):
         if initial is None:
             initial = {}
-        initial.update(submissions=submissions.values_list('id', flat=True))
+        initial.update(submissions=submissions.values_list("id", flat=True))
         try:
             initial.update(outcome=TRANSITION_DETERMINATION[action])
         except KeyError:
             pass
         initial.update(author=user.id)
         super().__init__(*args, initial=initial, **kwargs)
-        self.fields['submissions'].disabled = True
-        self.fields['author'].disabled = True
-        self.fields['outcome'].disabled = True
+        self.fields["submissions"].disabled = True
+        self.fields["author"].disabled = True
+        self.fields["outcome"].disabled = True
 
     def data_fields(self):
         return [
-            field for field in self.fields
-            if field not in ['submissions', 'outcome', 'author', 'send_notice']
+            field
+            for field in self.fields
+            if field not in ["submissions", "outcome", "author", "send_notice"]
         ]
 
     def clean(self):
         cleaned_data = super().clean()
-        cleaned_data['form_data'] = {
+        cleaned_data["form_data"] = {
             key: value
             for key, value in cleaned_data.items()
             if key in self.data_fields()
@@ -565,13 +619,13 @@ class BatchDeterminationForm(StreamBaseForm, forms.Form, metaclass=FormMixedMeta
 
     def clean_outcome(self):
         # Enforce outcome as an int
-        return int(self.cleaned_data['outcome'])
+        return int(self.cleaned_data["outcome"])
 
     def _post_clean(self):
-        submissions = self.cleaned_data['submissions'].undetermined()
+        submissions = self.cleaned_data["submissions"].undetermined()
         data = {
             field: self.cleaned_data[field]
-            for field in ['author', 'form_data', 'outcome']
+            for field in ["author", "form_data", "outcome"]
         }
 
         self.instances = [
diff --git a/hypha/apply/determinations/management/commands/migrate_concept_determinations.py b/hypha/apply/determinations/management/commands/migrate_concept_determinations.py
index 48078e6c694b89e654e75e836b5dc00a7d5737a1..3c1eafe1cb54ff5470ecf142b7ec4d8a7187c2de 100644
--- a/hypha/apply/determinations/management/commands/migrate_concept_determinations.py
+++ b/hypha/apply/determinations/management/commands/migrate_concept_determinations.py
@@ -44,11 +44,13 @@ class Command(BaseCommand):
     }
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             blacklist = {"8104"}
@@ -62,9 +64,9 @@ class Command(BaseCommand):
         form_data = {}
 
         try:
-            determination = Determination.objects.get(drupal_id=node['nid'])
+            determination = Determination.objects.get(drupal_id=node["nid"])
         except Determination.DoesNotExist:
-            determination = Determination(drupal_id=node['nid'])
+            determination = Determination(drupal_id=node["nid"])
 
         # Disable auto_* on date fields so imported dates are used.
         for field in determination._meta.local_fields:
@@ -74,18 +76,24 @@ class Command(BaseCommand):
                 field.auto_now = False
 
         # TODO timezone?
-        determination.created_at = datetime.fromtimestamp(int(node['created']), timezone.utc)
-        determination.updated_at = datetime.fromtimestamp(int(node['changed']), timezone.utc)
-        determination.author = self.get_user(node['uid'])
+        determination.created_at = datetime.fromtimestamp(
+            int(node["created"]), timezone.utc
+        )
+        determination.updated_at = datetime.fromtimestamp(
+            int(node["changed"]), timezone.utc
+        )
+        determination.author = self.get_user(node["uid"])
         determination.submission = self.get_submission(node)
         determination.outcome = self.get_determination(node)
-        determination.message = self.get_field_value('field_cnsr_determination_message', node)
+        determination.message = self.get_field_value(
+            "field_cnsr_determination_message", node
+        )
 
         for field in node:
             if field in self.STREAMFIELD_MAP:
                 try:
-                    id = self.STREAMFIELD_MAP[field]['id']
-                    if id != 'message':
+                    id = self.STREAMFIELD_MAP[field]["id"]
+                    if id != "message":
                         form_data[id] = self.get_field_value(field, node)
                 except TypeError:
                     pass
@@ -96,7 +104,9 @@ class Command(BaseCommand):
             determination.save()
             self.stdout.write(f"Processed \"{node['title']}\" ({node['nid']})")
         except IntegrityError:
-            self.stdout.write(f"Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
             pass
 
     def get_field_value(self, field, node):
@@ -109,32 +119,32 @@ class Command(BaseCommand):
         field: [{value|target_id|tid: VALUE},]
         """
         mapping = self.STREAMFIELD_MAP[field]
-        mapping_type = mapping['type']
-        key = mapping.get('key', 'value')
+        mapping_type = mapping["type"]
+        key = mapping.get("key", "value")
         source_value = node[field]
         value = None
 
         if mapping_type == "direct":
             value = source_value
-        elif mapping_type == 'value':
+        elif mapping_type == "value":
             if key in source_value:
-                value = self.nl2br(source_value[key]) if source_value else ''
+                value = self.nl2br(source_value[key]) if source_value else ""
             else:
-                value = self.nl2br(source_value['value']) if source_value else ''
-        elif mapping_type == 'map' and 'map' in 'mapping':
-            value = mapping['map'].get(source_value[key])
-        elif mapping_type == 'address' and 'map' in mapping:
+                value = self.nl2br(source_value["value"]) if source_value else ""
+        elif mapping_type == "map" and "map" in "mapping":
+            value = mapping["map"].get(source_value[key])
+        elif mapping_type == "address" and "map" in mapping:
             try:
-                value_map = mapping['map']
+                value_map = mapping["map"]
                 value = {}
                 for item in value_map:
                     value[value_map[item]] = source_value[item]
                 value = json.dumps(value)
             except TypeError:
                 value = {}
-        elif mapping_type == 'boolean':
-            value = source_value[key] == '1' if source_value else False
-        elif mapping_type == 'category':
+        elif mapping_type == "boolean":
+            value = source_value[key] == "1" if source_value else False
+        elif mapping_type == "category":
             if not source_value:
                 value = []
             else:
@@ -147,7 +157,7 @@ class Command(BaseCommand):
                         option = self.get_referenced_term(item[key])
                         if option:
                             value.append(option)
-        elif mapping_type == 'file':
+        elif mapping_type == "file":
             # TODO finish mapping. Requires access to the files.
             value = {}
 
@@ -162,10 +172,10 @@ class Command(BaseCommand):
 
     def get_submission(self, node):
         try:
-            nid = node['field_submission_concept_note']['target_id']
+            nid = node["field_submission_concept_note"]["target_id"]
             return ApplicationSubmission.objects.get(drupal_id=nid)
         except ApplicationSubmission.DoesNotExist:
-            return 'None'
+            return "None"
 
     def get_determination(self, node):
         choices = {
@@ -173,15 +183,15 @@ class Command(BaseCommand):
             "approved": 2,
             "dropped": 0,
             "unapproved": 0,
-            "undetermined": 1
+            "undetermined": 1,
         }
 
         try:
-            determination = choices.get(node['field_cnsr_determination']['value'], 1)
+            determination = choices.get(node["field_cnsr_determination"]["value"], 1)
         except TypeError:
             determination = 1
 
         return determination
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
diff --git a/hypha/apply/determinations/management/commands/migrate_proposal_determinations.py b/hypha/apply/determinations/management/commands/migrate_proposal_determinations.py
index 4333565d77224b97b1d906acf6e75835e5b2a929..dca054964676ddc9de74011807017f257fa3a8e4 100644
--- a/hypha/apply/determinations/management/commands/migrate_proposal_determinations.py
+++ b/hypha/apply/determinations/management/commands/migrate_proposal_determinations.py
@@ -99,11 +99,13 @@ class Command(BaseCommand):
     }
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             for id in self.data:
@@ -114,9 +116,9 @@ class Command(BaseCommand):
         form_data = {}
 
         try:
-            determination = Determination.objects.get(drupal_id=node['nid'])
+            determination = Determination.objects.get(drupal_id=node["nid"])
         except Determination.DoesNotExist:
-            determination = Determination(drupal_id=node['nid'])
+            determination = Determination(drupal_id=node["nid"])
 
         # Disable auto_* on date fields so imported dates are used.
         for field in determination._meta.local_fields:
@@ -126,18 +128,24 @@ class Command(BaseCommand):
                 field.auto_now = False
 
         # TODO timezone?
-        determination.created_at = datetime.fromtimestamp(int(node['created']), timezone.utc)
-        determination.updated_at = datetime.fromtimestamp(int(node['changed']), timezone.utc)
-        determination.author = self.get_user(node['uid'])
+        determination.created_at = datetime.fromtimestamp(
+            int(node["created"]), timezone.utc
+        )
+        determination.updated_at = datetime.fromtimestamp(
+            int(node["changed"]), timezone.utc
+        )
+        determination.author = self.get_user(node["uid"])
         determination.submission = self.get_submission(node)
         determination.outcome = self.get_determination(node)
-        determination.message = self.get_field_value('field_psr_determination_message', node)
+        determination.message = self.get_field_value(
+            "field_psr_determination_message", node
+        )
 
         for field in node:
             if field in self.STREAMFIELD_MAP:
                 try:
-                    id = self.STREAMFIELD_MAP[field]['id']
-                    if id != 'message':
+                    id = self.STREAMFIELD_MAP[field]["id"]
+                    if id != "message":
                         form_data[id] = self.get_field_value(field, node)
                 except TypeError:
                     pass
@@ -149,8 +157,11 @@ class Command(BaseCommand):
             self.stdout.write(f"Processed \"{node['title']}\" ({node['nid']})")
         except IntegrityError:
             import pprint
+
             pprint.pprint(determination.submission)
-            self.stdout.write(f"Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
             pass
 
     def get_field_value(self, field, node):
@@ -163,32 +174,32 @@ class Command(BaseCommand):
         field: [{value|target_id|tid: VALUE},]
         """
         mapping = self.STREAMFIELD_MAP[field]
-        mapping_type = mapping['type']
-        key = mapping.get('key', 'value')
+        mapping_type = mapping["type"]
+        key = mapping.get("key", "value")
         source_value = node[field]
         value = None
 
         if mapping_type == "direct":
             value = source_value
-        elif mapping_type == 'value':
+        elif mapping_type == "value":
             if key in source_value:
-                value = self.nl2br(source_value[key]) if source_value else ''
+                value = self.nl2br(source_value[key]) if source_value else ""
             else:
-                value = self.nl2br(source_value['value']) if source_value else ''
-        elif mapping_type == 'map' and 'map' in 'mapping':
-            value = mapping['map'].get(source_value[key])
-        elif mapping_type == 'address' and 'map' in mapping:
+                value = self.nl2br(source_value["value"]) if source_value else ""
+        elif mapping_type == "map" and "map" in "mapping":
+            value = mapping["map"].get(source_value[key])
+        elif mapping_type == "address" and "map" in mapping:
             try:
-                value_map = mapping['map']
+                value_map = mapping["map"]
                 value = {}
                 for item in value_map:
                     value[value_map[item]] = source_value[item]
                 value = json.dumps(value)
             except TypeError:
                 value = {}
-        elif mapping_type == 'boolean':
-            value = source_value[key] == '1' if source_value else False
-        elif mapping_type == 'category':
+        elif mapping_type == "boolean":
+            value = source_value[key] == "1" if source_value else False
+        elif mapping_type == "category":
             if not source_value:
                 value = []
             else:
@@ -201,7 +212,7 @@ class Command(BaseCommand):
                         option = self.get_referenced_term(item[key])
                         if option:
                             value.append(option)
-        elif mapping_type == 'file':
+        elif mapping_type == "file":
             # TODO finish mapping. Requires access to the files.
             value = {}
 
@@ -210,8 +221,8 @@ class Command(BaseCommand):
     def get_user(self, uid):
         # Dan Blah hade one extra admin account uid 52 in old system,
         # all content should be set to uid 2 in the new system.
-        if uid == '52':
-            uid = '2'
+        if uid == "52":
+            uid = "2"
         try:
             User = get_user_model()
             return User.objects.get(drupal_id=uid)
@@ -220,10 +231,10 @@ class Command(BaseCommand):
 
     def get_submission(self, node):
         try:
-            nid = node['field_submission_proposal']['target_id']
+            nid = node["field_submission_proposal"]["target_id"]
             return ApplicationSubmission.objects.get(drupal_id=nid)
         except ApplicationSubmission.DoesNotExist:
-            return 'None'
+            return "None"
 
     def get_determination(self, node):
         choices = {
@@ -231,15 +242,15 @@ class Command(BaseCommand):
             "approved": 2,
             "dropped": 0,
             "unapproved": 0,
-            "undetermined": 1
+            "undetermined": 1,
         }
 
         try:
-            determination = choices.get(node['field_psr_determination']['value'], 1)
+            determination = choices.get(node["field_psr_determination"]["value"], 1)
         except TypeError:
             determination = 1
 
         return determination
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
diff --git a/hypha/apply/determinations/migrations/0001_initial.py b/hypha/apply/determinations/migrations/0001_initial.py
index 4729c5a3eec62b6af269cea09c3560fd1b7f37e0..1653ae50345c5efc8ce2d0658b8cbfd22dcfc373 100644
--- a/hypha/apply/determinations/migrations/0001_initial.py
+++ b/hypha/apply/determinations/migrations/0001_initial.py
@@ -7,28 +7,62 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0032_make_reviewers_optional_in_all_instances'),
+        ("funds", "0032_make_reviewers_optional_in_all_instances"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Determination',
+            name="Determination",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('determination_data', django.contrib.postgres.fields.jsonb.JSONField()),
-                ('determination', models.IntegerField(choices=[(0, 'Unapproved'), (1, 'Undetermined'), (2, 'Approved')], default=0, verbose_name='Determination')),
-                ('is_draft', models.BooleanField(default=False, verbose_name='Draft')),
-                ('author', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
-                ('submission', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='determination', to='funds.ApplicationSubmission')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "determination_data",
+                    django.contrib.postgres.fields.jsonb.JSONField(),
+                ),
+                (
+                    "determination",
+                    models.IntegerField(
+                        choices=[
+                            (0, "Unapproved"),
+                            (1, "Undetermined"),
+                            (2, "Approved"),
+                        ],
+                        default=0,
+                        verbose_name="Determination",
+                    ),
+                ),
+                ("is_draft", models.BooleanField(default=False, verbose_name="Draft")),
+                (
+                    "author",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "submission",
+                    models.OneToOneField(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="determination",
+                        to="funds.ApplicationSubmission",
+                    ),
+                ),
             ],
         ),
         migrations.AlterUniqueTogether(
-            name='determination',
-            unique_together={('author', 'submission')},
+            name="determination",
+            unique_together={("author", "submission")},
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0002_add_fields.py b/hypha/apply/determinations/migrations/0002_add_fields.py
index 648e297fd98c4a5f9d3a603a0687e37e6a659a89..23344d6079de9c160624203c4db8e52cc957c414 100644
--- a/hypha/apply/determinations/migrations/0002_add_fields.py
+++ b/hypha/apply/determinations/migrations/0002_add_fields.py
@@ -6,49 +6,56 @@ import django.utils.timezone
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0001_initial'),
+        ("determinations", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='determination',
-            name='created_at',
-            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='Creation time'),
+            model_name="determination",
+            name="created_at",
+            field=models.DateTimeField(
+                auto_now_add=True,
+                default=django.utils.timezone.now,
+                verbose_name="Creation time",
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='determination',
-            name='data',
+            model_name="determination",
+            name="data",
             field=django.contrib.postgres.fields.jsonb.JSONField(blank=True),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='determination',
-            name='message',
-            field=models.TextField(blank=True, verbose_name='Determination message'),
+            model_name="determination",
+            name="message",
+            field=models.TextField(blank=True, verbose_name="Determination message"),
         ),
         migrations.AddField(
-            model_name='determination',
-            name='outcome',
-            field=models.IntegerField(choices=[(0, 'Rejected'), (1, 'Needs more info'), (2, 'Accepted')], default=1, verbose_name='Determination'),
+            model_name="determination",
+            name="outcome",
+            field=models.IntegerField(
+                choices=[(0, "Rejected"), (1, "Needs more info"), (2, "Accepted")],
+                default=1,
+                verbose_name="Determination",
+            ),
         ),
         migrations.AddField(
-            model_name='determination',
-            name='updated_at',
-            field=models.DateTimeField(auto_now=True, verbose_name='Update time'),
+            model_name="determination",
+            name="updated_at",
+            field=models.DateTimeField(auto_now=True, verbose_name="Update time"),
         ),
         migrations.AlterUniqueTogether(
-            name='determination',
+            name="determination",
             unique_together=set(),
         ),
         migrations.RemoveField(
-            model_name='determination',
-            name='determination',
+            model_name="determination",
+            name="determination",
         ),
         migrations.RemoveField(
-            model_name='determination',
-            name='determination_data',
+            model_name="determination",
+            name="determination_data",
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0003_message_template_settings.py b/hypha/apply/determinations/migrations/0003_message_template_settings.py
index 0ba59cffd5fec41bc316d5b1b66b631461784cc4..180dd9e98acc9a04967d2bdd7d0703b0aaca8a15 100644
--- a/hypha/apply/determinations/migrations/0003_message_template_settings.py
+++ b/hypha/apply/determinations/migrations/0003_message_template_settings.py
@@ -6,30 +6,71 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('determinations', '0002_add_fields'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("determinations", "0002_add_fields"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='DeterminationMessageSettings',
+            name="DeterminationMessageSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('request_accepted', wagtail.fields.RichTextField(verbose_name='Accepted')),
-                ('request_rejected', wagtail.fields.RichTextField(verbose_name='Rejected')),
-                ('request_more_info', wagtail.fields.RichTextField(verbose_name='Needs more info')),
-                ('concept_accepted', wagtail.fields.RichTextField(verbose_name='Accepted')),
-                ('concept_rejected', wagtail.fields.RichTextField(verbose_name='Rejected')),
-                ('concept_more_info', wagtail.fields.RichTextField(verbose_name='Needs more info')),
-                ('proposal_accepted', wagtail.fields.RichTextField(verbose_name='Accepted')),
-                ('proposal_rejected', wagtail.fields.RichTextField(verbose_name='Rejected')),
-                ('proposal_more_info', wagtail.fields.RichTextField(verbose_name='Needs more info')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "request_accepted",
+                    wagtail.fields.RichTextField(verbose_name="Accepted"),
+                ),
+                (
+                    "request_rejected",
+                    wagtail.fields.RichTextField(verbose_name="Rejected"),
+                ),
+                (
+                    "request_more_info",
+                    wagtail.fields.RichTextField(verbose_name="Needs more info"),
+                ),
+                (
+                    "concept_accepted",
+                    wagtail.fields.RichTextField(verbose_name="Accepted"),
+                ),
+                (
+                    "concept_rejected",
+                    wagtail.fields.RichTextField(verbose_name="Rejected"),
+                ),
+                (
+                    "concept_more_info",
+                    wagtail.fields.RichTextField(verbose_name="Needs more info"),
+                ),
+                (
+                    "proposal_accepted",
+                    wagtail.fields.RichTextField(verbose_name="Accepted"),
+                ),
+                (
+                    "proposal_rejected",
+                    wagtail.fields.RichTextField(verbose_name="Rejected"),
+                ),
+                (
+                    "proposal_more_info",
+                    wagtail.fields.RichTextField(verbose_name="Needs more info"),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'determination messages',
+                "verbose_name": "determination messages",
             },
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0004_change_labels.py b/hypha/apply/determinations/migrations/0004_change_labels.py
index ece3150b24ea2f56ed5168df1a01398cd53e3882..d7b1826408cb4736f11be013fd18621e849489dd 100644
--- a/hypha/apply/determinations/migrations/0004_change_labels.py
+++ b/hypha/apply/determinations/migrations/0004_change_labels.py
@@ -5,45 +5,48 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0003_message_template_settings'),
+        ("determinations", "0003_message_template_settings"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='outcome',
-            field=models.IntegerField(choices=[(0, 'Dismissed'), (1, 'Needs more info'), (2, 'Approved')], default=1, verbose_name='Determination'),
+            model_name="determination",
+            name="outcome",
+            field=models.IntegerField(
+                choices=[(0, "Dismissed"), (1, "Needs more info"), (2, "Approved")],
+                default=1,
+                verbose_name="Determination",
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='concept_accepted',
-            field=wagtail.fields.RichTextField(verbose_name='Approved'),
+            model_name="determinationmessagesettings",
+            name="concept_accepted",
+            field=wagtail.fields.RichTextField(verbose_name="Approved"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='concept_rejected',
-            field=wagtail.fields.RichTextField(verbose_name='Dismissed'),
+            model_name="determinationmessagesettings",
+            name="concept_rejected",
+            field=wagtail.fields.RichTextField(verbose_name="Dismissed"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='proposal_accepted',
-            field=wagtail.fields.RichTextField(verbose_name='Approved'),
+            model_name="determinationmessagesettings",
+            name="proposal_accepted",
+            field=wagtail.fields.RichTextField(verbose_name="Approved"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='proposal_rejected',
-            field=wagtail.fields.RichTextField(verbose_name='Dismissed'),
+            model_name="determinationmessagesettings",
+            name="proposal_rejected",
+            field=wagtail.fields.RichTextField(verbose_name="Dismissed"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='request_accepted',
-            field=wagtail.fields.RichTextField(verbose_name='Approved'),
+            model_name="determinationmessagesettings",
+            name="request_accepted",
+            field=wagtail.fields.RichTextField(verbose_name="Approved"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='request_rejected',
-            field=wagtail.fields.RichTextField(verbose_name='Dismissed'),
+            model_name="determinationmessagesettings",
+            name="request_rejected",
+            field=wagtail.fields.RichTextField(verbose_name="Dismissed"),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0005_determination_drupal_id.py b/hypha/apply/determinations/migrations/0005_determination_drupal_id.py
index 5b3c5626e3c2bc831cf781ec5e320ee3ccfe4a62..580b15ee48adb73e05277da245c20d3cb4a86a86 100644
--- a/hypha/apply/determinations/migrations/0005_determination_drupal_id.py
+++ b/hypha/apply/determinations/migrations/0005_determination_drupal_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0004_change_labels'),
+        ("determinations", "0004_change_labels"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='determination',
-            name='drupal_id',
+            model_name="determination",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0006_allow_multiple_determinations.py b/hypha/apply/determinations/migrations/0006_allow_multiple_determinations.py
index 7a4bddebee0c13c3d035edb88e92f3831ea2a045..7a35dd97b19ae7f8f9f16d0c3b9b8dc3e2a1a07a 100644
--- a/hypha/apply/determinations/migrations/0006_allow_multiple_determinations.py
+++ b/hypha/apply/determinations/migrations/0006_allow_multiple_determinations.py
@@ -5,15 +5,18 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0005_determination_drupal_id'),
+        ("determinations", "0005_determination_drupal_id"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='submission',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='determinations', to='funds.ApplicationSubmission'),
+            model_name="determination",
+            name="submission",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="determinations",
+                to="funds.ApplicationSubmission",
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0007_add_determinationformsettings.py b/hypha/apply/determinations/migrations/0007_add_determinationformsettings.py
index c71c2876bb2cd98353f7a2c79bebbf65c2244896..dd9a005fc90975b091cb8624c5e8608599953ec2 100644
--- a/hypha/apply/determinations/migrations/0007_add_determinationformsettings.py
+++ b/hypha/apply/determinations/migrations/0007_add_determinationformsettings.py
@@ -5,55 +5,233 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('determinations', '0006_allow_multiple_determinations'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("determinations", "0006_allow_multiple_determinations"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='DeterminationFormSettings',
+            name="DeterminationFormSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('concept_principles_label', models.CharField(default='Goals and principles', max_length=255, verbose_name='label')),
-                ('concept_principles_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('concept_technical_label', models.CharField(default='Technical merit', max_length=255, verbose_name='label')),
-                ('concept_technical_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('concept_sustainable_label', models.CharField(default='Reasonable, realistic and sustainable', max_length=255, verbose_name='label')),
-                ('concept_sustainable_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_liked_label', models.CharField(default='Positive aspects', max_length=255, verbose_name='label')),
-                ('proposal_liked_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_concerns_label', models.CharField(default='Concerns', max_length=255, verbose_name='label')),
-                ('proposal_concerns_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_red_flags_label', models.CharField(default='Items that must be addressed', max_length=255, verbose_name='label')),
-                ('proposal_red_flags_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_overview_label', models.CharField(default='Project overview questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_overview_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_objectives_label', models.CharField(default='Objectives questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_objectives_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_strategy_label', models.CharField(default='Methods and strategy questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_strategy_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_technical_label', models.CharField(default='Technical feasibility questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_technical_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_alternative_label', models.CharField(default='Alternative analysis - "red teaming" questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_alternative_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_usability_label', models.CharField(default='Usability questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_usability_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_sustainability_label', models.CharField(default='Sustainability questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_sustainability_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_collaboration_label', models.CharField(default='Collaboration questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_collaboration_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_realism_label', models.CharField(default='Cost realism questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_realism_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_qualifications_label', models.CharField(default='Qualifications questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_qualifications_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('proposal_evaluation_label', models.CharField(default='Evaluation questions and comments', max_length=255, verbose_name='label')),
-                ('proposal_evaluation_help_text', models.TextField(blank=True, verbose_name='help text')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "concept_principles_label",
+                    models.CharField(
+                        default="Goals and principles",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "concept_principles_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "concept_technical_label",
+                    models.CharField(
+                        default="Technical merit", max_length=255, verbose_name="label"
+                    ),
+                ),
+                (
+                    "concept_technical_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "concept_sustainable_label",
+                    models.CharField(
+                        default="Reasonable, realistic and sustainable",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "concept_sustainable_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_liked_label",
+                    models.CharField(
+                        default="Positive aspects", max_length=255, verbose_name="label"
+                    ),
+                ),
+                (
+                    "proposal_liked_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_concerns_label",
+                    models.CharField(
+                        default="Concerns", max_length=255, verbose_name="label"
+                    ),
+                ),
+                (
+                    "proposal_concerns_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_red_flags_label",
+                    models.CharField(
+                        default="Items that must be addressed",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_red_flags_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_overview_label",
+                    models.CharField(
+                        default="Project overview questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_overview_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_objectives_label",
+                    models.CharField(
+                        default="Objectives questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_objectives_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_strategy_label",
+                    models.CharField(
+                        default="Methods and strategy questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_strategy_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_technical_label",
+                    models.CharField(
+                        default="Technical feasibility questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_technical_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_alternative_label",
+                    models.CharField(
+                        default='Alternative analysis - "red teaming" questions and comments',
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_alternative_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_usability_label",
+                    models.CharField(
+                        default="Usability questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_usability_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_sustainability_label",
+                    models.CharField(
+                        default="Sustainability questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_sustainability_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_collaboration_label",
+                    models.CharField(
+                        default="Collaboration questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_collaboration_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_realism_label",
+                    models.CharField(
+                        default="Cost realism questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_realism_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_qualifications_label",
+                    models.CharField(
+                        default="Qualifications questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_qualifications_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "proposal_evaluation_label",
+                    models.CharField(
+                        default="Evaluation questions and comments",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "proposal_evaluation_help_text",
+                    models.TextField(blank=True, verbose_name="help text"),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'determination settings',
+                "verbose_name": "determination settings",
             },
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0008_rename_more_info.py b/hypha/apply/determinations/migrations/0008_rename_more_info.py
index f397dc4d8fad336cff8bdb9bde8b5ed0e9c9e354..b2ad8a4365d40c8f2e2cadd3edecbf41a5b46bef 100644
--- a/hypha/apply/determinations/migrations/0008_rename_more_info.py
+++ b/hypha/apply/determinations/migrations/0008_rename_more_info.py
@@ -4,15 +4,22 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0007_add_determinationformsettings'),
+        ("determinations", "0007_add_determinationformsettings"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='outcome',
-            field=models.IntegerField(choices=[(0, 'Dismissed'), (1, 'More information requested'), (2, 'Approved')], default=1, verbose_name='Determination'),
+            model_name="determination",
+            name="outcome",
+            field=models.IntegerField(
+                choices=[
+                    (0, "Dismissed"),
+                    (1, "More information requested"),
+                    (2, "Approved"),
+                ],
+                default=1,
+                verbose_name="Determination",
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0009_add_send_notice_field.py b/hypha/apply/determinations/migrations/0009_add_send_notice_field.py
index 330519e11a37ef4154f08f31614e36933c7ad429..10562d01a3ce9ffe8d612a256493f0b2781602ae 100644
--- a/hypha/apply/determinations/migrations/0009_add_send_notice_field.py
+++ b/hypha/apply/determinations/migrations/0009_add_send_notice_field.py
@@ -4,15 +4,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0008_rename_more_info'),
+        ("determinations", "0008_rename_more_info"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='determination',
-            name='send_notice',
-            field=models.BooleanField(default=True, verbose_name='Send message to applicant'),
+            model_name="determination",
+            name="send_notice",
+            field=models.BooleanField(
+                default=True, verbose_name="Send message to applicant"
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0010_add_determination_stream_field_forms.py b/hypha/apply/determinations/migrations/0010_add_determination_stream_field_forms.py
index b747186fe612713e62b815856c8e07bfde2ad775..3e5ccbcf3c4bdb48b477ff48bb5c4c750b1ace49 100644
--- a/hypha/apply/determinations/migrations/0010_add_determination_stream_field_forms.py
+++ b/hypha/apply/determinations/migrations/0010_add_determination_stream_field_forms.py
@@ -9,36 +9,725 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0009_add_send_notice_field'),
+        ("determinations", "0009_add_send_notice_field"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='DeterminationForm',
+            name="DeterminationForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('form_fields', wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Section text/header')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[])),
-                ('name', models.CharField(max_length=255)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "rich_text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "word_limit",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=1000, label="Word limit"
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "markdown_text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "word_limit",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=1000, label="Word limit"
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "word_limit",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=1000, label="Word limit"
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Fields", label="Section text/header"
+                                ),
+                            ),
+                            (
+                                "checkbox",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "dropdown",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "send_notice",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "determination",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "info",
+                                            wagtail.blocks.static_block.StaticBlock(),
+                                        ),
+                                    ],
+                                    group=" Required",
+                                ),
+                            ),
+                            (
+                                "message",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "info",
+                                            wagtail.blocks.static_block.StaticBlock(),
+                                        ),
+                                    ],
+                                    group=" Required",
+                                ),
+                            ),
+                        ],
+                        default=[],
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
         migrations.AddField(
-            model_name='determination',
-            name='form_data',
-            field=django.contrib.postgres.fields.jsonb.JSONField(default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
+            model_name="determination",
+            name="form_data",
+            field=django.contrib.postgres.fields.jsonb.JSONField(
+                default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder
+            ),
         ),
         migrations.AddField(
-            model_name='determination',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Section text/header')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[]),
+            model_name="determination",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Fields", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+            ),
         ),
         migrations.AlterField(
-            model_name='determination',
-            name='data',
+            model_name="determination",
+            name="data",
             field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0011_auto_20220111_1314.py b/hypha/apply/determinations/migrations/0011_auto_20220111_1314.py
index b2ca4b01ae3bcf1bc476320c6336c46b08828f6f..4b4e906c85a6dcb5635d6144666cd0dfb5724896 100644
--- a/hypha/apply/determinations/migrations/0011_auto_20220111_1314.py
+++ b/hypha/apply/determinations/migrations/0011_auto_20220111_1314.py
@@ -5,20 +5,21 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0010_add_determination_stream_field_forms'),
+        ("determinations", "0010_add_determination_stream_field_forms"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='data',
+            model_name="determination",
+            name="data",
             field=models.JSONField(blank=True, null=True),
         ),
         migrations.AlterField(
-            model_name='determination',
-            name='form_data',
-            field=models.JSONField(default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
+            model_name="determination",
+            name="form_data",
+            field=models.JSONField(
+                default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py b/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py
index 044519ade4c5a764c4452e4f6fb7b203dfe86096..3467152c92a93245e179b367840b78d3ac7c7de8 100644
--- a/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py
+++ b/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py
@@ -5,55 +5,60 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0011_auto_20220111_1314'),
+        ("determinations", "0011_auto_20220111_1314"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='concept_accepted',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Approved'),
+            model_name="determinationmessagesettings",
+            name="concept_accepted",
+            field=wagtail.fields.RichTextField(blank=True, verbose_name="Approved"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='concept_more_info',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Needs more info'),
+            model_name="determinationmessagesettings",
+            name="concept_more_info",
+            field=wagtail.fields.RichTextField(
+                blank=True, verbose_name="Needs more info"
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='concept_rejected',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Dismissed'),
+            model_name="determinationmessagesettings",
+            name="concept_rejected",
+            field=wagtail.fields.RichTextField(blank=True, verbose_name="Dismissed"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='proposal_accepted',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Approved'),
+            model_name="determinationmessagesettings",
+            name="proposal_accepted",
+            field=wagtail.fields.RichTextField(blank=True, verbose_name="Approved"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='proposal_more_info',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Needs more info'),
+            model_name="determinationmessagesettings",
+            name="proposal_more_info",
+            field=wagtail.fields.RichTextField(
+                blank=True, verbose_name="Needs more info"
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='proposal_rejected',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Dismissed'),
+            model_name="determinationmessagesettings",
+            name="proposal_rejected",
+            field=wagtail.fields.RichTextField(blank=True, verbose_name="Dismissed"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='request_accepted',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Approved'),
+            model_name="determinationmessagesettings",
+            name="request_accepted",
+            field=wagtail.fields.RichTextField(blank=True, verbose_name="Approved"),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='request_more_info',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Needs more info'),
+            model_name="determinationmessagesettings",
+            name="request_more_info",
+            field=wagtail.fields.RichTextField(
+                blank=True, verbose_name="Needs more info"
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationmessagesettings',
-            name='request_rejected',
-            field=wagtail.fields.RichTextField(blank=True, verbose_name='Dismissed'),
+            model_name="determinationmessagesettings",
+            name="request_rejected",
+            field=wagtail.fields.RichTextField(blank=True, verbose_name="Dismissed"),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0013_auto_20220722_0844.py b/hypha/apply/determinations/migrations/0013_auto_20220722_0844.py
index be5e5086b0759cb6f926454b1a8e3077529c3705..ec4af3333ae71e46316e5a9152c91ea6fa8a8c6b 100644
--- a/hypha/apply/determinations/migrations/0013_auto_20220722_0844.py
+++ b/hypha/apply/determinations/migrations/0013_auto_20220722_0844.py
@@ -7,20 +7,689 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0012_auto_20220509_1136'),
+        ("determinations", "0012_auto_20220509_1136"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Section text/header')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[], use_json_field=True),
+            model_name="determination",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Fields", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Section text/header')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[], use_json_field=True),
+            model_name="determinationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Fields", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0014_alter_determination_formfield_send_notice.py b/hypha/apply/determinations/migrations/0014_alter_determination_formfield_send_notice.py
index 3c539916ce4e0bb283d2a61b1e387acfe48e0002..98daae3ceb5e33e155b49abd3a93d4574f14c69a 100644
--- a/hypha/apply/determinations/migrations/0014_alter_determination_formfield_send_notice.py
+++ b/hypha/apply/determinations/migrations/0014_alter_determination_formfield_send_notice.py
@@ -7,20 +7,683 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0013_auto_20220722_0844'),
+        ("determinations", "0013_auto_20220722_0844"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Section text/header')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('default_value', wagtail.blocks.BooleanBlock(default=True, required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[], use_json_field=True),
+            model_name="determination",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Fields", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Section text/header')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('default_value', wagtail.blocks.BooleanBlock(default=True, required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[], use_json_field=True),
+            model_name="determinationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Fields", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0015_alter_determinationformsettings_options.py b/hypha/apply/determinations/migrations/0015_alter_determinationformsettings_options.py
index 4f6775b25d22e94ed39de383e86efc59a340eb11..a18906912c28ee70b6a4cb0df321b565d25ef2cd 100644
--- a/hypha/apply/determinations/migrations/0015_alter_determinationformsettings_options.py
+++ b/hypha/apply/determinations/migrations/0015_alter_determinationformsettings_options.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0014_alter_determination_formfield_send_notice'),
+        ("determinations", "0014_alter_determination_formfield_send_notice"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='determinationformsettings',
-            options={'verbose_name': 'determination form settings'},
+            name="determinationformsettings",
+            options={"verbose_name": "determination form settings"},
         ),
     ]
diff --git a/hypha/apply/determinations/migrations/0016_rename_section_text_field.py b/hypha/apply/determinations/migrations/0016_rename_section_text_field.py
index f0da11f85fb9c8f0e71cbb6f83ca24eb24e4ce3c..e8b542043607214960a4f307d93a86ffe5f090a5 100644
--- a/hypha/apply/determinations/migrations/0016_rename_section_text_field.py
+++ b/hypha/apply/determinations/migrations/0016_rename_section_text_field.py
@@ -7,20 +7,679 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0015_alter_determinationformsettings_options'),
+        ("determinations", "0015_alter_determinationformsettings_options"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='determination',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('default_value', wagtail.blocks.BooleanBlock(default=True, required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[], use_json_field=True),
+            model_name="determination",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='determinationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('determination', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('message', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('send_notice', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('default_value', wagtail.blocks.BooleanBlock(default=True, required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], default=[], use_json_field=True),
+            model_name="determinationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "determination",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "message",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "send_notice",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                default=[],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/determinations/models.py b/hypha/apply/determinations/models.py
index f5ebe09ea84b7929c22a35584277c3e4c6897ec4..0707ba0cf68ac3e9a42d1b1a8de4a48361fce84b 100644
--- a/hypha/apply/determinations/models.py
+++ b/hypha/apply/determinations/models.py
@@ -29,21 +29,20 @@ from .options import ACCEPTED, DETERMINATION_CHOICES, REJECTED
 class DeterminationQuerySet(models.QuerySet):
     def staff(self):
         # Designed to be used with a queryset related to submissions
-        return self.all().order_by('-updated_at')
+        return self.all().order_by("-updated_at")
 
     def active(self):
         # Designed to be used with a queryset related to submissions
         return self.get(is_draft=True)
 
     def submitted(self):
-        return self.filter(is_draft=False).order_by('-updated_at')
+        return self.filter(is_draft=False).order_by("-updated_at")
 
     def final(self):
         return self.submitted().filter(outcome__in=[ACCEPTED, REJECTED])
 
 
 class DeterminationFormFieldsMixin(models.Model):
-
     wagtail_reference_index_ignore = True
 
     class Meta:
@@ -86,8 +85,8 @@ class DeterminationForm(DeterminationFormFieldsMixin, models.Model):
     name = models.CharField(max_length=255)
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('form_fields'),
+        FieldPanel("name"),
+        FieldPanel("form_fields"),
     ]
 
     def __str__(self):
@@ -96,16 +95,18 @@ class DeterminationForm(DeterminationFormFieldsMixin, models.Model):
 
 class Determination(DeterminationFormFieldsMixin, AccessFormData, models.Model):
     submission = models.ForeignKey(
-        'funds.ApplicationSubmission',
+        "funds.ApplicationSubmission",
         on_delete=models.CASCADE,
-        related_name='determinations'
+        related_name="determinations",
     )
     author = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         on_delete=models.PROTECT,
     )
 
-    outcome = models.IntegerField(verbose_name=_("Determination"), choices=DETERMINATION_CHOICES, default=1)
+    outcome = models.IntegerField(
+        verbose_name=_("Determination"), choices=DETERMINATION_CHOICES, default=1
+    )
     message = models.TextField(verbose_name=_("Determination message"), blank=True)
 
     # Stores old determination forms data
@@ -114,9 +115,13 @@ class Determination(DeterminationFormFieldsMixin, AccessFormData, models.Model):
     # Stores data submitted via streamfield determination forms
     form_data = models.JSONField(default=dict, encoder=DjangoJSONEncoder)
     is_draft = models.BooleanField(default=False, verbose_name=_("Draft"))
-    created_at = models.DateTimeField(verbose_name=_('Creation time'), auto_now_add=True)
-    updated_at = models.DateTimeField(verbose_name=_('Update time'), auto_now=True)
-    send_notice = models.BooleanField(default=True, verbose_name=_("Send message to applicant"))
+    created_at = models.DateTimeField(
+        verbose_name=_("Creation time"), auto_now_add=True
+    )
+    updated_at = models.DateTimeField(verbose_name=_("Update time"), auto_now=True)
+    send_notice = models.BooleanField(
+        default=True, verbose_name=_("Send message to applicant")
+    )
 
     # Meta: used for migration purposes only
     drupal_id = models.IntegerField(null=True, blank=True, editable=False)
@@ -132,17 +137,20 @@ class Determination(DeterminationFormFieldsMixin, AccessFormData, models.Model):
         return self.get_outcome_display()
 
     def get_absolute_url(self):
-        return reverse('apply:submissions:determinations:detail', args=(self.submission.id, self.id))
+        return reverse(
+            "apply:submissions:determinations:detail",
+            args=(self.submission.id, self.id),
+        )
 
     @property
     def submitted(self):
         return not self.is_draft
 
     def __str__(self):
-        return f'Determination for {self.submission.title} by {self.author!s}'
+        return f"Determination for {self.submission.title} by {self.author!s}"
 
     def __repr__(self):
-        return f'<{self.__class__.__name__}: {str(self.form_data)}>'
+        return f"<{self.__class__.__name__}: {str(self.form_data)}>"
 
     @property
     def use_new_determination_form(self):
@@ -162,13 +170,14 @@ class Determination(DeterminationFormFieldsMixin, AccessFormData, models.Model):
     def detailed_data(self):
         if not self.use_new_determination_form:
             from .views import get_form_for_stage
+
             return get_form_for_stage(self.submission).get_detailed_response(self.data)
         return self.get_detailed_response()
 
     def get_detailed_response(self):
         data = {}
         group = 0
-        data.setdefault(group, {'title': None, 'questions': []})
+        data.setdefault(group, {"title": None, "questions": []})
         for field in self.form_fields:
             if issubclass(
                 field.block.__class__, DeterminationMustIncludeFieldBlock
@@ -178,21 +187,18 @@ class Determination(DeterminationFormFieldsMixin, AccessFormData, models.Model):
                 value = self.form_data[field.id]
             except KeyError:
                 group = group + 1
-                data.setdefault(group, {'title': field.value.source, 'questions': []})
+                data.setdefault(group, {"title": field.value.source, "questions": []})
             else:
-                data[group]['questions'].append(
-                    (field.value.get('field_label'), value)
-                )
+                data[group]["questions"].append((field.value.get("field_label"), value))
         return data
 
 
 @register_setting
 class DeterminationMessageSettings(BaseSiteSetting):
-
     wagtail_reference_index_ignore = True
 
     class Meta:
-        verbose_name = 'determination messages'
+        verbose_name = "determination messages"
 
     request_accepted = RichTextField("Approved", blank=True)
     request_rejected = RichTextField("Dismissed", blank=True)
@@ -216,151 +222,242 @@ class DeterminationMessageSettings(BaseSiteSetting):
 
         for field in self._meta.get_fields():
             if prefix in field.name:
-                key = field.name.replace(prefix, '')
+                key = field.name.replace(prefix, "")
                 message_templates[key] = getattr(self, field.name)
 
         return message_templates
 
     request_tab_panels = [
-        FieldPanel('request_accepted'),
-        FieldPanel('request_rejected'),
-        FieldPanel('request_more_info'),
+        FieldPanel("request_accepted"),
+        FieldPanel("request_rejected"),
+        FieldPanel("request_more_info"),
     ]
 
     concept_tab_panels = [
-        FieldPanel('concept_accepted'),
-        FieldPanel('concept_rejected'),
-        FieldPanel('concept_more_info'),
+        FieldPanel("concept_accepted"),
+        FieldPanel("concept_rejected"),
+        FieldPanel("concept_more_info"),
     ]
     proposal_tab_panels = [
-        FieldPanel('proposal_accepted'),
-        FieldPanel('proposal_rejected'),
-        FieldPanel('proposal_more_info'),
+        FieldPanel("proposal_accepted"),
+        FieldPanel("proposal_rejected"),
+        FieldPanel("proposal_more_info"),
     ]
 
-    edit_handler = TabbedInterface([
-        ObjectList(request_tab_panels, heading=_('Request')),
-        ObjectList(concept_tab_panels, heading=_('Concept note')),
-        ObjectList(proposal_tab_panels, heading=_('Proposal')),
-    ])
+    edit_handler = TabbedInterface(
+        [
+            ObjectList(request_tab_panels, heading=_("Request")),
+            ObjectList(concept_tab_panels, heading=_("Concept note")),
+            ObjectList(proposal_tab_panels, heading=_("Proposal")),
+        ]
+    )
 
 
 @register_setting
 class DeterminationFormSettings(BaseSiteSetting):
     class Meta:
-        verbose_name = 'determination form settings'
-
-    concept_principles_label = models.CharField('label', default='Goals and principles', max_length=255)
-    concept_principles_help_text = models.TextField('help text', blank=True)
-    concept_technical_label = models.CharField('label', default='Technical merit', max_length=255)
-    concept_technical_help_text = models.TextField('help text', blank=True)
-    concept_sustainable_label = models.CharField('label', default='Reasonable, realistic and sustainable', max_length=255)
-    concept_sustainable_help_text = models.TextField('help text', blank=True)
-
-    proposal_liked_label = models.CharField('label', default='Positive aspects', max_length=255)
-    proposal_liked_help_text = models.TextField('help text', blank=True)
-    proposal_concerns_label = models.CharField('label', default='Concerns', max_length=255)
-    proposal_concerns_help_text = models.TextField('help text', blank=True)
-    proposal_red_flags_label = models.CharField('label', default='Items that must be addressed', max_length=255)
-    proposal_red_flags_help_text = models.TextField('help text', blank=True)
-    proposal_overview_label = models.CharField('label', default='Project overview questions and comments', max_length=255)
-    proposal_overview_help_text = models.TextField('help text', blank=True)
-    proposal_objectives_label = models.CharField('label', default='Objectives questions and comments', max_length=255)
-    proposal_objectives_help_text = models.TextField('help text', blank=True)
-    proposal_strategy_label = models.CharField('label', default='Methods and strategy questions and comments', max_length=255)
-    proposal_strategy_help_text = models.TextField('help text', blank=True)
-    proposal_technical_label = models.CharField('label', default='Technical feasibility questions and comments', max_length=255)
-    proposal_technical_help_text = models.TextField('help text', blank=True)
-    proposal_alternative_label = models.CharField('label', default='Alternative analysis - "red teaming" questions and comments', max_length=255)
-    proposal_alternative_help_text = models.TextField('help text', blank=True)
-    proposal_usability_label = models.CharField('label', default='Usability questions and comments', max_length=255)
-    proposal_usability_help_text = models.TextField('help text', blank=True)
-    proposal_sustainability_label = models.CharField('label', default='Sustainability questions and comments', max_length=255)
-    proposal_sustainability_help_text = models.TextField('help text', blank=True)
-    proposal_collaboration_label = models.CharField('label', default='Collaboration questions and comments', max_length=255)
-    proposal_collaboration_help_text = models.TextField('help text', blank=True)
-    proposal_realism_label = models.CharField('label', default='Cost realism questions and comments', max_length=255)
-    proposal_realism_help_text = models.TextField('help text', blank=True)
-    proposal_qualifications_label = models.CharField('label', default='Qualifications questions and comments', max_length=255)
-    proposal_qualifications_help_text = models.TextField('help text', blank=True)
-    proposal_evaluation_label = models.CharField('label', default='Evaluation questions and comments', max_length=255)
-    proposal_evaluation_help_text = models.TextField('help text', blank=True)
+        verbose_name = "determination form settings"
+
+    concept_principles_label = models.CharField(
+        "label", default="Goals and principles", max_length=255
+    )
+    concept_principles_help_text = models.TextField("help text", blank=True)
+    concept_technical_label = models.CharField(
+        "label", default="Technical merit", max_length=255
+    )
+    concept_technical_help_text = models.TextField("help text", blank=True)
+    concept_sustainable_label = models.CharField(
+        "label", default="Reasonable, realistic and sustainable", max_length=255
+    )
+    concept_sustainable_help_text = models.TextField("help text", blank=True)
+
+    proposal_liked_label = models.CharField(
+        "label", default="Positive aspects", max_length=255
+    )
+    proposal_liked_help_text = models.TextField("help text", blank=True)
+    proposal_concerns_label = models.CharField(
+        "label", default="Concerns", max_length=255
+    )
+    proposal_concerns_help_text = models.TextField("help text", blank=True)
+    proposal_red_flags_label = models.CharField(
+        "label", default="Items that must be addressed", max_length=255
+    )
+    proposal_red_flags_help_text = models.TextField("help text", blank=True)
+    proposal_overview_label = models.CharField(
+        "label", default="Project overview questions and comments", max_length=255
+    )
+    proposal_overview_help_text = models.TextField("help text", blank=True)
+    proposal_objectives_label = models.CharField(
+        "label", default="Objectives questions and comments", max_length=255
+    )
+    proposal_objectives_help_text = models.TextField("help text", blank=True)
+    proposal_strategy_label = models.CharField(
+        "label", default="Methods and strategy questions and comments", max_length=255
+    )
+    proposal_strategy_help_text = models.TextField("help text", blank=True)
+    proposal_technical_label = models.CharField(
+        "label", default="Technical feasibility questions and comments", max_length=255
+    )
+    proposal_technical_help_text = models.TextField("help text", blank=True)
+    proposal_alternative_label = models.CharField(
+        "label",
+        default='Alternative analysis - "red teaming" questions and comments',
+        max_length=255,
+    )
+    proposal_alternative_help_text = models.TextField("help text", blank=True)
+    proposal_usability_label = models.CharField(
+        "label", default="Usability questions and comments", max_length=255
+    )
+    proposal_usability_help_text = models.TextField("help text", blank=True)
+    proposal_sustainability_label = models.CharField(
+        "label", default="Sustainability questions and comments", max_length=255
+    )
+    proposal_sustainability_help_text = models.TextField("help text", blank=True)
+    proposal_collaboration_label = models.CharField(
+        "label", default="Collaboration questions and comments", max_length=255
+    )
+    proposal_collaboration_help_text = models.TextField("help text", blank=True)
+    proposal_realism_label = models.CharField(
+        "label", default="Cost realism questions and comments", max_length=255
+    )
+    proposal_realism_help_text = models.TextField("help text", blank=True)
+    proposal_qualifications_label = models.CharField(
+        "label", default="Qualifications questions and comments", max_length=255
+    )
+    proposal_qualifications_help_text = models.TextField("help text", blank=True)
+    proposal_evaluation_label = models.CharField(
+        "label", default="Evaluation questions and comments", max_length=255
+    )
+    proposal_evaluation_help_text = models.TextField("help text", blank=True)
 
     concept_help_text_tab_panels = [
-        MultiFieldPanel([
-            FieldPanel('concept_principles_label'),
-            FieldPanel('concept_principles_help_text'),
-        ], 'concept principles'),
-        MultiFieldPanel([
-            FieldPanel('concept_technical_label'),
-            FieldPanel('concept_technical_help_text'),
-        ], 'concept technical'),
-        MultiFieldPanel([
-            FieldPanel('concept_sustainable_label'),
-            FieldPanel('concept_sustainable_help_text'),
-        ], 'concept sustainable'),
+        MultiFieldPanel(
+            [
+                FieldPanel("concept_principles_label"),
+                FieldPanel("concept_principles_help_text"),
+            ],
+            "concept principles",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("concept_technical_label"),
+                FieldPanel("concept_technical_help_text"),
+            ],
+            "concept technical",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("concept_sustainable_label"),
+                FieldPanel("concept_sustainable_help_text"),
+            ],
+            "concept sustainable",
+        ),
     ]
 
     proposal_help_text_tab_panels = [
-        MultiFieldPanel([
-            FieldPanel('proposal_liked_label'),
-            FieldPanel('proposal_liked_help_text'),
-        ], 'proposal liked'),
-        MultiFieldPanel([
-            FieldPanel('proposal_concerns_label'),
-            FieldPanel('proposal_concerns_help_text'),
-        ], 'proposal concerns'),
-        MultiFieldPanel([
-            FieldPanel('proposal_red_flags_label'),
-            FieldPanel('proposal_red_flags_help_text'),
-        ], 'proposal red flags'),
-        MultiFieldPanel([
-            FieldPanel('proposal_overview_label'),
-            FieldPanel('proposal_overview_help_text'),
-        ], 'proposal overview'),
-        MultiFieldPanel([
-            FieldPanel('proposal_objectives_label'),
-            FieldPanel('proposal_objectives_help_text'),
-        ], 'proposal objectives'),
-        MultiFieldPanel([
-            FieldPanel('proposal_strategy_label'),
-            FieldPanel('proposal_strategy_help_text'),
-        ], 'proposal strategy'),
-        MultiFieldPanel([
-            FieldPanel('proposal_technical_label'),
-            FieldPanel('proposal_technical_help_text'),
-        ], 'proposal technical'),
-        MultiFieldPanel([
-            FieldPanel('proposal_alternative_label'),
-            FieldPanel('proposal_alternative_help_text'),
-        ], 'proposal alternative'),
-        MultiFieldPanel([
-            FieldPanel('proposal_usability_label'),
-            FieldPanel('proposal_usability_help_text'),
-        ], 'proposal usability'),
-        MultiFieldPanel([
-            FieldPanel('proposal_sustainability_label'),
-            FieldPanel('proposal_sustainability_help_text'),
-        ], 'proposal sustainability'),
-        MultiFieldPanel([
-            FieldPanel('proposal_collaboration_label'),
-            FieldPanel('proposal_collaboration_help_text'),
-        ], 'proposal collaboration'),
-        MultiFieldPanel([
-            FieldPanel('proposal_realism_label'),
-            FieldPanel('proposal_realism_help_text'),
-        ], 'proposal realism'),
-        MultiFieldPanel([
-            FieldPanel('proposal_qualifications_label'),
-            FieldPanel('proposal_qualifications_help_text'),
-        ], 'proposal qualifications'),
-        MultiFieldPanel([
-            FieldPanel('proposal_evaluation_label'),
-            FieldPanel('proposal_evaluation_help_text'),
-        ], 'proposal evaluation'),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_liked_label"),
+                FieldPanel("proposal_liked_help_text"),
+            ],
+            "proposal liked",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_concerns_label"),
+                FieldPanel("proposal_concerns_help_text"),
+            ],
+            "proposal concerns",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_red_flags_label"),
+                FieldPanel("proposal_red_flags_help_text"),
+            ],
+            "proposal red flags",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_overview_label"),
+                FieldPanel("proposal_overview_help_text"),
+            ],
+            "proposal overview",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_objectives_label"),
+                FieldPanel("proposal_objectives_help_text"),
+            ],
+            "proposal objectives",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_strategy_label"),
+                FieldPanel("proposal_strategy_help_text"),
+            ],
+            "proposal strategy",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_technical_label"),
+                FieldPanel("proposal_technical_help_text"),
+            ],
+            "proposal technical",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_alternative_label"),
+                FieldPanel("proposal_alternative_help_text"),
+            ],
+            "proposal alternative",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_usability_label"),
+                FieldPanel("proposal_usability_help_text"),
+            ],
+            "proposal usability",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_sustainability_label"),
+                FieldPanel("proposal_sustainability_help_text"),
+            ],
+            "proposal sustainability",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_collaboration_label"),
+                FieldPanel("proposal_collaboration_help_text"),
+            ],
+            "proposal collaboration",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_realism_label"),
+                FieldPanel("proposal_realism_help_text"),
+            ],
+            "proposal realism",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_qualifications_label"),
+                FieldPanel("proposal_qualifications_help_text"),
+            ],
+            "proposal qualifications",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("proposal_evaluation_label"),
+                FieldPanel("proposal_evaluation_help_text"),
+            ],
+            "proposal evaluation",
+        ),
     ]
 
-    edit_handler = TabbedInterface([
-        ObjectList(concept_help_text_tab_panels, heading=_('Concept form')),
-        ObjectList(proposal_help_text_tab_panels, heading=_('Proposal form')),
-    ])
+    edit_handler = TabbedInterface(
+        [
+            ObjectList(concept_help_text_tab_panels, heading=_("Concept form")),
+            ObjectList(proposal_help_text_tab_panels, heading=_("Proposal form")),
+        ]
+    )
diff --git a/hypha/apply/determinations/options.py b/hypha/apply/determinations/options.py
index 1da2980b18ac439b72483f50a62e163cfbb90d17..c70b8eec9bcaa4b25e4015df6c4f67f91308091f 100644
--- a/hypha/apply/determinations/options.py
+++ b/hypha/apply/determinations/options.py
@@ -7,15 +7,15 @@ NEEDS_MORE_INFO = 1
 ACCEPTED = 2
 
 DETERMINATION_CHOICES = (
-    (REJECTED, _('Dismissed')),
-    (NEEDS_MORE_INFO, _('More information requested')),
-    (ACCEPTED, _('Approved')),
+    (REJECTED, _("Dismissed")),
+    (NEEDS_MORE_INFO, _("More information requested")),
+    (ACCEPTED, _("Approved")),
 )
 
 DETERMINATION_TO_OUTCOME = {
-    'rejected': REJECTED,
-    'accepted': ACCEPTED,
-    'more_info': NEEDS_MORE_INFO,
+    "rejected": REJECTED,
+    "accepted": ACCEPTED,
+    "more_info": NEEDS_MORE_INFO,
 }
 
 TRANSITION_DETERMINATION = {
diff --git a/hypha/apply/determinations/templates/determinations/base_determination_form.html b/hypha/apply/determinations/templates/determinations/base_determination_form.html
index 28eb214c60ba959b5ee178531988c68ed315e915..d575ce5492f4e1639a4baafd3c34cf6cbff9d91d 100644
--- a/hypha/apply/determinations/templates/determinations/base_determination_form.html
+++ b/hypha/apply/determinations/templates/determinations/base_determination_form.html
@@ -3,60 +3,55 @@
 {% block title %}{% if object %}{% trans "Edit a Determination" %} {% if object.is_draft %}{% trans "draft" %}{% endif %}{% else %}{% trans "Create a Determination" %}{% endif %}{% endblock %}
 {% block content %}
 
-{% block header %}
-    <div class="admin-bar">
-        <div class="admin-bar__inner">
-            <h2 class="heading heading--no-margin">{% if object %}{% trans "Update Determination draft" %}{% else %}{% trans "Create Determination" %}{% endif %}</h2>
-            <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
-        </div>
-    </div>
-{% endblock %}
-
-{% block form %}
-{% include "forms/includes/form_errors.html" with form=form %}
-
-<div class="wrapper wrapper--medium wrapper--inner-space-medium">
-    {% block determination_information %}
+    {% block header %}
+        {% adminbar %}
+            {% slot header %}{% if object %}{% trans "Update Determination draft" %}{% else %}{% trans "Create Determination" %}{% endif %}{% endslot %}
+            {% slot sub_heading %}{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a>{% endslot %}
+        {% endadminbar %}
     {% endblock %}
 
-    <form class="form form--with-p-tags" action="" method="post" x-data="{ isFormSubmitting: false }" x-on:submit="isFormSubmitting = true">
-        {{ form.media }}
-        {% csrf_token %}
-
-        {% for hidden in form.hidden_fields %}
-            {{ hidden }}
-        {% endfor %}
-
-        {% for field in form.visible_fields %}
-            {# to be replaced with better logic when/if we use stream form #}
-            {% ifchanged field.field.group %}
-                {% for key, value in form.titles.items %}
-                    {% if key == field.field.group %}
-                        <h2>{{ value }}</h2>
+    {% block form %}
+        <section class="my-8">
+            {% include "forms/includes/form_errors.html" with form=form %}
+            {% block determination_information %}
+            {% endblock %}
+            <form class="form max-w-3xl" action="" method="post" x-data="{ isFormSubmitting: false }" x-on:submit="isFormSubmitting = true">
+                {{ form.media }}
+                {% csrf_token %}
+                {% for hidden in form.hidden_fields %}
+                    {{ hidden }}
+                {% endfor %}
+                {% for field in form.visible_fields %}
+                {# to be replaced with better logic when/if we use stream form #}
+                    {% ifchanged field.field.group %}
+                        {% for key, value in form.titles.items %}
+                            {% if key == field.field.group %}
+                                <h2>{{ value }}</h2>
+                            {% endif %}
+                        {% endfor %}
+                    {% endifchanged %}
+                    {% if field.field %}
+                        {% include "forms/includes/field.html" %}
+                    {% else %}
+                        {{ field.block }}
                     {% endif %}
                 {% endfor %}
-            {% endifchanged %}
-
-            {% if field.field %}
-                {% include "forms/includes/field.html" %}
-            {% else %}
-                {{ field.block }}
-            {% endif %}
-        {% endfor %}
-        {% block form_buttons %}
-            {% if form.draft_button_name %}
-                <button class="button button--submit button--top-space button--white" type="submit" name="{{ form.draft_button_name }}" formnovalidate>{% trans "Save draft" %}</button>
-            {% endif %}
-            <button class="button button--submit button--top-space button--primary" :disabled="isFormSubmitting" type="submit" name="submit">{% trans "Submit" %}</button>
-        {% endblock %}
-    </form>
-    {% for type, message in message_templates.items %}
-        <div class="is-hidden" data-type="{{ type }}" id="determination-message-{{ type }}">
-            {{ message }}
-        </div>
-    {% endfor %}
-</div>
-{% endblock %}
+                {% block form_buttons %}
+                    <div class="form__group">
+                        {% if form.draft_button_name %}
+                            <button class="button button--submit button--white" type="submit" name="{{ form.draft_button_name }}" formnovalidate>{% trans "Save draft" %}</button>
+                        {% endif %}
+                        <button class="button button--submit button--primary" :disabled="isFormSubmitting" type="submit" name="submit">{% trans "Submit" %}</button>
+                    </div>
+                {% endblock %}
+            </form>
+            {% for type, message in message_templates.items %}
+                <div class="is-hidden" data-type="{{ type }}" id="determination-message-{{ type }}">
+                    {{ message }}
+                </div>
+            {% endfor %}
+    {% endblock %}
+    </section>
 {% endblock %}
 
 {% block extra_js %}
diff --git a/hypha/apply/determinations/templates/determinations/batch_determination_form.html b/hypha/apply/determinations/templates/determinations/batch_determination_form.html
index 3d4be72628867830683e028b453849b76a90a890..77a17247c3bc801925bc9faab148a0aa1f1c574d 100644
--- a/hypha/apply/determinations/templates/determinations/batch_determination_form.html
+++ b/hypha/apply/determinations/templates/determinations/batch_determination_form.html
@@ -2,46 +2,46 @@
 {% load i18n static %}
 
 {% block extra_css %}
-{{ block.super }}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ block.super }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
 {% endblock %}
 
 {% block header %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Add Batch Determination" %} - {{ action_name }}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h2 class="heading heading--no-margin">{% trans "Add Batch Determination" %} - {{ action_name }}</h2>
+        </div>
     </div>
-</div>
 {% endblock %}
 
 {% block determination_information %}
-<div class="list-reveal list-reveal--determination">
-    <div class="list-reveal__item list-reveal__item--meta list-reveal__item--determination" aria-live="polite">
-        <span>{% trans "Determining" %} {{ submissions.count }} {% trans "submission" %}{{ submissions.count|pluralize }} {% trans "as" %} "{{ action_name }}"</span>
-        <a href="#" class="list-reveal__link js-toggle-batch-list">{% trans "Show" %}</a>
+    <div class="list-reveal list-reveal--determination">
+        <div class="list-reveal__item list-reveal__item--meta list-reveal__item--determination" aria-live="polite">
+            <span>{% trans "Determining" %} {{ submissions.count }} {% trans "submission" %}{{ submissions.count|pluralize }} {% trans "as" %} "{{ action_name }}"</span>
+            <a href="#" class="list-reveal__link js-toggle-batch-list">{% trans "Show" %}</a>
+        </div>
+        <div class="list-reveal__list list-reveal__list--determination js-batch-titles is-closed" aria-live="polite">
+            {% for submission in submissions %}
+                <a href="{% url "funds:submissions:detail" submission.id %}" class="list-reveal__item" target="_blank" rel="noopener noreferrer" title="{{ submission.title }}">
+                    {{ submission.title }}
+                    <svg class="list-reveal__open-icon">
+                        <use xlink:href="#open-in-new-tab"></use>
+                    </svg>
+                </a>
+            {% endfor %}
+        </div>
     </div>
-    <div class="list-reveal__list list-reveal__list--determination js-batch-titles is-closed" aria-live="polite">
-        {% for submission in submissions %}
-        <a href="{% url "funds:submissions:detail" submission.id %}" class="list-reveal__item" target="_blank" rel="noopener noreferrer" title="{{ submission.title }}">
-                {{ submission.title }}
-                <svg class="list-reveal__open-icon">
-                    <use xlink:href="#open-in-new-tab"></use>
-                </svg>
-            </a>
-        {% endfor %}
-    </div>
-</div>
 {% endblock %}
 
 {% block form_buttons %}
-<button data-fancybox data-src="#batch-send-determination" class="button button--submit button--top-space button--primary js-batch-determine-send" type="button">{% trans "Send" %}</button>
-{% include "determinations/includes/batch_determination_confirmation.html" with count=submissions.count %}
-<input type="submit" value="Submit" name="submit" class="is-hidden" />
+    <button data-fancybox data-src="#batch-send-determination" class="button button--submit button--top-space button--primary js-batch-determine-send" type="button">{% trans "Send" %}</button>
+    {% include "determinations/includes/batch_determination_confirmation.html" with count=submissions.count %}
+    <input type="submit" value="Submit" name="submit" class="is-hidden" />
 {% endblock %}
 
 {% block extra_js %}
-{{ block.super }}
-<script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
-<script src="{% static 'js/apply/batch-actions.js' %}"></script>
-<script src="{% static 'js/apply/fancybox-global.js' %}"></script>
+    {{ block.super }}
+    <script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
+    <script src="{% static 'js/apply/batch-actions.js' %}"></script>
+    <script src="{% static 'js/apply/fancybox-global.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/determinations/templates/determinations/determination_detail.html b/hypha/apply/determinations/templates/determinations/determination_detail.html
index 85562bc988662fe261b5cacf07a3b97e8d9d1fa8..68f9e113220c686dfbeb02791dee3dc919f0e1f8 100644
--- a/hypha/apply/determinations/templates/determinations/determination_detail.html
+++ b/hypha/apply/determinations/templates/determinations/determination_detail.html
@@ -1,45 +1,46 @@
 {% extends "base-apply.html" %}
-{% load i18n bleach_tags %}
+{% load i18n bleach_tags heroicons %}
 
 {% block title %}{% trans "Determination for" %} {{ determination.submission.title }}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__submissions-link" href="{{ determination.submission.get_absolute_url }}">
-            {% trans "Back to submission" %}
-        </a>
-        <h2 class="heading heading--no-margin">{% trans "Determination" %} {% if determination.is_draft %}[{% trans "DRAFT" %}]{% endif %}
-        </h2>
-        <h5>{% trans "For" %}: {{ determination.submission.title }}</h5>
-    </div>
-</div>
-
-<div class="grid">
-    <div>
-        <h5 class="determination-outcome">{% trans "Determination" %}: {{ determination.get_outcome_display }}</h5>
-    </div>
-    {% if request.user.is_apply_staff %}
-        <div>
-            <a class="link link--edit-determination is-active" href="{% url 'apply:submissions:determinations:edit' submission_pk=determination.submission.id pk=determination.id %}">
-                {% trans "Edit" %}
-            <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
+    {% adminbar %}
+        {% slot back_link %}
+            <a class="simplified__submissions-link" href="{{ determination.submission.get_absolute_url }}">
+                {% trans "View submission" %}
             </a>
-        </div>
-    {% endif %}
-</div>
+        {% endslot %}
+
+        {% slot header %} {% trans "Determination" %} {% if determination.is_draft %}[{% trans "DRAFT" %}] {% endif %}{% endslot %}
+        {% slot sub_heading %}{% trans "For" %} <a class="text-blue-300 hover:underline" href="{% url "funds:submissions:detail" determination.submission.id %}">{{ determination.submission.title }}</a>{% endslot %}
+
+    {% endadminbar %}
 
-<div class="rich-text rich-text--answers">
-    <h4>{% trans "Determination message" %}</h4>
-    {{ determination.message|bleach }}
-    {% for group in determination.detailed_data.values %}
-        {% if group.title %}
-            <h4>{{ group.title|bleach }}</h4>
+    <div class="flex justify-between pt-2 mb-2 mt-2 max-w-[50em] border-b">
+
+        <h5 class="determination-outcome mb-4">
+            {% trans "Determination" %}: {{ determination.get_outcome_display }}
+        </h5>
+        {% if request.user.is_apply_staff %}
+            <a class="text-blue-500 hover:underline" href="{% url 'apply:submissions:determinations:edit' submission_pk=determination.submission.id pk=determination.id %}">
+                <span class="whitespace-nowrap">
+                    {% trans "Edit" %}{% heroicon_mini "pencil-square" size=18 class="inline ml-1 align-text-bottom" aria_hidden=true %}
+                </span>
+            </a>
         {% endif %}
-        {% for question, answer in group.questions %}
-            <h5>{{ question }}</h5>
-            {% if answer %}{% if answer == True %}{{ answer|yesno:"Agree,Disagree" }}{% else %}{{ answer|bleach }}{% endif %}{% else %}-{% endif %}
+    </div>
+
+    <div class="rich-text rich-text--answers">
+        <h4>{% trans "Determination message" %}</h4>
+        {{ determination.message|bleach }}
+        {% for group in determination.detailed_data.values %}
+            {% if group.title %}
+                <h4>{{ group.title|bleach }}</h4>
+            {% endif %}
+            {% for question, answer in group.questions %}
+                <h5>{{ question }}</h5>
+                {% if answer %}{% if answer == True %}{{ answer|yesno:"Agree,Disagree" }}{% else %}{{ answer|bleach }}{% endif %}{% else %}-{% endif %}
+            {% endfor %}
         {% endfor %}
-    {% endfor %}
-</div>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/determinations/templates/determinations/determination_form.html b/hypha/apply/determinations/templates/determinations/determination_form.html
index f56f62e62dcf5cb2f482be6062d797b5953a00f0..a9743f3dc19cfd158120fc3ea34ac87079972738 100644
--- a/hypha/apply/determinations/templates/determinations/determination_form.html
+++ b/hypha/apply/determinations/templates/determinations/determination_form.html
@@ -2,10 +2,10 @@
 {% load i18n %}
 
 {% block header %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% if object %}{% trans "Edit Determination" %} {% if object.is_draft %}{% trans "draft" %}{% endif %}{% else %}{% trans "Create Determination" %}{% endif %}</h2>
-        <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
-    </div>
-</div>
+    {% adminbar %}
+        {% slot header %}
+            {% if object %}{% trans "Edit determination" %} {% if object.is_draft %}{% trans "draft" %}{% endif %}{% else %}{% trans "Create Determination" %}{% endif %}
+        {% endslot %}
+        {% slot sub_heading %}{% trans "For" %} <a class="text-blue-300 hover:underline" href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a>{% endslot %}
+    {% endadminbar %}
 {% endblock %}
diff --git a/hypha/apply/determinations/templates/determinations/includes/batch_determination_confirmation.html b/hypha/apply/determinations/templates/determinations/includes/batch_determination_confirmation.html
index 86aa4de894c24698683cd59dbe93a1215ed13d54..e1d1b4e4938717c65d5aeb278294cdc1c8b89b03 100644
--- a/hypha/apply/determinations/templates/determinations/includes/batch_determination_confirmation.html
+++ b/hypha/apply/determinations/templates/determinations/includes/batch_determination_confirmation.html
@@ -1,12 +1,12 @@
 {% load i18n %}
 <div class="modal" id="batch-send-determination">
-<h4 class="modal__header-bar modal__header-bar--no-bottom-space">{% trans "Send determination" %}</h4>
-<div class="modal__copy">
-    <p>{% blocktrans %}This determination message will be emailed to {{ count }} applicants and <strong>cannot be undone.</strong>{% endblocktrans %}</p>
-    <p>{% trans "Do you wish to contiune?" %}</p>
+    <h4 class="modal__header-bar modal__header-bar--no-bottom-space">{% trans "Send determination" %}</h4>
+    <div class="modal__copy">
+        <p>{% blocktrans %}This determination message will be emailed to {{ count }} applicants and <strong>cannot be undone.</strong>{% endblocktrans %}</p>
+        <p>{% trans "Do you wish to contiune?" %}</p>
     </div>
     <div class="modal__buttons">
-    <button class="button button--primary button--submit js-batch-determine-confirm" type="submit" name="submit">{% trans "Send determination" %}</button>
-    <button data-fancybox-close class="button button--submit button--white">{% trans "Not yet" %}</button>
+        <button class="button button--primary button--submit js-batch-determine-confirm" type="submit" name="submit">{% trans "Send determination" %}</button>
+        <button data-fancybox-close class="button button--submit button--white">{% trans "Not yet" %}</button>
     </div>
 </div>
diff --git a/hypha/apply/determinations/templatetags/determination_tags.py b/hypha/apply/determinations/templatetags/determination_tags.py
index fc5c8c4ca15dd27baaceef1702574d03cbd86797..38196c798934fcb648588187f799e48d69466359 100644
--- a/hypha/apply/determinations/templatetags/determination_tags.py
+++ b/hypha/apply/determinations/templatetags/determination_tags.py
@@ -9,6 +9,8 @@ register = template.Library()
 @register.filter
 def show_determination_button(user, submission):
     try:
-        return can_edit_determination(user, submission.determinations.active(), submission)
+        return can_edit_determination(
+            user, submission.determinations.active(), submission
+        )
     except ObjectDoesNotExist:
         return can_create_determination(user, submission)
diff --git a/hypha/apply/determinations/tests/factories.py b/hypha/apply/determinations/tests/factories.py
index dcba3df8c3b27b1189de358fd413e736a4e0218e..4231e660ddb3a4535307dceab17c3c1f35877eac 100644
--- a/hypha/apply/determinations/tests/factories.py
+++ b/hypha/apply/determinations/tests/factories.py
@@ -19,9 +19,11 @@ from ..views import get_form_for_stage
 class DeterminationDataFactory(factory.DictFactory):
     @classmethod
     def _build(cls, model_class, *args, **kwargs):
-        submission = kwargs.pop('submission')
-        action = kwargs.pop('action')
-        form = get_form_for_stage(submission)(user=submission.lead, action=action, submission=submission)
+        submission = kwargs.pop("submission")
+        action = kwargs.pop("action")
+        form = get_form_for_stage(submission)(
+            user=submission.lead, action=action, submission=submission
+        )
         form_fields = {}
 
         form_fields = {
@@ -44,14 +46,17 @@ class DeterminationFactory(factory.django.DjangoModelFactory):
         submitted = factory.Trait(is_draft=False)
 
     submission = factory.SubFactory(ApplicationSubmissionFactory)
-    author = factory.SelfAttribute('submission.lead')
+    author = factory.SelfAttribute("submission.lead")
 
     outcome = NEEDS_MORE_INFO
-    message = factory.Faker('sentence')
-    data = factory.Dict({
-        'submission': factory.SelfAttribute('..submission'),
-        'action': factory.SelfAttribute('..outcome'),
-    }, dict_factory=DeterminationDataFactory)
+    message = factory.Faker("sentence")
+    data = factory.Dict(
+        {
+            "submission": factory.SelfAttribute("..submission"),
+            "action": factory.SelfAttribute("..outcome"),
+        },
+        dict_factory=DeterminationDataFactory,
+    )
 
     is_draft = True
 
@@ -75,18 +80,20 @@ class SendNoticeBlockFactory(FormFieldBlockFactory):
         model = SendNoticeBlock
 
 
-DeterminationFormFieldsFactory = StreamFieldUUIDFactory({
-    'char': CharFieldBlockFactory,
-    'text': RichTextFieldBlockFactory,
-    'send_notice': SendNoticeBlockFactory,
-    'determination': DeterminationBlockFactory,
-    'message': DeterminationMessageBlockFactory,
-})
+DeterminationFormFieldsFactory = StreamFieldUUIDFactory(
+    {
+        "char": CharFieldBlockFactory,
+        "text": RichTextFieldBlockFactory,
+        "send_notice": SendNoticeBlockFactory,
+        "determination": DeterminationBlockFactory,
+        "message": DeterminationMessageBlockFactory,
+    }
+)
 
 
 class DeterminationFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = DeterminationForm
 
-    name = factory.Faker('word')
+    name = factory.Faker("word")
     form_fields = DeterminationFormFieldsFactory
diff --git a/hypha/apply/determinations/tests/test_admin_views.py b/hypha/apply/determinations/tests/test_admin_views.py
index 2c14c63f228fae118acb5cf7dced01d257ea3d8d..77edad3fb9a4ecff0b5a9e8aaf85b466c89db42b 100644
--- a/hypha/apply/determinations/tests/test_admin_views.py
+++ b/hypha/apply/determinations/tests/test_admin_views.py
@@ -13,111 +13,124 @@ class TestCreateDeterminationFormView(TestCase):
     def setUpTestData(cls):
         cls.user = SuperUserFactory()
         cls.label_help_text_data = {
-            'field_label': factory.Faker('sentence').evaluate(None, None, {'locale': None}),
-            'help_text': factory.Faker('sentence').evaluate(None, None, {'locale': None})
+            "field_label": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
+            "help_text": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
         }
         cls.send_notice_data = {
-            'field_label': factory.Faker('sentence').evaluate(None, None, {'locale': None}),
-            'help_text': factory.Faker('sentence').evaluate(None, None, {'locale': None}),
-            'default_value': True,
+            "field_label": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
+            "help_text": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
+            "default_value": True,
         }
-        cls.name = factory.Faker('name').evaluate(None, None, {'locale': None})
+        cls.name = factory.Faker("name").evaluate(None, None, {"locale": None})
 
     def create_page(self, data):
         self.client.force_login(self.user)
-        url = reverse('determinations_determinationform_modeladmin_create')
+        url = reverse("determinations_determinationform_modeladmin_create")
         response = self.client.post(url, data=data, secure=True, follow=True)
         return response
 
     def test_name_field_required(self):
-        data = {'name': ['']}
+        data = {"name": [""]}
         form_field_data = create_form_fields_data(
             {
-                'determination': self.label_help_text_data,
-                'message': self.label_help_text_data,
-                'send_notice': self.send_notice_data,
+                "determination": self.label_help_text_data,
+                "message": self.label_help_text_data,
+                "send_notice": self.send_notice_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'This field is required.'
-        for message in get_messages(response.context['request']):
+        expected_message = "This field is required."
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(DeterminationForm.objects.count(), 0)
 
     def test_determination_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'message': self.label_help_text_data,
-                'send_notice': self.send_notice_data,
+                "message": self.label_help_text_data,
+                "send_notice": self.send_notice_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Determination'
-        for message in get_messages(response.context['request']):
+        expected_message = (
+            "You are missing the following required fields: Determination"
+        )
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(DeterminationForm.objects.count(), 0)
 
     def test_message_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'determination': self.label_help_text_data,
-                'send_notice': self.send_notice_data,
+                "determination": self.label_help_text_data,
+                "send_notice": self.send_notice_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Message'
-        for message in get_messages(response.context['request']):
+        expected_message = "You are missing the following required fields: Message"
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(DeterminationForm.objects.count(), 0)
 
     def test_send_notice_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'determination': self.label_help_text_data,
-                'message': self.label_help_text_data,
+                "determination": self.label_help_text_data,
+                "message": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Send Notice'
-        for message in get_messages(response.context['request']):
+        expected_message = "You are missing the following required fields: Send Notice"
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(DeterminationForm.objects.count(), 0)
 
     def test_field_label_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'determination': {},
-                'message': {},
-                'send_notice': self.send_notice_data,
+                "determination": {},
+                "message": {},
+                "send_notice": self.send_notice_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_messages_list = ['Label cannot be empty for Determination', 'Label cannot be empty for Message']
-        for message in get_messages(response.context['request']):
+        expected_messages_list = [
+            "Label cannot be empty for Determination",
+            "Label cannot be empty for Message",
+        ]
+        for message in get_messages(response.context["request"]):
             self.assertIn(str(message.message).strip(), expected_messages_list)
         self.assertEqual(DeterminationForm.objects.count(), 0)
 
     def test_form_creation(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'determination': self.label_help_text_data,
-                'message': self.label_help_text_data,
-                'send_notice': self.send_notice_data,
+                "determination": self.label_help_text_data,
+                "message": self.label_help_text_data,
+                "send_notice": self.send_notice_data,
             }
         )
         data.update(form_field_data)
diff --git a/hypha/apply/determinations/tests/test_views.py b/hypha/apply/determinations/tests/test_views.py
index f4b7e3fabc124dea30e56d88c13fec4fd4678b94..c62c4c968dc298a2c73b67b30d93b8bb5a9a6a4a 100644
--- a/hypha/apply/determinations/tests/test_views.py
+++ b/hypha/apply/determinations/tests/test_views.py
@@ -18,23 +18,29 @@ from .factories import DeterminationFactory
 
 class StaffDeterminationsTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:determinations:{}'
-    base_view_name = 'detail'
+    url_name = "funds:submissions:determinations:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.submission.id, 'pk': instance.pk}
+        return {"submission_pk": instance.submission.id, "pk": instance.pk}
 
     def test_can_access_determination(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion')
-        determination = DeterminationFactory(submission=submission, author=self.user, submitted=True)
+        submission = ApplicationSubmissionFactory(status="in_discussion")
+        determination = DeterminationFactory(
+            submission=submission, author=self.user, submitted=True
+        )
         response = self.get_page(determination)
         self.assertContains(response, determination.submission.title)
         self.assertContains(response, self.user.full_name)
         self.assertContains(response, submission.get_absolute_url())
 
     def test_lead_can_access_determination(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
-        determination = DeterminationFactory(submission=submission, author=self.user, submitted=True)
+        submission = ApplicationSubmissionFactory(
+            status="in_discussion", lead=self.user
+        )
+        determination = DeterminationFactory(
+            submission=submission, author=self.user, submitted=True
+        )
         response = self.get_page(determination)
         self.assertContains(response, determination.submission.title)
         self.assertContains(response, self.user.full_name)
@@ -43,85 +49,121 @@ class StaffDeterminationsTestCase(BaseViewTestCase):
 
 class DeterminationFormTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:determinations:{}'
-    base_view_name = 'detail'
+    url_name = "funds:submissions:determinations:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id, 'pk': instance.determinations.first().id}
+        return {"submission_pk": instance.id, "pk": instance.determinations.first().id}
 
     def get_form_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def test_can_access_form_if_lead(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
-        response = self.get_page(submission, 'form')
+        submission = ApplicationSubmissionFactory(
+            status="in_discussion", lead=self.user
+        )
+        response = self.get_page(submission, "form")
         self.assertContains(response, submission.title)
         self.assertContains(response, submission.get_absolute_url())
 
     def test_cant_access_wrong_status(self):
-        submission = ApplicationSubmissionFactory(status='rejected')
-        response = self.get_page(submission, 'form')
+        submission = ApplicationSubmissionFactory(status="rejected")
+        response = self.get_page(submission, "form")
         self.assertRedirects(response, self.absolute_url(submission.get_absolute_url()))
 
     def test_cant_resubmit_determination(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
-        determination = DeterminationFactory(submission=submission, author=self.user, accepted=True, submitted=True)
-        response = self.post_page(submission, {'data': 'value', 'outcome': determination.outcome}, 'form')
+        submission = ApplicationSubmissionFactory(
+            status="in_discussion", lead=self.user
+        )
+        determination = DeterminationFactory(
+            submission=submission, author=self.user, accepted=True, submitted=True
+        )
+        response = self.post_page(
+            submission, {"data": "value", "outcome": determination.outcome}, "form"
+        )
         self.assertRedirects(response, self.absolute_url(submission.get_absolute_url()))
 
     def test_can_edit_draft_determination(self):
-        submission = ApplicationSubmissionFactory(status='post_review_discussion', lead=self.user)
-        response = self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'Accepted determination draft message',
-            'save_draft': True,
-        }, 'form')
-        self.assertContains(response, '[Draft] Approved')
-        self.assertContains(response, self.url(submission, 'form', absolute=False))
-        self.assertNotContains(response, 'Accepted determination draft message')
+        submission = ApplicationSubmissionFactory(
+            status="post_review_discussion", lead=self.user
+        )
+        response = self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "Accepted determination draft message",
+                "save_draft": True,
+            },
+            "form",
+        )
+        self.assertContains(response, "[Draft] Approved")
+        self.assertContains(response, self.url(submission, "form", absolute=False))
+        self.assertNotContains(response, "Accepted determination draft message")
 
     def test_cant_edit_submitted_more_info(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="in_discussion", lead=self.user
+        )
         DeterminationFactory(submission=submission, author=self.user, submitted=True)
-        response = self.get_page(submission, 'form')
-        self.assertNotContains(response, 'Update ')
+        response = self.get_page(submission, "form")
+        self.assertNotContains(response, "Update ")
 
     @override_settings(PROJECTS_ENABLED=False)
     def test_can_edit_draft_determination_if_not_lead(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion')
-        determination = DeterminationFactory(submission=submission, author=self.user, accepted=True)
-        response = self.post_page(submission, {'data': 'value', 'outcome': determination.outcome}, 'form')
-        self.assertContains(response, 'Approved')
+        submission = ApplicationSubmissionFactory(status="in_discussion")
+        determination = DeterminationFactory(
+            submission=submission, author=self.user, accepted=True
+        )
+        response = self.post_page(
+            submission, {"data": "value", "outcome": determination.outcome}, "form"
+        )
+        self.assertContains(response, "Approved")
         self.assertRedirects(response, self.absolute_url(submission.get_absolute_url()))
 
     def test_can_edit_draft_determination_if_not_lead_with_projects(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion')
-        determination = DeterminationFactory(submission=submission, author=self.user, accepted=True)
-        response = self.post_page(submission, {'data': 'value', 'outcome': determination.outcome}, 'form')
-        self.assertContains(response, 'Approved')
+        submission = ApplicationSubmissionFactory(status="in_discussion")
+        determination = DeterminationFactory(
+            submission=submission, author=self.user, accepted=True
+        )
+        response = self.post_page(
+            submission, {"data": "value", "outcome": determination.outcome}, "form"
+        )
+        self.assertContains(response, "Approved")
         self.assertRedirects(response, self.absolute_url(submission.get_absolute_url()))
 
     def test_sends_message_if_requires_more_info(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="in_discussion", lead=self.user
+        )
         determination = DeterminationFactory(submission=submission, author=self.user)
-        determination_message = 'This is the message'
+        determination_message = "This is the message"
         self.post_page(
             submission,
-            {'data': 'value', 'outcome': determination.outcome, 'message': determination_message},
-            'form',
+            {
+                "data": "value",
+                "outcome": determination.outcome,
+                "message": determination_message,
+            },
+            "form",
         )
         self.assertEqual(Activity.comments.count(), 1)
         self.assertEqual(Activity.comments.first().message, determination_message)
 
     def test_can_progress_stage_via_determination(self):
-        submission = ApplicationSubmissionFactory(status='concept_review_discussion', workflow_stages=2, lead=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="concept_review_discussion", workflow_stages=2, lead=self.user
+        )
 
-        response = self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'You are invited to submit a proposal',
-        }, 'form')
+        response = self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "You are invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
@@ -129,22 +171,28 @@ class DeterminationFormTestCase(BaseViewTestCase):
 
         # Cannot use self.url() as that uses a different base.
         url = submission_next.get_absolute_url()
-        self.assertRedirects(response, self.factory.get(url, secure=True).build_absolute_uri(url))
-        self.assertEqual(submission_original.status, 'invited_to_proposal')
-        self.assertEqual(submission_next.status, 'draft_proposal')
+        self.assertRedirects(
+            response, self.factory.get(url, secure=True).build_absolute_uri(url)
+        )
+        self.assertEqual(submission_original.status, "invited_to_proposal")
+        self.assertEqual(submission_next.status, "draft_proposal")
 
     def test_first_stage_accepted_determination_does_not_create_project(self):
         submission = ApplicationSubmissionFactory(
-            status='concept_review_discussion',
+            status="concept_review_discussion",
             workflow_stages=2,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'You are invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "You are invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
@@ -154,21 +202,25 @@ class DeterminationFormTestCase(BaseViewTestCase):
 
         # Confirm a Project was not created for either submission since it's
         # not in the final stage of its workflow.
-        self.assertFalse(hasattr(submission_original, 'project'))
-        self.assertFalse(hasattr(submission_next, 'project'))
+        self.assertFalse(hasattr(submission_original, "project"))
+        self.assertFalse(hasattr(submission_next, "project"))
 
     def test_first_stage_rejected_determination_does_not_create_project(self):
         submission = ApplicationSubmissionFactory(
-            status='concept_review_discussion',
+            status="concept_review_discussion",
             workflow_stages=2,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': REJECTED,
-            'message': 'You are not invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": REJECTED,
+                "message": "You are not invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
@@ -180,20 +232,24 @@ class DeterminationFormTestCase(BaseViewTestCase):
 
         # Confirm a Project was not created for the original
         # ApplicationSubmission.
-        self.assertFalse(hasattr(submission_original, 'project'))
+        self.assertFalse(hasattr(submission_original, "project"))
 
     def test_second_stage_accepted_determination_creates_project(self):
         submission = ApplicationSubmissionFactory(
-            status='proposal_determination',
+            status="proposal_determination",
             workflow_stages=2,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'You are invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "You are invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
@@ -204,21 +260,25 @@ class DeterminationFormTestCase(BaseViewTestCase):
         # applications flow.
         self.assertIsNone(submission_next)
 
-        self.assertTrue(hasattr(submission_original, 'project'))
-        self.assertFalse(hasattr(submission_next, 'project'))
+        self.assertTrue(hasattr(submission_original, "project"))
+        self.assertFalse(hasattr(submission_next, "project"))
 
     def test_second_stage_rejected_determination_does_not_create_project(self):
         submission = ApplicationSubmissionFactory(
-            status='proposal_determination',
+            status="proposal_determination",
             workflow_stages=2,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': REJECTED,
-            'message': 'You are not invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": REJECTED,
+                "message": "You are not invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
@@ -228,95 +288,111 @@ class DeterminationFormTestCase(BaseViewTestCase):
         # applications flow.
         self.assertIsNone(submission_next)
 
-        self.assertFalse(hasattr(submission_original, 'project'))
+        self.assertFalse(hasattr(submission_original, "project"))
 
     def test_single_stage_accepted_determination_creates_project(self):
         submission = ApplicationSubmissionFactory(
-            status='post_review_discussion',
+            status="post_review_discussion",
             workflow_stages=1,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'You are invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "You are invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
         submission_next = submission_original.next
 
         self.assertIsNone(submission_next)
-        self.assertTrue(hasattr(submission_original, 'project'))
+        self.assertTrue(hasattr(submission_original, "project"))
 
     def test_single_stage_rejected_determination_does_not_create_project(self):
         submission = ApplicationSubmissionFactory(
-            status='post_review_discussion',
+            status="post_review_discussion",
             workflow_stages=1,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': REJECTED,
-            'message': 'You are not invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": REJECTED,
+                "message": "You are not invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
         submission_next = submission_original.next
 
         self.assertIsNone(submission_next)
-        self.assertFalse(hasattr(submission_original, 'project'))
+        self.assertFalse(hasattr(submission_original, "project"))
 
     @override_settings(PROJECTS_AUTO_CREATE=False)
     def test_disabling_project_auto_creation_stops_projects_being_created(self):
         submission = ApplicationSubmissionFactory(
-            status='post_review_discussion',
+            status="post_review_discussion",
             workflow_stages=1,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'You are invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "You are invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
         submission_next = submission_original.next
 
         self.assertIsNone(submission_next)
-        self.assertFalse(hasattr(submission_original, 'project'))
+        self.assertFalse(hasattr(submission_original, "project"))
 
     @override_settings(PROJECTS_ENABLED=False, PROJECTS_AUTO_CREATE=True)
     def test_disabling_projects_ignores_auto_creation_setting(self):
         submission = ApplicationSubmissionFactory(
-            status='post_review_discussion',
+            status="post_review_discussion",
             workflow_stages=1,
             lead=self.user,
         )
 
-        self.post_page(submission, {
-            'data': 'value',
-            'outcome': ACCEPTED,
-            'message': 'You are invited to submit a proposal',
-        }, 'form')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "outcome": ACCEPTED,
+                "message": "You are invited to submit a proposal",
+            },
+            "form",
+        )
 
         # Cant use refresh from DB with FSM
         submission_original = self.refresh(submission)
         submission_next = submission_original.next
 
         self.assertIsNone(submission_next)
-        self.assertFalse(hasattr(submission_original, 'project'))
+        self.assertFalse(hasattr(submission_original, "project"))
 
 
 class BatchDeterminationTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:determinations:{}'
-    base_view_name = 'batch'
+    url_name = "funds:submissions:determinations:{}"
+    base_view_name = "batch"
 
     def dummy_request(self, path):
         request = RequestFactory().get(path)
@@ -328,99 +404,114 @@ class BatchDeterminationTestCase(BaseViewTestCase):
         return request
 
     def test_cant_access_without_submissions(self):
-        url = self.url(None) + '?action=rejected'
+        url = self.url(None) + "?action=rejected"
         response = self.client.get(url, follow=True, secure=True)
-        self.assertRedirects(response, self.url_from_pattern('apply:submissions:list'))
-        self.assertEqual(len(response.context['messages']), 1)
+        self.assertRedirects(response, self.url_from_pattern("apply:submissions:list"))
+        self.assertEqual(len(response.context["messages"]), 1)
 
     def test_cant_access_without_action(self):
         submission = ApplicationSubmissionFactory()
-        url = self.url(None) + '?submissions=' + str(submission.id)
+        url = self.url(None) + "?submissions=" + str(submission.id)
         response = self.client.get(url, follow=True, secure=True)
-        self.assertRedirects(response, self.url_from_pattern('apply:submissions:list'))
-        self.assertEqual(len(response.context['messages']), 1)
+        self.assertRedirects(response, self.url_from_pattern("apply:submissions:list"))
+        self.assertEqual(len(response.context["messages"]), 1)
 
     def test_can_submit_batch_determination(self):
         submissions = ApplicationSubmissionFactory.create_batch(4)
 
-        url = self.url(None) + '?submissions=' + ','.join([str(submission.id) for submission in submissions]) + '&action=rejected'
+        url = (
+            self.url(None)
+            + "?submissions="
+            + ",".join([str(submission.id) for submission in submissions])
+            + "&action=rejected"
+        )
         data = {
-            'submissions': [submission.id for submission in submissions],
-            'data': 'some data',
-            'outcome': REJECTED,
-            'message': 'Sorry',
-            'author': self.user.id,
+            "submissions": [submission.id for submission in submissions],
+            "data": "some data",
+            "outcome": REJECTED,
+            "message": "Sorry",
+            "author": self.user.id,
         }
 
         response = self.client.post(url, data, secure=True, follow=True)
 
         for submission in submissions:
             submission = self.refresh(submission)
-            self.assertEqual(submission.status, 'rejected')
+            self.assertEqual(submission.status, "rejected")
             self.assertEqual(submission.determinations.count(), 1)
 
-        self.assertRedirects(response, self.url_from_pattern('apply:submissions:list'))
+        self.assertRedirects(response, self.url_from_pattern("apply:submissions:list"))
 
     def test_can_submit_batch_determination_more_info_comment(self):
         submissions = ApplicationSubmissionFactory.create_batch(4)
 
-        url = self.url(None) + '?submissions=' + ','.join([str(submission.id) for submission in submissions]) + '&action=more_info'
+        url = (
+            self.url(None)
+            + "?submissions="
+            + ",".join([str(submission.id) for submission in submissions])
+            + "&action=more_info"
+        )
         data = {
-            'submissions': [submission.id for submission in submissions],
-            'data': 'some data',
-            'outcome': NEEDS_MORE_INFO,
-            'message': 'More Info',
-            'author': self.user.id,
+            "submissions": [submission.id for submission in submissions],
+            "data": "some data",
+            "outcome": NEEDS_MORE_INFO,
+            "message": "More Info",
+            "author": self.user.id,
         }
 
         response = self.client.post(url, data, secure=True, follow=True)
 
         for submission in submissions:
             submission = self.refresh(submission)
-            self.assertEqual(submission.status, 'more_info')
+            self.assertEqual(submission.status, "more_info")
             self.assertEqual(submission.determinations.count(), 1)
             self.assertEqual(submission.activities.comments().count(), 1)
 
-        self.assertRedirects(response, self.url_from_pattern('apply:submissions:list'))
+        self.assertRedirects(response, self.url_from_pattern("apply:submissions:list"))
 
     def test_sets_next_on_redirect(self):
-        test_path = '/a/path/?with=query&a=sting'
-        request = RequestFactory().get('', PATH_INFO=test_path)
+        test_path = "/a/path/?with=query&a=sting"
+        request = RequestFactory().get("", PATH_INFO=test_path)
         redirect = BatchDeterminationCreateView.should_redirect(
             request,
             ApplicationSubmission.objects.none(),
-            ['rejected'],
+            ["rejected"],
         )
         url = urllib.parse.urlparse(redirect.url)
         query = urllib.parse.parse_qs(url.query)
-        next_path = urllib.parse.unquote_plus(query['next'][0])
+        next_path = urllib.parse.unquote_plus(query["next"][0])
         self.assertEqual(next_path, test_path)
 
     def test_success_redirects_if_exists(self):
-        test_path = '/a/path/?with=query&a=sting'
+        test_path = "/a/path/?with=query&a=sting"
         view = BatchDeterminationCreateView()
-        view.request = self.dummy_request('?next=' + urllib.parse.quote_plus(test_path))
+        view.request = self.dummy_request("?next=" + urllib.parse.quote_plus(test_path))
         redirect_url = view.get_success_url()
         self.assertEqual(redirect_url, test_path)
 
     def test_success_if_no_next(self):
         view = BatchDeterminationCreateView()
-        view.request = self.dummy_request('')
+        view.request = self.dummy_request("")
         redirect_url = view.get_success_url()
-        self.assertEqual(redirect_url, reverse_lazy('apply:submissions:list'))
+        self.assertEqual(redirect_url, reverse_lazy("apply:submissions:list"))
 
     def test_message_created_if_determination_exists(self):
         submissions = ApplicationSubmissionFactory.create_batch(2)
 
         DeterminationFactory(submission=submissions[0], accepted=True, is_draft=False)
 
-        url = self.url(None) + '?submissions=' + ','.join([str(submission.id) for submission in submissions]) + '&action=rejected'
+        url = (
+            self.url(None)
+            + "?submissions="
+            + ",".join([str(submission.id) for submission in submissions])
+            + "&action=rejected"
+        )
         data = {
-            'submissions': [submission.id for submission in submissions],
-            'data': 'some data',
-            'outcome': REJECTED,
-            'message': 'Sorry',
-            'author': self.user.id,
+            "submissions": [submission.id for submission in submissions],
+            "data": "some data",
+            "outcome": REJECTED,
+            "message": "Sorry",
+            "author": self.user.id,
         }
 
         response = self.client.post(url, data, secure=True, follow=True)
@@ -433,39 +524,43 @@ class BatchDeterminationTestCase(BaseViewTestCase):
 
         # 5 base - 2 x django messages, 1 x activity feed, 1 x email, 1 x slack
         # plus 1 extra for unable to determine
-        self.assertEqual(len(response.context['messages']), 6)
+        self.assertEqual(len(response.context["messages"]), 6)
 
 
 class UserDeterminationFormTestCase(BaseViewTestCase):
     user_factory = UserFactory
-    url_name = 'funds:submissions:determinations:{}'
-    base_view_name = 'detail'
+    url_name = "funds:submissions:determinations:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def test_cant_access_form(self):
-        submission = ApplicationSubmissionFactory(status='in_discussion')
-        response = self.get_page(submission, 'form')
+        submission = ApplicationSubmissionFactory(status="in_discussion")
+        response = self.get_page(submission, "form")
         self.assertEqual(response.status_code, 403)
 
 
 class EditDeterminationFormTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:determinations:{}'
-    base_view_name = 'detail'
+    url_name = "funds:submissions:determinations:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id, 'pk': instance.determinations.first().id}
+        return {"submission_pk": instance.id, "pk": instance.determinations.first().id}
 
     def test_can_edit_determination(self):
-        submission = ApplicationSubmissionFactory(status='rejected')
+        submission = ApplicationSubmissionFactory(status="rejected")
         determination = DeterminationFactory(submission=submission)
 
-        self.post_page(submission, {
-            'data': 'value',
-            'message': 'You are accepted.',
-        }, 'edit')
+        self.post_page(
+            submission,
+            {
+                "data": "value",
+                "message": "You are accepted.",
+            },
+            "edit",
+        )
 
         determination_original = self.refresh(determination)
-        self.assertEqual(determination_original.message, 'You are accepted.')
+        self.assertEqual(determination_original.message, "You are accepted.")
diff --git a/hypha/apply/determinations/urls.py b/hypha/apply/determinations/urls.py
index 92a7ba4c2f2518606b7da2226f72b45a218a4ae5..291caf47a4619b67bd7068eacaf7a328d6bca73c 100644
--- a/hypha/apply/determinations/urls.py
+++ b/hypha/apply/determinations/urls.py
@@ -7,11 +7,23 @@ from .views import (
     DeterminationEditView,
 )
 
-app_name = 'determinations'
+app_name = "determinations"
 
 urlpatterns = [
-    path('<int:submission_pk>/determination/<int:pk>/', DeterminationDetailView.as_view(), name="detail"),
-    path('<int:submission_pk>/determination/<int:pk>/edit/', DeterminationEditView.as_view(), name="edit"),
-    path('<int:submission_pk>/determination/add/', DeterminationCreateOrUpdateView.as_view(), name="form"),
-    path('batch-determine/', BatchDeterminationCreateView.as_view(), name='batch')
+    path(
+        "<int:submission_pk>/determination/<int:pk>/",
+        DeterminationDetailView.as_view(),
+        name="detail",
+    ),
+    path(
+        "<int:submission_pk>/determination/<int:pk>/edit/",
+        DeterminationEditView.as_view(),
+        name="edit",
+    ),
+    path(
+        "<int:submission_pk>/determination/add/",
+        DeterminationCreateOrUpdateView.as_view(),
+        name="form",
+    ),
+    path("batch-determine/", BatchDeterminationCreateView.as_view(), name="batch"),
 ]
diff --git a/hypha/apply/determinations/utils.py b/hypha/apply/determinations/utils.py
index 0e8c7ad785ee05e96c11ec73349dce44fdc20d67..cdf224106088fff3ff0d967456af9d6f70ffd569 100644
--- a/hypha/apply/determinations/utils.py
+++ b/hypha/apply/determinations/utils.py
@@ -1,15 +1,14 @@
 from .options import DETERMINATION_TO_OUTCOME, TRANSITION_DETERMINATION
 
-OUTCOME_TO_DETERMINATION = {
-    v: k
-    for k, v in DETERMINATION_TO_OUTCOME.items()
-}
+OUTCOME_TO_DETERMINATION = {v: k for k, v in DETERMINATION_TO_OUTCOME.items()}
 
 
 def outcome_from_actions(actions):
     outcomes = [TRANSITION_DETERMINATION[action] for action in actions]
     if len(set(outcomes)) != 1:
-        raise ValueError('Mixed determination transitions selected - please contact an admin')
+        raise ValueError(
+            "Mixed determination transitions selected - please contact an admin"
+        )
     outcome = outcomes[0]
     return OUTCOME_TO_DETERMINATION[outcome]
 
diff --git a/hypha/apply/determinations/views.py b/hypha/apply/determinations/views.py
index f9338a1df2fa06af53551ff07668fe4da1559560..31c77f2d682fa324cde4f2360b426138d6c32d5c 100644
--- a/hypha/apply/determinations/views.py
+++ b/hypha/apply/determinations/views.py
@@ -45,12 +45,9 @@ from .utils import (
 
 
 def get_form_for_stages(submissions):
-    forms = [
-        get_form_for_stage(submission, batch=True)
-        for submission in submissions
-    ]
+    forms = [get_form_for_stage(submission, batch=True) for submission in submissions]
     if len(set(forms)) != 1:
-        raise ValueError('Submissions expect different forms - please contact admin')
+        raise ValueError("Submissions expect different forms - please contact admin")
 
     return forms[0]
 
@@ -65,17 +62,14 @@ def get_form_for_stage(submission, batch=False, edit=False):
 
 
 def get_fields_for_stages(submissions):
-    forms_fields = [
-        get_fields_for_stage(submission)
-        for submission in submissions
-    ]
+    forms_fields = [get_fields_for_stage(submission) for submission in submissions]
     if not all(i == forms_fields[0] for i in forms_fields):
-        raise ValueError('Submissions expect different forms - please contact admin')
+        raise ValueError("Submissions expect different forms - please contact admin")
     return forms_fields[0]
 
 
 def get_fields_for_stage(submission):
-    forms = submission.get_from_parent('determination_forms').all()
+    forms = submission.get_from_parent("determination_forms").all()
     index = submission.workflow.stages.index(submission.stage)
     try:
         return forms[index].form.form_fields
@@ -89,7 +83,7 @@ def outcome_choices_for_phase(submission, user):
     We need to filter out non-matching choices.
     i.e. a transition to In Review is not a determination, while Needs more info or Rejected are.
     """
-    available_choices = [('', _('-- No determination selected -- '))]
+    available_choices = [("", _("-- No determination selected -- "))]
     choices = dict(DETERMINATION_CHOICES)
     for transition_name in determination_actions(user, submission):
         try:
@@ -101,26 +95,28 @@ def outcome_choices_for_phase(submission, user):
     return available_choices
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class BatchDeterminationCreateView(BaseStreamForm, CreateView):
     submission_form_class = BatchDeterminationForm
-    template_name = 'determinations/batch_determination_form.html'
+    template_name = "determinations/batch_determination_form.html"
 
     def dispatch(self, *args, **kwargs):
         self._submissions = None
         if not self.get_action() or not self.get_submissions():
-            messages.warning(self.request, 'Improperly configured request, please try again.')
+            messages.warning(
+                self.request, "Improperly configured request, please try again."
+            )
             return HttpResponseRedirect(self.get_success_url())
 
         return super().dispatch(*args, **kwargs)
 
     def get_action(self):
-        return self.request.GET.get('action', '')
+        return self.request.GET.get("action", "")
 
     def get_submissions(self):
         if not self._submissions:
             try:
-                submission_ids = self.request.GET.get('submissions').split(',')
+                submission_ids = self.request.GET.get("submissions").split(",")
             except AttributeError:
                 return None
             try:
@@ -132,11 +128,11 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
-        kwargs['submissions'] = self.get_submissions()
-        kwargs['action'] = self.get_action()
-        kwargs['site'] = Site.find_for_request(self.request)
-        kwargs.pop('instance')
+        kwargs["user"] = self.request.user
+        kwargs["submissions"] = self.get_submissions()
+        kwargs["action"] = self.get_action()
+        kwargs["site"] = Site.find_for_request(self.request)
+        kwargs.pop("instance")
         return kwargs
 
     def check_all_submissions_are_of_same_type(self, submissions):
@@ -148,7 +144,15 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
         We can not create batch determination with submissions using two different
         type of forms.
         """
-        return len({submission.is_determination_form_attached for submission in submissions}) == 1
+        return (
+            len(
+                {
+                    submission.is_determination_form_attached
+                    for submission in submissions
+                }
+            )
+            == 1
+        )
 
     def get_form_class(self):
         submissions = self.get_submissions()
@@ -168,7 +172,7 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
                 # Outcome is already set in case of batch determinations so we do
                 # not need to render this field.
                 form_fields.pop(field_block.id)
-        return type('WagtailStreamForm', (self.submission_form_class,), form_fields)
+        return type("WagtailStreamForm", (self.submission_form_class,), form_fields)
 
     def get_defined_fields(self):
         return get_fields_for_stages(self.get_submissions())
@@ -205,14 +209,20 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
             except KeyError:
                 messages.warning(
                     self.request,
-                    'Unable to determine submission "{title}" as already determined'.format(title=submission.title),
+                    'Unable to determine submission "{title}" as already determined'.format(
+                        title=submission.title
+                    ),
                 )
             else:
                 if submission.is_determination_form_attached:
                     determination.form_fields = self.get_defined_fields()
-                    determination.message = form.cleaned_data[determination.message_field.id]
+                    determination.message = form.cleaned_data[
+                        determination.message_field.id
+                    ]
                     determination.save()
-                transition = transition_from_outcome(form.cleaned_data.get('outcome'), submission)
+                transition = transition_from_outcome(
+                    form.cleaned_data.get("outcome"), submission
+                )
 
                 if determination.outcome == NEEDS_MORE_INFO:
                     # We keep a record of the message sent to the user in the comment
@@ -224,7 +234,9 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
                         related_object=determination,
                     )
 
-                submission.perform_transition(transition, self.request.user, request=self.request, notify=False)
+                submission.perform_transition(
+                    transition, self.request.user, request=self.request, notify=False
+                )
         return response
 
     @classmethod
@@ -239,54 +251,75 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
             if excluded:
                 messages.warning(
                     request,
-                    _('A determination already exists for the following submissions and they have been excluded: {submissions}').format(
-                        submissions=', '.join([submission.title for submission in excluded]),
-                    )
+                    _(
+                        "A determination already exists for the following submissions and they have been excluded: {submissions}"
+                    ).format(
+                        submissions=", ".join(
+                            [submission.title for submission in excluded]
+                        ),
+                    ),
                 )
 
-            submissions = submissions.exclude(id__in=[submission.id for submission in excluded])
+            submissions = submissions.exclude(
+                id__in=[submission.id for submission in excluded]
+            )
             action = outcome_from_actions(actions)
             return HttpResponseRedirect(
-                reverse_lazy('apply:submissions:determinations:batch') +
-                "?action=" + action +
-                "&submissions=" + ','.join([str(submission.id) for submission in submissions]) +
-                "&next=" + parse.quote_plus(request.get_full_path()),
+                reverse_lazy("apply:submissions:determinations:batch")
+                + "?action="
+                + action
+                + "&submissions="
+                + ",".join([str(submission.id) for submission in submissions])
+                + "&next="
+                + parse.quote_plus(request.get_full_path()),
             )
         elif set(actions) != non_determine_states:
-            raise ValueError('Inconsistent states provided - please talk to an admin')
+            raise ValueError("Inconsistent states provided - please talk to an admin")
 
     def get_success_url(self):
         try:
-            return self.request.GET['next']
+            return self.request.GET["next"]
         except KeyError:
-            return reverse_lazy('apply:submissions:list')
+            return reverse_lazy("apply:submissions:list")
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
     submission_form_class = DeterminationModelForm
     model = Determination
-    template_name = 'determinations/determination_form.html'
+    template_name = "determinations/determination_form.html"
 
     def get_object(self, queryset=None):
         return self.model.objects.get(submission=self.submission, is_draft=True)
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
 
         if not can_create_determination(request.user, self.submission):
-            return self.back_to_submission(_('You do not have permission to create that determination.'))
+            return self.back_to_submission(
+                _("You do not have permission to create that determination.")
+            )
 
         if has_final_determination(self.submission):
-            return self.back_to_submission(_('A final determination has already been submitted.'))
+            return self.back_to_submission(
+                _("A final determination has already been submitted.")
+            )
 
         try:
             self.determination = self.get_object()
         except Determination.DoesNotExist:
             pass
         else:
-            if not can_edit_determination(request.user, self.determination, self.submission):
-                return self.back_to_detail(_('There is a draft determination you do not have permission to edit.'))
+            if not can_edit_determination(
+                request.user, self.determination, self.submission
+            ):
+                return self.back_to_detail(
+                    _(
+                        "There is a draft determination you do not have permission to edit."
+                    )
+                )
 
         return super().dispatch(request, *args, **kwargs)
 
@@ -306,15 +339,18 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
         field_blocks_ids = {}
         if self.submission.is_determination_form_attached:
             for field_block in self.get_defined_fields():
-                if isinstance(field_block.block, DeterminationBlock) or \
-                        isinstance(field_block.block, DeterminationMessageBlock):
+                if isinstance(field_block.block, DeterminationBlock) or isinstance(
+                    field_block.block, DeterminationMessageBlock
+                ):
                     field_blocks_ids[field_block.block_type] = field_block.id
 
         return super().get_context_data(
             submission=self.submission,
-            message_templates=determination_messages.get_for_stage(self.submission.stage.name),
+            message_templates=determination_messages.get_for_stage(
+                self.submission.stage.name
+            ),
             field_blocks_ids=field_blocks_ids,
-            **kwargs
+            **kwargs,
         )
 
     def get_defined_fields(self):
@@ -322,14 +358,14 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
-        kwargs['submission'] = self.submission
-        kwargs['action'] = self.request.GET.get('action')
-        kwargs['site'] = Site.find_for_request(self.request)
+        kwargs["user"] = self.request.user
+        kwargs["submission"] = self.submission
+        kwargs["action"] = self.request.GET.get("action")
+        kwargs["site"] = Site.find_for_request(self.request)
         return kwargs
 
     def get_form_class(self):
-        action = self.request.GET.get('action')
+        action = self.request.GET.get("action")
         if not self.submission.is_determination_form_attached:
             # If new determination forms are not attached use the old ones.
             return get_form_for_stage(self.submission)
@@ -344,31 +380,40 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
                 form_fields[field_block.id].choices = outcome_choices
                 if action:
                     # Set initial outcome based on action.
-                    form_fields[field_block.id].initial = TRANSITION_DETERMINATION[action]
+                    form_fields[field_block.id].initial = TRANSITION_DETERMINATION[
+                        action
+                    ]
         form_fields = self.add_proposal_form_field(form_fields, action)
-        return type('WagtailStreamForm', (self.submission_form_class,), form_fields)
+        return type("WagtailStreamForm", (self.submission_form_class,), form_fields)
 
     def add_proposal_form_field(self, fields, action):
         stages_num = len(self.submission.workflow.stages)
         if stages_num > 1 and self.submission.stage == Concept:
-            second_stage_forms = self.submission.get_from_parent('forms').filter(stage=2)
+            second_stage_forms = self.submission.get_from_parent("forms").filter(
+                stage=2
+            )
             if second_stage_forms.count() > 1:
                 proposal_form_choices = [
                     (index, form.form.name)
                     for index, form in enumerate(second_stage_forms)
                 ]
-                proposal_form_choices.insert(0, ('', _('-- No proposal form selected -- ')))
-                proposal_form_help_text = _('Select the proposal form only for determination approval')
-                if action == 'invited_to_proposal':
-                    proposal_form_help_text = _('Select the proposal form to use for proposal stage.')
-                fields['proposal_form'] = forms.ChoiceField(
-                    label=_('Proposal Form'),
+                proposal_form_choices.insert(
+                    0, ("", _("-- No proposal form selected -- "))
+                )
+                proposal_form_help_text = _(
+                    "Select the proposal form only for determination approval"
+                )
+                if action == "invited_to_proposal":
+                    proposal_form_help_text = _(
+                        "Select the proposal form to use for proposal stage."
+                    )
+                fields["proposal_form"] = forms.ChoiceField(
+                    label=_("Proposal Form"),
                     choices=proposal_form_choices,
                     help_text=proposal_form_help_text,
-                    required=True if action == 'invited_to_proposal' else False,
-                    disabled=False if action == 'invited_to_proposal' else True,
+                    required=True if action == "invited_to_proposal" else False,
                 )
-                fields.move_to_end('proposal_form', last=False)
+                fields.move_to_end("proposal_form", last=False)
         return fields
 
     def get_success_url(self):
@@ -390,8 +435,10 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
                 submission=self.object.submission,
                 related=self.object,
             )
-            proposal_form = form.cleaned_data.get('proposal_form')
-            transition = transition_from_outcome(int(self.object.outcome), self.submission)
+            proposal_form = form.cleaned_data.get("proposal_form")
+            transition = transition_from_outcome(
+                int(self.object.outcome), self.submission
+            )
 
             if self.object.outcome == NEEDS_MORE_INFO:
                 # We keep a record of the message sent to the user in the comment
@@ -435,54 +482,76 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
                     # Add a helpful message to prompt them to select the correct option
                     messages.warning(
                         request,
-                        _('A determination of "{current}" exists but you tried to progress as "{target}"').format(
+                        _(
+                            'A determination of "{current}" exists but you tried to progress as "{target}"'
+                        ).format(
                             current=determination.get_outcome_display(),
                             target=action,
-                        )
+                        ),
                     )
 
         if action in DETERMINATION_OUTCOMES:
-            return HttpResponseRedirect(reverse_lazy(
-                'apply:submissions:determinations:form',
-                args=(submission.id,)) + "?action=" + action
+            return HttpResponseRedirect(
+                reverse_lazy(
+                    "apply:submissions:determinations:form", args=(submission.id,)
+                )
+                + "?action="
+                + action
             )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class AdminDeterminationDetailView(DetailView):
     model = Determination
 
     def get_object(self, queryset=None):
-        return get_object_or_404(self.model, submission=self.submission, id=self.kwargs['pk'])
+        return get_object_or_404(
+            self.model, submission=self.submission, id=self.kwargs["pk"]
+        )
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
         determination = self.get_object()
 
-        if can_edit_determination(request.user, determination, self.submission) and determination.is_draft:
-            return HttpResponseRedirect(reverse_lazy('apply:submissions:determinations:form', args=(self.submission.id,)))
+        if (
+            can_edit_determination(request.user, determination, self.submission)
+            and determination.is_draft
+        ):
+            return HttpResponseRedirect(
+                reverse_lazy(
+                    "apply:submissions:determinations:form", args=(self.submission.id,)
+                )
+            )
 
         return super().dispatch(request, *args, **kwargs)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReviewerDeterminationDetailView(DetailView):
     model = Determination
 
     def get_object(self, queryset=None):
-        return get_object_or_404(self.model, submission=self.submission, id=self.kwargs['pk'])
+        return get_object_or_404(
+            self.model, submission=self.submission, id=self.kwargs["pk"]
+        )
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
         determination = self.get_object()
 
         if not determination.submitted:
-            return HttpResponseRedirect(reverse_lazy('apply:submissions:detail', args=(self.submission.id,)))
+            return HttpResponseRedirect(
+                reverse_lazy("apply:submissions:detail", args=(self.submission.id,))
+            )
 
         return super().dispatch(request, *args, **kwargs)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class PartnerDeterminationDetailView(DetailView):
     model = Determination
 
@@ -490,20 +559,24 @@ class PartnerDeterminationDetailView(DetailView):
         return super().get_queryset().filter(submission=self.submission)
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, pk=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, pk=self.kwargs["submission_pk"]
+        )
 
         if self.submission.user == request.user:
             return ApplicantDeterminationDetailView.as_view()(request, *args, **kwargs)
 
         # Only allow partners in the submission they are added as partners
-        partner_has_access = self.submission.partners.filter(pk=request.user.pk).exists()
+        partner_has_access = self.submission.partners.filter(
+            pk=request.user.pk
+        ).exists()
         if not partner_has_access:
             raise PermissionDenied
 
         return super().dispatch(request, *args, **kwargs)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class CommunityDeterminationDetailView(DetailView):
     model = Determination
 
@@ -511,7 +584,9 @@ class CommunityDeterminationDetailView(DetailView):
         return super().get_queryset().filter(submission=self.submission)
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, pk=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, pk=self.kwargs["submission_pk"]
+        )
 
         if self.submission.user == request.user:
             return ApplicantDeterminationDetailView.as_view()(request, *args, **kwargs)
@@ -523,22 +598,31 @@ class CommunityDeterminationDetailView(DetailView):
         return super().dispatch(request, *args, **kwargs)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ApplicantDeterminationDetailView(DetailView):
     model = Determination
 
     def get_object(self, queryset=None):
-        return get_object_or_404(self.model, submission=self.submission, id=self.kwargs['pk'])
+        return get_object_or_404(
+            self.model, submission=self.submission, id=self.kwargs["pk"]
+        )
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
         determination = self.get_object()
 
         if request.user != self.submission.user:
             raise PermissionDenied
 
         if determination.is_draft:
-            return HttpResponseRedirect(reverse_lazy('apply:submissions:determinations:detail', args=(self.submission.id,)))
+            return HttpResponseRedirect(
+                reverse_lazy(
+                    "apply:submissions:determinations:detail",
+                    args=(self.submission.id,),
+                )
+            )
 
         return super().dispatch(request, *args, **kwargs)
 
@@ -551,11 +635,11 @@ class DeterminationDetailView(ViewDispatcher):
     applicant_view = ApplicantDeterminationDetailView
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class DeterminationEditView(BaseStreamForm, UpdateView):
     submission_form_class = DeterminationModelForm
     model = Determination
-    template_name = 'determinations/determination_form.html'
+    template_name = "determinations/determination_form.html"
     raise_exception = True
 
     def get_context_data(self, **kwargs):
@@ -568,7 +652,7 @@ class DeterminationEditView(BaseStreamForm, UpdateView):
             message_templates=determination_messages.get_for_stage(
                 determination.submission.stage.name
             ),
-            **kwargs
+            **kwargs,
         )
 
     def get_defined_fields(self):
@@ -578,13 +662,13 @@ class DeterminationEditView(BaseStreamForm, UpdateView):
     def get_form_kwargs(self):
         determiantion = self.get_object()
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
-        kwargs['submission'] = determiantion.submission
-        kwargs['edit'] = True
-        kwargs['action'] = self.request.GET.get('action')
-        kwargs['site'] = Site.find_for_request(self.request)
+        kwargs["user"] = self.request.user
+        kwargs["submission"] = determiantion.submission
+        kwargs["edit"] = True
+        kwargs["action"] = self.request.GET.get("action")
+        kwargs["site"] = Site.find_for_request(self.request)
         if self.object:
-            kwargs['initial'] = self.object.form_data
+            kwargs["initial"] = self.object.form_data
         return kwargs
 
     def get_form_class(self):
@@ -598,7 +682,7 @@ class DeterminationEditView(BaseStreamForm, UpdateView):
                 # Outcome can not be edited after being set once, so we do not
                 # need to render this field.
                 form_fields.pop(field_block.id)
-        return type('WagtailStreamForm', (self.submission_form_class,), form_fields)
+        return type("WagtailStreamForm", (self.submission_form_class,), form_fields)
 
     def form_valid(self, form):
         super().form_valid(form)
diff --git a/hypha/apply/flags/migrations/0001_initial.py b/hypha/apply/flags/migrations/0001_initial.py
index dccfeb0966fc578042b8c854fb7d0469c41f53d3..6a2fd55a63ddd4fb98a7218caed0eab06d8396ae 100644
--- a/hypha/apply/flags/migrations/0001_initial.py
+++ b/hypha/apply/flags/migrations/0001_initial.py
@@ -6,24 +6,50 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('contenttypes', '0002_remove_content_type_name'),
+        ("contenttypes", "0002_remove_content_type_name"),
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Flag',
+            name="Flag",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('target_object_id', models.PositiveIntegerField()),
-                ('timestamp', models.DateTimeField(auto_now_add=True)),
-                ('type', models.CharField(choices=[('staff', 'Staff'), ('user', 'User')], default='user', max_length=15)),
-                ('target_content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("target_object_id", models.PositiveIntegerField()),
+                ("timestamp", models.DateTimeField(auto_now_add=True)),
+                (
+                    "type",
+                    models.CharField(
+                        choices=[("staff", "Staff"), ("user", "User")],
+                        default="user",
+                        max_length=15,
+                    ),
+                ),
+                (
+                    "target_content_type",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="contenttypes.ContentType",
+                    ),
+                ),
+                (
+                    "user",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/flags/models.py b/hypha/apply/flags/models.py
index d5fc714824329fb20bea0a9fd739e14da78d123f..8806afce58c03676573ac744b69a7317263f4168 100644
--- a/hypha/apply/flags/models.py
+++ b/hypha/apply/flags/models.py
@@ -5,19 +5,19 @@ from django.db import models
 
 
 class Flag(models.Model):
-    STAFF = 'staff'
-    USER = 'user'
+    STAFF = "staff"
+    USER = "user"
     FLAG_TYPES = {
-        STAFF: 'Staff',
-        USER: 'User',
+        STAFF: "Staff",
+        USER: "User",
     }
     target_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
     target_object_id = models.PositiveIntegerField()
-    target = GenericForeignKey('target_content_type', 'target_object_id')
+    target = GenericForeignKey("target_content_type", "target_object_id")
     timestamp = models.DateTimeField(auto_now_add=True)
     type = models.CharField(
         choices=FLAG_TYPES.items(),
-        default='user',
+        default="user",
         max_length=15,
     )
     user = models.ForeignKey(
diff --git a/hypha/apply/flags/templates/flags/flags.html b/hypha/apply/flags/templates/flags/flags.html
index 965444aae2200184d7f1268b5c5c3e399e4d4f13..ef79dcc588dda821d64979a9301275ff6c46813a 100644
--- a/hypha/apply/flags/templates/flags/flags.html
+++ b/hypha/apply/flags/templates/flags/flags.html
@@ -5,7 +5,7 @@
         <button class="button button--primary button--half-width button--flag {% if submission.is_archive %}is-disabled{% endif %} {% if submission|flagged_by:user %} flagged{% endif %}" data-id="{{ submission.id }}" data-type="user">{% trans "Flag" %}</button>
 
         {% if request.user.is_apply_staff %}
-        <button class="button button--primary button--half-width button--flag {% if submission.is_archive %}is-disabled{% endif %} {% if submission|flagged_staff %} flagged{% endif %}" data-id="{{ submission.id }}" data-type="staff">{% trans "Staff flag" %}</button>
+            <button class="button button--primary button--half-width button--flag {% if submission.is_archive %}is-disabled{% endif %} {% if submission|flagged_staff %} flagged{% endif %}" data-id="{{ submission.id }}" data-type="staff">{% trans "Staff flag" %}</button>
         {% endif %}
     </div>
 </div>
diff --git a/hypha/apply/flags/urls.py b/hypha/apply/flags/urls.py
index ea85dab48e78434371ba1f9759fdefd3cee083f1..dab946dc5e0e314e027a5f40d42a9baceb475c2a 100644
--- a/hypha/apply/flags/urls.py
+++ b/hypha/apply/flags/urls.py
@@ -2,8 +2,12 @@ from django.urls import path
 
 from .views import FlagSubmissionCreateView
 
-app_name = 'flags'
+app_name = "flags"
 
 urlpatterns = [
-    path('<int:submission_pk>/<type>/flag/', FlagSubmissionCreateView.as_view(), name="create_submission_flag"),
+    path(
+        "<int:submission_pk>/<type>/flag/",
+        FlagSubmissionCreateView.as_view(),
+        name="create_submission_flag",
+    ),
 ]
diff --git a/hypha/apply/flags/views.py b/hypha/apply/flags/views.py
index e6572c236c268e508afe6f67113c8e29bc03ebc1..2de2db491a5376b43e24a8f2d530488cdbb4af0e 100644
--- a/hypha/apply/flags/views.py
+++ b/hypha/apply/flags/views.py
@@ -10,12 +10,12 @@ from hypha.apply.funds.models import ApplicationSubmission
 from .models import Flag
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class FlagSubmissionCreateView(UserPassesTestMixin, View):
     model = Flag
 
     def post(self, request, type, submission_pk):
-        if request.headers.get('x-requested-with') != 'XMLHttpRequest':
+        if request.headers.get("x-requested-with") != "XMLHttpRequest":
             return HttpResponseNotAllowed()
 
         # Only staff can create staff flags.
@@ -24,7 +24,12 @@ class FlagSubmissionCreateView(UserPassesTestMixin, View):
 
         submission_type = ContentType.objects.get_for_model(ApplicationSubmission)
         # Trying to get a flag from the table, or create a new one
-        flag, created = self.model.objects.get_or_create(user=request.user, target_object_id=submission_pk, target_content_type=submission_type, type=type)
+        flag, created = self.model.objects.get_or_create(
+            user=request.user,
+            target_object_id=submission_pk,
+            target_content_type=submission_type,
+            type=type,
+        )
         # If no new flag has been created,
         # Then we believe that the request was to delete the flag.
         if not created:
diff --git a/hypha/apply/funds/admin.py b/hypha/apply/funds/admin.py
index 929e6fffe83f1dd87d4228595f0b828410ece348..9c6241c987febfc04f68f8e648bf5e8b3ddf2f74 100644
--- a/hypha/apply/funds/admin.py
+++ b/hypha/apply/funds/admin.py
@@ -40,7 +40,7 @@ from .models import (
 
 class BaseRoundAdmin(ModelAdmin):
     choose_parent_view_class = RoundFundChooserView
-    choose_parent_template_name = 'funds/admin/parent_chooser.html'
+    choose_parent_template_name = "funds/admin/parent_chooser.html"
     button_helper_class = ButtonsWithPreview
 
     def fund(self, obj):
@@ -49,13 +49,20 @@ class BaseRoundAdmin(ModelAdmin):
 
 class RoundAdmin(BaseRoundAdmin, RelatedFormsMixin):
     model = Round
-    menu_icon = 'repeat'
-    list_display = ('title', 'fund', 'start_date', 'end_date', 'application_forms', 'review_forms')
+    menu_icon = "repeat"
+    list_display = (
+        "title",
+        "fund",
+        "start_date",
+        "end_date",
+        "application_forms",
+        "review_forms",
+    )
     list_filter = (RoundStateListFilter,)
     url_helper_class = RoundAdminURLHelper
 
     def fund(self, obj):
-        url = self.url_helper.get_action_url('edit', obj.fund.id)
+        url = self.url_helper.get_action_url("edit", obj.fund.id)
         url_tag = f'<a href="{url}">{obj.fund}</a>'
         return mark_safe(url_tag)
 
@@ -78,51 +85,50 @@ class ScreeningStatusPermissionHelper(PermissionHelper):
 
 class ScreeningStatusAdmin(ModelAdmin):
     model = ScreeningStatus
-    menu_icon = 'tag'
-    list_display = ('title', 'yes', 'default')
+    menu_icon = "tag"
+    list_display = ("title", "yes", "default")
     permission_helper_class = ScreeningStatusPermissionHelper
-    list_display = ('title', 'yes', 'default')
+    list_display = ("title", "yes", "default")
 
 
 class SealedRoundAdmin(BaseRoundAdmin):
     model = SealedRound
-    menu_icon = 'lock'
-    menu_label = 'Sealed Rounds'
-    list_display = ('title', 'fund', 'start_date', 'end_date')
+    menu_icon = "lock"
+    menu_label = "Sealed Rounds"
+    list_display = ("title", "fund", "start_date", "end_date")
 
 
 class FundAdmin(ModelAdmin, RelatedFormsMixin):
     model = FundType
-    menu_icon = 'doc-empty'
-    menu_label = 'Funds'
-    list_display = ('title', 'application_forms', 'review_forms', 'determination_forms')
+    menu_icon = "doc-empty"
+    menu_label = "Funds"
+    list_display = ("title", "application_forms", "review_forms", "determination_forms")
 
 
 class RFPAdmin(ModelAdmin):
     model = RequestForPartners
-    menu_icon = 'group'
-    menu_label = 'Request For Partners'
+    menu_icon = "group"
+    menu_label = "Request For Partners"
 
 
 class LabAdmin(ModelAdmin, RelatedFormsMixin):
     model = LabType
-    menu_icon = 'doc-empty'
-    menu_label = 'Labs'
-    list_display = ('title', 'application_forms', 'review_forms', 'determination_forms')
+    menu_icon = "doc-empty"
+    menu_label = "Labs"
+    list_display = ("title", "application_forms", "review_forms", "determination_forms")
 
 
 class ReviewerRoleAdmin(ModelAdmin):
     model = ReviewerRole
-    menu_icon = 'group'
-    menu_label = 'Reviewer Roles'
+    menu_icon = "group"
+    menu_label = "Reviewer Roles"
 
 
 class DeletePermission(PermissionHelper, ListRelatedMixin):
-
     related_models = [
-        ('applicationbaseform', 'application'),
-        ('roundbaseform', 'round'),
-        ('labbaseform', 'lab'),
+        ("applicationbaseform", "application"),
+        ("roundbaseform", "round"),
+        ("labbaseform", "lab"),
     ]
 
     def user_can_delete_obj(self, user, obj):
@@ -133,8 +139,8 @@ class DeletePermission(PermissionHelper, ListRelatedMixin):
 
 class ApplicationFormAdmin(ListRelatedMixin, ModelAdmin):
     model = ApplicationForm
-    menu_icon = 'form'
-    list_display = ('name', 'used_by')
+    menu_icon = "form"
+    list_display = ("name", "used_by")
     list_filter = (FormsFundRoundListFilter,)
     permission_helper_class = DeletePermission
     button_helper_class = ApplicationFormButtonHelper
@@ -142,13 +148,13 @@ class ApplicationFormAdmin(ListRelatedMixin, ModelAdmin):
     edit_view_class = EditApplicationFormView
 
     related_models = [
-        ('applicationbaseform', 'application'),
-        ('roundbaseform', 'round'),
-        ('labbaseform', 'lab'),
+        ("applicationbaseform", "application"),
+        ("roundbaseform", "round"),
+        ("labbaseform", "lab"),
     ]
 
     def copy_form_view(self, request, instance_pk):
-        kwargs = {'model_admin': self, 'form_pk': instance_pk}
+        kwargs = {"model_admin": self, "form_pk": instance_pk}
         view_class = CopyApplicationFormViewClass
         return view_class.as_view(**kwargs)(request)
 
@@ -156,11 +162,11 @@ class ApplicationFormAdmin(ListRelatedMixin, ModelAdmin):
         """Add the url for creating form copy."""
         urls = super().get_admin_urls_for_registration()
         copy_form_url = re_path(
-            self.url_helper.get_action_url_pattern('copy_form'),
+            self.url_helper.get_action_url_pattern("copy_form"),
             self.copy_form_view,
-            name=self.url_helper.get_action_url_name('copy_form')
+            name=self.url_helper.get_action_url_name("copy_form"),
         )
-        return urls + (copy_form_url, )
+        return urls + (copy_form_url,)
 
 
 class ApplicationSettingAdmin(SettingModelAdmin):
@@ -172,8 +178,8 @@ class ReviewerSettingAdmin(SettingModelAdmin):
 
 
 class ApplyAdminGroup(ModelAdminGroup):
-    menu_label = 'Apply'
-    menu_icon = 'folder-open-inverse'
+    menu_label = "Apply"
+    menu_icon = "folder-open-inverse"
     items = (
         RoundAdmin,
         SealedRoundAdmin,
diff --git a/hypha/apply/funds/admin_forms.py b/hypha/apply/funds/admin_forms.py
index cc3a7611e1532fc3f8bb346c0e1688d2b5c87360..72c9ef998dcc5cb4231cb2af3d4e39b706e7d074 100644
--- a/hypha/apply/funds/admin_forms.py
+++ b/hypha/apply/funds/admin_forms.py
@@ -11,18 +11,22 @@ class WorkflowFormAdminForm(WagtailAdminPageForm):
     def clean(self):
         cleaned_data = super().clean()
 
-        workflow = WORKFLOWS[cleaned_data['workflow_name']]
-        application_forms = self.formsets['forms']
-        review_forms = self.formsets['review_forms']
-        external_review_forms = self.formsets['external_review_forms']
-        determination_forms = self.formsets['determination_forms']
+        workflow = WORKFLOWS[cleaned_data["workflow_name"]]
+        application_forms = self.formsets["forms"]
+        review_forms = self.formsets["review_forms"]
+        external_review_forms = self.formsets["external_review_forms"]
+        determination_forms = self.formsets["determination_forms"]
         number_of_stages = len(workflow.stages)
 
         self.validate_application_forms(workflow, application_forms)
         if number_of_stages == 1:
             self.validate_stages_equal_forms(workflow, application_forms)
-        self.validate_stages_equal_forms(workflow, review_forms, form_type="Review form")
-        self.validate_stages_equal_forms(workflow, external_review_forms, form_type="External Review form")
+        self.validate_stages_equal_forms(
+            workflow, review_forms, form_type="Review form"
+        )
+        self.validate_stages_equal_forms(
+            workflow, external_review_forms, form_type="External Review form"
+        )
         self.validate_stages_equal_forms(
             workflow, determination_forms, form_type="Determination form"
         )
@@ -35,8 +39,8 @@ class WorkflowFormAdminForm(WagtailAdminPageForm):
         Now, staff can select a proposal form from multiple forms list in stage 2.
         """
         if forms.is_valid():
-            valid_forms = [form for form in forms if not form.cleaned_data['DELETE']]
-            forms_stages = [form.cleaned_data['stage'] for form in valid_forms]
+            valid_forms = [form for form in forms if not form.cleaned_data["DELETE"]]
+            forms_stages = [form.cleaned_data["stage"] for form in valid_forms]
             stages_counter = Counter(forms_stages)
 
             number_of_stages = len(workflow.stages)
@@ -45,10 +49,10 @@ class WorkflowFormAdminForm(WagtailAdminPageForm):
             for stage in range(1, number_of_stages + 1):
                 is_form_present = True if stages_counter.get(stage, 0) > 0 else False
                 if not is_form_present:
-                    error_list.append(f'Please provide form for Stage {stage}.')
+                    error_list.append(f"Please provide form for Stage {stage}.")
 
                 if stage == 1 and stages_counter.get(stage, 0) > 1:
-                    error_list.append('Only 1 form can be selected for 1st Stage.')
+                    error_list.append("Only 1 form can be selected for 1st Stage.")
 
             if error_list:
                 self.add_error(
@@ -58,20 +62,20 @@ class WorkflowFormAdminForm(WagtailAdminPageForm):
 
     def validate_stages_equal_forms(self, workflow, forms, form_type="form"):
         if forms.is_valid():
-            valid_forms = [form for form in forms if not form.cleaned_data['DELETE']]
+            valid_forms = [form for form in forms if not form.cleaned_data["DELETE"]]
             number_of_forms = len(valid_forms)
-            plural_form = 's' if number_of_forms > 1 else ''
+            plural_form = "s" if number_of_forms > 1 else ""
 
             number_of_stages = len(workflow.stages)
-            plural_stage = 's' if number_of_stages > 1 else ''
+            plural_stage = "s" if number_of_stages > 1 else ""
 
             # External Review Form is optional and should be single if provided
             if form_type == "External Review form":
                 if number_of_forms > 1:
                     self.add_error(
                         None,
-                        f'Number of {form_type}s should not be more than one: '
-                        f'{number_of_forms} {form_type}{plural_form} provided',
+                        f"Number of {form_type}s should not be more than one: "
+                        f"{number_of_forms} {form_type}{plural_form} provided",
                     )
                     return
                 else:
@@ -80,32 +84,34 @@ class WorkflowFormAdminForm(WagtailAdminPageForm):
             if number_of_forms != number_of_stages:
                 self.add_error(
                     None,
-                    f'Number of {form_type}s does not match number of stages: '
-                    f'{number_of_stages} stage{plural_stage} and {number_of_forms} '
-                    f'{form_type}{plural_form} provided',
+                    f"Number of {form_type}s does not match number of stages: "
+                    f"{number_of_stages} stage{plural_stage} and {number_of_forms} "
+                    f"{form_type}{plural_form} provided",
                 )
 
                 for form in valid_forms[number_of_stages:]:
-                    form.add_error('form', 'Exceeds required number of forms for stage, please remove.')
+                    form.add_error(
+                        "form",
+                        "Exceeds required number of forms for stage, please remove.",
+                    )
 
 
 class RoundBasePageAdminForm(WagtailAdminPageForm):
     def clean(self):
         cleaned_data = super().clean()
 
-        start_date = cleaned_data['start_date']
+        start_date = cleaned_data["start_date"]
         if not start_date:
-            self.add_error('start_date', 'Please select start date.')
+            self.add_error("start_date", "Please select start date.")
 
         return cleaned_data
 
 
 class ScreeningStatusAdminForm(WagtailAdminModelForm):
-
     def save(self, commit=True):
-        default = self.cleaned_data['default']
-        yes = self.cleaned_data['yes']
-        ScreeningStatus = apps.get_model('funds', 'ScreeningStatus')
+        default = self.cleaned_data["default"]
+        yes = self.cleaned_data["yes"]
+        ScreeningStatus = apps.get_model("funds", "ScreeningStatus")
         if default:
             try:
                 default_screening = ScreeningStatus.objects.get(
@@ -116,7 +122,9 @@ class ScreeningStatusAdminForm(WagtailAdminModelForm):
             else:
                 screening = super().save(commit)
                 if default_screening.id != screening.id:
-                    submissions = ApplicationSubmission.objects.filter(screening_statuses__id=default_screening.id)
+                    submissions = ApplicationSubmission.objects.filter(
+                        screening_statuses__id=default_screening.id
+                    )
                     for submission in submissions:
                         submission.screening_statuses.remove(default_screening)
                         submission.screening_statuses.add(screening)
diff --git a/hypha/apply/funds/admin_helpers.py b/hypha/apply/funds/admin_helpers.py
index ab12bfdb1848b71209631834f4baf5d2620b4d5a..be23858d82acba3d2b4ac34c29790fcc482c2e9f 100644
--- a/hypha/apply/funds/admin_helpers.py
+++ b/hypha/apply/funds/admin_helpers.py
@@ -17,13 +17,14 @@ from wagtail.models import Page
 
 class VerboseLabelModelChoiceField(forms.ModelChoiceField):
     def label_from_instance(str, obj):
-        return '[{}] {}'.format(obj._meta.verbose_name, obj.title)
+        return "[{}] {}".format(obj._meta.verbose_name, obj.title)
 
 
 class FundChooserForm(ParentChooserForm):
-    """Changes the default chooser to be fund orientated """
+    """Changes the default chooser to be fund orientated"""
+
     parent_page = VerboseLabelModelChoiceField(
-        label=_('Fund or RFP'),
+        label=_("Fund or RFP"),
         required=True,
         empty_label=None,
         queryset=Page.objects.none(),
@@ -42,15 +43,18 @@ class ButtonsWithPreview(PageButtonHelper):
         classnames = self.copy_button_classnames + classnames_add
         cn = self.finalise_classname(classnames, classnames_exclude)
         return {
-            'url': reverse('wagtailadmin_pages:view_draft', args=(obj.id,)),
-            'label': 'Preview',
-            'classname': cn,
-            'title': 'Preview this %s' % self.verbose_name,
+            "url": reverse("wagtailadmin_pages:view_draft", args=(obj.id,)),
+            "label": "Preview",
+            "classname": cn,
+            "title": "Preview this %s" % self.verbose_name,
         }
 
-    def get_buttons_for_obj(self, obj, exclude=None, classnames_add=None,
-                            classnames_exclude=None):
-        btns = super().get_buttons_for_obj(obj, exclude, classnames_add, classnames_exclude)
+    def get_buttons_for_obj(
+        self, obj, exclude=None, classnames_add=None, classnames_exclude=None
+    ):
+        btns = super().get_buttons_for_obj(
+            obj, exclude, classnames_add, classnames_exclude
+        )
 
         # Put preview before delete
         btns.insert(-1, self.preview_button(obj, classnames_add, classnames_exclude))
@@ -59,39 +63,39 @@ class ButtonsWithPreview(PageButtonHelper):
 
 
 class FormsFundRoundListFilter(admin.SimpleListFilter):
-    title = 'usage'
-    parameter_name = 'form-usage'
+    title = "usage"
+    parameter_name = "form-usage"
 
     def lookups(self, request, model_admin):
         return (
-            ('applicationbase', _('Funds & RFP')),
-            ('roundbase', _('Rounds and Sealed Rounds')),
-            ('labbase', _('Labs')),
+            ("applicationbase", _("Funds & RFP")),
+            ("roundbase", _("Rounds and Sealed Rounds")),
+            ("labbase", _("Labs")),
         )
 
     def queryset(self, request, queryset):
         value = self.value()
         if value:
-            query = {f'{value}form__isnull': False}
+            query = {f"{value}form__isnull": False}
             return queryset.filter(**query).distinct()
         return queryset
 
 
 class RoundStateListFilter(admin.SimpleListFilter):
-    title = 'state'
-    parameter_name = 'form-state'
+    title = "state"
+    parameter_name = "form-state"
 
     def lookups(self, request, model_admin):
         return (
-            ('open', _('Open')),
-            ('closed', _('Closed')),
+            ("open", _("Open")),
+            ("closed", _("Closed")),
         )
 
     def queryset(self, request, queryset):
         value = self.value()
-        if value == 'open':
+        if value == "open":
             return queryset.open()
-        elif value == 'closed':
+        elif value == "closed":
             return queryset.closed()
         return queryset
 
@@ -106,14 +110,14 @@ class ApplicationFormButtonHelper(ButtonHelper):
     def copy_form_button(self, pk, form_name, **kwargs):
         classnames = self.prepare_classnames(
             start=self.edit_button_classnames,
-            add=kwargs.get('classnames_add'),
-            exclude=kwargs.get('classnames_exclude')
+            add=kwargs.get("classnames_add"),
+            exclude=kwargs.get("classnames_exclude"),
         )
         return {
-            'classname': classnames,
-            'label': 'Copy',
-            'title': f'Copy {form_name}',
-            'url': self.url_helper.get_action_url('copy_form', admin.utils.quote(pk)),
+            "classname": classnames,
+            "label": "Copy",
+            "title": f"Copy {form_name}",
+            "url": self.url_helper.get_action_url("copy_form", admin.utils.quote(pk)),
         }
 
     def get_buttons_for_obj(self, obj, exclude=None, *args, **kwargs):
@@ -121,9 +125,7 @@ class ApplicationFormButtonHelper(ButtonHelper):
         buttons = super().get_buttons_for_obj(obj, *args, **kwargs)
 
         copy_form_button = self.copy_form_button(
-            pk=getattr(obj, self.opts.pk.attname),
-            form_name=obj.name,
-            **kwargs
+            pk=getattr(obj, self.opts.pk.attname), form_name=obj.name, **kwargs
         )
         buttons.append(copy_form_button)
 
@@ -135,5 +137,5 @@ class RoundAdminURLHelper(PageAdminURLHelper):
     def index_url(self):
         # By default set open filter and sort on end date
         # for Round listing page's index URL
-        params = {'form-state': 'open', 'o': '-3'}
+        params = {"form-state": "open", "o": "-3"}
         return f"{self.get_action_url('index')}?{urlencode(params)}"
diff --git a/hypha/apply/funds/admin_views.py b/hypha/apply/funds/admin_views.py
index cd48115a73279805be72c4a7b3afa1040ad843b6..ec7a7020835e9cdf3f6ee71f8d484a9ac107beef 100644
--- a/hypha/apply/funds/admin_views.py
+++ b/hypha/apply/funds/admin_views.py
@@ -22,64 +22,77 @@ def custom_admin_round_copy_view(request, page):
     # Check if the user has permission to publish subpages on the parent
     can_publish = parent_page.permissions_for_user(request.user).can_publish_subpage()
 
-    form = CopyForm(request.POST or None, user=request.user, page=page, can_publish=can_publish)
+    form = CopyForm(
+        request.POST or None, user=request.user, page=page, can_publish=can_publish
+    )
 
     next_url = get_valid_next_url_from_request(request)
 
     # Prefill parent_page in case the form is invalid (as prepopulated value for the form field,
     # because ModelChoiceField seems to not fall back to the user given value)
-    parent_page = Page.objects.get(id=request.POST['new_parent_page'])
+    parent_page = Page.objects.get(id=request.POST["new_parent_page"])
 
     if form.is_valid():
         # Receive the parent page (this should never be empty)
-        if form.cleaned_data['new_parent_page']:
-            parent_page = form.cleaned_data['new_parent_page']
+        if form.cleaned_data["new_parent_page"]:
+            parent_page = form.cleaned_data["new_parent_page"]
 
-        if not page.permissions_for_user(request.user).can_copy_to(parent_page,
-                                                                   form.cleaned_data.get('copy_subpages')):
+        if not page.permissions_for_user(request.user).can_copy_to(
+            parent_page, form.cleaned_data.get("copy_subpages")
+        ):
             raise PermissionDenied
 
         # Re-check if the user has permission to publish subpages on the new parent
-        can_publish = parent_page.permissions_for_user(request.user).can_publish_subpage()
+        can_publish = parent_page.permissions_for_user(
+            request.user
+        ).can_publish_subpage()
 
         # Copy the page
         new_page = page.copy(
-            recursive=form.cleaned_data.get('copy_subpages'),
+            recursive=form.cleaned_data.get("copy_subpages"),
             to=parent_page,
             update_attrs={
-                'title': form.cleaned_data['new_title'],
-                'slug': form.cleaned_data['new_slug'],
-                'start_date': None,
-                'end_date': None,
+                "title": form.cleaned_data["new_title"],
+                "slug": form.cleaned_data["new_slug"],
+                "start_date": None,
+                "end_date": None,
             },
-            keep_live=(can_publish and form.cleaned_data.get('publish_copies')),
+            keep_live=(can_publish and form.cleaned_data.get("publish_copies")),
             user=request.user,
         )
 
-        messages.info(request, _((
-            "Please select the date in the copied page. "
-            "Newly copied pages have NONE value for the start and end date"
-        )))
+        messages.info(
+            request,
+            _(
+                (
+                    "Please select the date in the copied page. "
+                    "Newly copied pages have NONE value for the start and end date"
+                )
+            ),
+        )
 
         # Give a success message back to the user
-        if form.cleaned_data.get('copy_subpages'):
+        if form.cleaned_data.get("copy_subpages"):
             messages.success(
-                request, _("Page '{0}' and {1} subpages copied.").format(
+                request,
+                _("Page '{0}' and {1} subpages copied.").format(
                     page.get_admin_display_title(), new_page.get_descendants().count()
-                )
+                ),
             )
         else:
-            messages.success(request, _("Page '{0}' copied.").format(page.get_admin_display_title()))
+            messages.success(
+                request, _("Page '{0}' copied.").format(page.get_admin_display_title())
+            )
 
-        for fn in hooks.get_hooks('after_copy_page'):
+        for fn in hooks.get_hooks("after_copy_page"):
             result = fn(request, page, new_page)
-            if hasattr(result, 'status_code'):
+            if hasattr(result, "status_code"):
                 return result
 
         # Redirect to explore of parent page
         if next_url:
             return redirect(next_url)
-        return redirect('wagtailadmin_explore', parent_page.id)
+        return redirect("wagtailadmin_explore", parent_page.id)
 
 
 class CopyApplicationFormViewClass(CreateView):
@@ -96,18 +109,19 @@ class CopyApplicationFormViewClass(CreateView):
         super().__init__(model_admin)
 
     def get_initial(self):
-        return {'name': f'[CHANGE] Copy of {self.form_instance.name}', 'form_fields': self.form_instance.form_fields}
+        return {
+            "name": f"[CHANGE] Copy of {self.form_instance.name}",
+            "form_fields": self.form_instance.form_fields,
+        }
 
 
 class CreateApplicationFormView(CreateView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
 
 
 class EditApplicationFormView(EditView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/funds/apps.py b/hypha/apply/funds/apps.py
index c1d9ca83533a5245c66b2ef9994362183f054f09..19ff626a16b04e8d2ff71a0244c06fb3bf88a9c1 100644
--- a/hypha/apply/funds/apps.py
+++ b/hypha/apply/funds/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class ApplyConfig(AppConfig):
-    name = 'hypha.apply.funds'
+    name = "hypha.apply.funds"
diff --git a/hypha/apply/funds/blocks.py b/hypha/apply/funds/blocks.py
index 81df9217611769b2783b37cbb345ca8ccf46b39d..15f19449d125108ea2c705016557b437daf4a309 100644
--- a/hypha/apply/funds/blocks.py
+++ b/hypha/apply/funds/blocks.py
@@ -1,7 +1,6 @@
 import json
 
 from django import forms
-from django.conf import settings
 from django.utils.translation import gettext_lazy as _
 from wagtail import blocks
 
@@ -14,6 +13,7 @@ from hypha.apply.utils.blocks import (
     RichTextFieldBlock,
     SingleIncludeBlock,
 )
+from hypha.apply.utils.templatetags.apply_tags import format_number_as_currency
 
 
 class ApplicationSingleIncludeFieldBlock(SingleIncludeBlock):
@@ -25,101 +25,113 @@ class ApplicationMustIncludeFieldBlock(MustIncludeFieldBlock):
 
 
 class TitleBlock(ApplicationMustIncludeFieldBlock):
-    name = 'title'
-    description = 'The title of the project'
-    field_label = blocks.CharBlock(label=_('Label'), default=_('What is the title of your application?'))
-    help_text = blocks.TextBlock(required=False, label=_('Help text'), default=_("This project name can be changed if a full proposal is requested."))
+    name = "title"
+    description = "The title of the project"
+    field_label = blocks.CharBlock(
+        label=_("Label"), default=_("What is the title of your application?")
+    )
+    help_text = blocks.TextBlock(
+        required=False,
+        label=_("Help text"),
+        default=_("This project name can be changed if a full proposal is requested."),
+    )
 
     class Meta:
-        label = _('Application title')
-        icon = 'tag'
+        label = _("Application title")
+        icon = "tag"
 
 
 class ValueBlock(ApplicationSingleIncludeFieldBlock):
-    name = 'value'
-    description = 'The value of the project'
-    widget = forms.NumberInput(attrs={'min': 0})
+    name = "value"
+    description = "The value of the project"
+    widget = forms.NumberInput(attrs={"min": 0})
 
     class Meta:
-        label = _('Requested amount')
+        label = _("Requested amount")
 
     def prepare_data(self, value, data, serialize):
-        return settings.CURRENCY_SYMBOL + str(data)
+        return format_number_as_currency(str(data))
+
+
+class OrganizationNameBlock(ApplicationSingleIncludeFieldBlock):
+    name = "organization_name"
+    description = "The name of the organization"
+    widget = forms.TextInput()
+
+    class Meta:
+        label = _("Organization name")
 
 
 class EmailBlock(ApplicationMustIncludeFieldBlock):
-    name = 'email'
-    description = 'The applicant email address'
-    field_label = blocks.CharBlock(label=_('Label'), default=_('What email address should we use to contact you?'))
-    help_text = blocks.TextBlock(required=False, label=_('Help text'),
-                                 default=_("We will use this email address to communicate with you about your proposal."))
+    name = "email"
+    description = "The applicant email address"
+    field_label = blocks.CharBlock(
+        label=_("Label"), default=_("What email address should we use to contact you?")
+    )
+    help_text = blocks.TextBlock(
+        required=False,
+        label=_("Help text"),
+        default=_(
+            "We will use this email address to communicate with you about your proposal."
+        ),
+    )
 
     widget = forms.EmailInput
     field_class = forms.EmailField
 
     class Meta:
-        icon = 'mail'
+        icon = "mail"
 
 
 class AddressFieldBlock(ApplicationSingleIncludeFieldBlock):
-    name = 'address'
-    description = 'The postal address of the user'
+    name = "address"
+    description = "The postal address of the user"
 
     field_class = AddressField
 
     class Meta:
-        label = _('Address')
-        icon = 'home'
+        label = _("Address")
+        icon = "home"
 
     def format_data(self, data):
         # Based on the fields listed in addressfields/widgets.py
-        return ', '.join(
-            data[field]
-            for field in ADDRESS_FIELDS_ORDER
-            if data[field]
-        )
+        return ", ".join(data[field] for field in ADDRESS_FIELDS_ORDER if data[field])
 
     def prepare_data(self, value, data, serialize):
         data = json.loads(data)
-        data = {
-            field: data[field]
-            for field in ADDRESS_FIELDS_ORDER
-        }
+        data = {field: data[field] for field in ADDRESS_FIELDS_ORDER}
 
         if serialize:
             return data
 
-        return ', '.join(
-            value
-            for value in data.values()
-            if value
-        )
+        return ", ".join(value for value in data.values() if value)
 
 
 class FullNameBlock(ApplicationMustIncludeFieldBlock):
-    name = 'full_name'
-    description = 'Full name'
-    field_label = blocks.CharBlock(label=_('Label'), default=_('What is your name?'))
-    help_text = blocks.TextBlock(required=False, label=_('Help text'),
-                                 default=_("We will use this name when we communicate with you about your proposal."))
+    name = "full_name"
+    description = "Full name"
+    field_label = blocks.CharBlock(label=_("Label"), default=_("What is your name?"))
+    help_text = blocks.TextBlock(
+        required=False,
+        label=_("Help text"),
+        default=_(
+            "We will use this name when we communicate with you about your proposal."
+        ),
+    )
 
     class Meta:
-        label = _('Full name')
-        icon = 'user'
+        label = _("Full name")
+        icon = "user"
 
 
 class DurationBlock(ApplicationSingleIncludeFieldBlock):
-    name = 'duration'
-    description = 'Duration'
-
-    DAYS = 'days'
-    WEEKS = 'weeks'
-    MONTHS = 'months'
-    DURATION_TYPE_CHOICES = (
-        (DAYS, 'Days'),
-        (WEEKS, 'Weeks'),
-        (MONTHS, 'Months')
-    )
+    name = "duration"
+    description = "Duration"
+
+    DAYS = "days"
+    WEEKS = "weeks"
+    MONTHS = "months"
+    DURATION_TYPE_CHOICES = ((DAYS, "Days"), (WEEKS, "Weeks"), (MONTHS, "Months"))
     DURATION_DAY_OPTIONS = {
         1: "1 day",
         2: "2 days",
@@ -160,42 +172,47 @@ class DurationBlock(ApplicationSingleIncludeFieldBlock):
     field_class = forms.ChoiceField
     duration_type = blocks.ChoiceBlock(
         help_text=(
-            'Duration type is used to display duration choices in Days, Weeks or Months in application forms. '
-            'Be careful, changing the duration type in the active round can result in data inconsistency.'
+            "Duration type is used to display duration choices in Days, Weeks or Months in application forms. "
+            "Be careful, changing the duration type in the active round can result in data inconsistency."
         ),
-        choices=DURATION_TYPE_CHOICES, default=MONTHS,
+        choices=DURATION_TYPE_CHOICES,
+        default=MONTHS,
     )
 
     def get_field_kwargs(self, struct_value, *args, **kwargs):
         field_kwargs = super().get_field_kwargs(struct_value, *args, **kwargs)
-        if struct_value['duration_type'] == self.DAYS:
-            field_kwargs['choices'] = self.DURATION_DAY_OPTIONS.items()
-        elif struct_value['duration_type'] == self.WEEKS:
-            field_kwargs['choices'] = self.DURATION_WEEK_OPTIONS.items()
+        if struct_value["duration_type"] == self.DAYS:
+            field_kwargs["choices"] = self.DURATION_DAY_OPTIONS.items()
+        elif struct_value["duration_type"] == self.WEEKS:
+            field_kwargs["choices"] = self.DURATION_WEEK_OPTIONS.items()
         else:
-            field_kwargs['choices'] = self.DURATION_MONTH_OPTIONS.items()
+            field_kwargs["choices"] = self.DURATION_MONTH_OPTIONS.items()
         return field_kwargs
 
     def prepare_data(self, value, data, serialize):
-        if value['duration_type'] == self.DAYS:
+        if value["duration_type"] == self.DAYS:
             return self.DURATION_DAY_OPTIONS[int(data)]
-        if value['duration_type'] == self.WEEKS:
+        if value["duration_type"] == self.WEEKS:
             return self.DURATION_WEEK_OPTIONS[int(data)]
         return self.DURATION_MONTH_OPTIONS[int(data)]
 
     class Meta:
-        icon = 'date'
+        icon = "date"
 
 
 class ApplicationCustomFormFieldsBlock(CustomFormFieldsBlock, FormFieldsBlock):
-    category = CategoryQuestionBlock(group=_('Custom'))
-    rich_text = RichTextFieldBlock(group=_('Fields'))
+    category = CategoryQuestionBlock(group=_("Custom"))
+    rich_text = RichTextFieldBlock(group=_("Fields"))
     required_blocks = ApplicationMustIncludeFieldBlock.__subclasses__()
     single_blocks = ApplicationSingleIncludeFieldBlock.__subclasses__()
 
 
-REQUIRED_BLOCK_NAMES = [block.name for block in ApplicationMustIncludeFieldBlock.__subclasses__()]
+REQUIRED_BLOCK_NAMES = [
+    block.name for block in ApplicationMustIncludeFieldBlock.__subclasses__()
+]
 
-SINGLE_BLOCK_NAMES = [block.name for block in ApplicationSingleIncludeFieldBlock.__subclasses__()]
+SINGLE_BLOCK_NAMES = [
+    block.name for block in ApplicationSingleIncludeFieldBlock.__subclasses__()
+]
 
 NAMED_BLOCKS = REQUIRED_BLOCK_NAMES + SINGLE_BLOCK_NAMES
diff --git a/hypha/apply/funds/differ.py b/hypha/apply/funds/differ.py
index 1047d95ca237fb7e9694bcaa5a9e8d283500cc4a..322fd86895f0e2629699bb58058d5d70ab178145 100644
--- a/hypha/apply/funds/differ.py
+++ b/hypha/apply/funds/differ.py
@@ -7,22 +7,24 @@ from django.utils.safestring import mark_safe
 
 
 def wrap_with_span(text, class_name):
-    return format_html('<span class="diff diff__{}">{}</span>', class_name, mark_safe(text))
+    return format_html(
+        '<span class="diff diff__{}">{}</span>', class_name, mark_safe(text)
+    )
 
 
 def wrap_deleted(text):
-    return wrap_with_span(text, 'deleted')
+    return wrap_with_span(text, "deleted")
 
 
 def wrap_added(text):
-    return wrap_with_span(text, 'added')
+    return wrap_with_span(text, "added")
 
 
 def compare(answer_a, answer_b, should_bleach=True):
     if should_bleach:
-        cleaner = Cleaner(tags=['h4'], attributes={}, strip=True)
-        answer_a = re.sub('(<li[^>]*>)', r'\1● ', answer_a)
-        answer_b = re.sub('(<li[^>]*>)', r'\1● ', answer_b)
+        cleaner = Cleaner(tags=["h4"], attributes={}, strip=True)
+        answer_a = re.sub("(<li[^>]*>)", r"\1● ", answer_a)
+        answer_b = re.sub("(<li[^>]*>)", r"\1● ", answer_b)
         answer_a = cleaner.clean(answer_a)
         answer_b = cleaner.clean(answer_b)
 
@@ -30,25 +32,25 @@ def compare(answer_a, answer_b, should_bleach=True):
     from_diff = []
     to_diff = []
     for opcode, a0, a1, b0, b1 in diff.get_opcodes():
-        if opcode == 'equal':
+        if opcode == "equal":
             from_diff.append(mark_safe(diff.a[a0:a1]))
             to_diff.append(mark_safe(diff.b[b0:b1]))
-        elif opcode == 'insert':
+        elif opcode == "insert":
             from_diff.append(mark_safe(diff.a[a0:a1]))
-            to_diff.append(wrap_with_span(diff.b[b0:b1], 'added'))
-        elif opcode == 'delete':
-            from_diff.append(wrap_with_span(diff.a[a0:a1], 'deleted'))
+            to_diff.append(wrap_with_span(diff.b[b0:b1], "added"))
+        elif opcode == "delete":
+            from_diff.append(wrap_with_span(diff.a[a0:a1], "deleted"))
             to_diff.append(mark_safe(diff.b[b0:b1]))
-        elif opcode == 'replace':
-            from_diff.append(wrap_with_span(diff.a[a0:a1], 'deleted'))
-            to_diff.append(wrap_with_span(diff.b[b0:b1], 'added'))
-
-    from_display = ''.join(from_diff)
-    to_display = ''.join(to_diff)
-    from_display = re.sub(r'([●○]|[0-9]{1,2}[\)\.])', r'<br>\1', from_display)
-    to_display = re.sub(r'([●○]|[0-9]{1,2}[\)\.])', r'<br>\1', to_display)
-    from_display = re.sub('(\\.\n)', r'\1<br><br>', from_display)
-    to_display = re.sub('(\\.\n)', r'\1<br><br>', to_display)
+        elif opcode == "replace":
+            from_diff.append(wrap_with_span(diff.a[a0:a1], "deleted"))
+            to_diff.append(wrap_with_span(diff.b[b0:b1], "added"))
+
+    from_display = "".join(from_diff)
+    to_display = "".join(to_diff)
+    from_display = re.sub(r"([●○]|[0-9]{1,2}[\)\.])", r"<br>\1", from_display)
+    to_display = re.sub(r"([●○]|[0-9]{1,2}[\)\.])", r"<br>\1", to_display)
+    from_display = re.sub("(\\.\n)", r"\1<br><br>", from_display)
+    to_display = re.sub("(\\.\n)", r"\1<br><br>", to_display)
     from_display = mark_safe(from_display)
     to_display = mark_safe(to_display)
 
diff --git a/hypha/apply/funds/edit_handlers.py b/hypha/apply/funds/edit_handlers.py
index 2439e315384686c4ae703f9aa2b21edca1cf207e..3b01944d8ad8d96abe21d21e0b5d0c9cfb59c277 100644
--- a/hypha/apply/funds/edit_handlers.py
+++ b/hypha/apply/funds/edit_handlers.py
@@ -7,14 +7,14 @@ from wagtail.models import Page
 
 def reverse_edit(obj):
     if isinstance(obj, Page):
-        return reverse('wagtailadmin_pages:edit', args=(obj.id,))
+        return reverse("wagtailadmin_pages:edit", args=(obj.id,))
 
-    url_name = f'{obj._meta.app_label}_{obj._meta.model_name}_modeladmin_edit'
+    url_name = f"{obj._meta.app_label}_{obj._meta.model_name}_modeladmin_edit"
     return reverse(url_name, args=(obj.id,))
 
 
 class ReadonlyWidget(Widget):
-    template_name = 'funds/admin/widgets/read_only.html'
+    template_name = "funds/admin/widgets/read_only.html"
 
     def format_value(self, value):
         self.value = value
@@ -28,7 +28,7 @@ class ReadonlyWidget(Widget):
         except AttributeError:
             pass
         else:
-            context['widget']['edit_link'] = edit_link
+            context["widget"]["edit_link"] = edit_link
         return context
 
 
@@ -46,14 +46,15 @@ class ReadOnlyPanel(Panel):
         a clone of this panel definition.
         """
         kwargs = super().clone_kwargs()
-        kwargs.update({
-            "attr": self.attr,
-        })
+        kwargs.update(
+            {
+                "attr": self.attr,
+            }
+        )
         return kwargs
 
-
     class BoundPanel(Panel.BoundPanel):
-        template_name = 'wagtailadmin/panels/field_panel.html'
+        template_name = "wagtailadmin/panels/field_panel.html"
 
         def render_html(self, parent_context):
             return render_to_string(self.template_name, self.context())
@@ -72,14 +73,16 @@ class ReadOnlyPanel(Panel):
             if self.instance.id:
                 self.form.initial[self.panel.attr] = value
             else:
-                self.form.initial[self.panel.attr] = '-'
+                self.form.initial[self.panel.attr] = "-"
 
-            self.bound_field = DisplayField().get_bound_field(self.form, self.panel.attr)
+            self.bound_field = DisplayField().get_bound_field(
+                self.form, self.panel.attr
+            )
 
             return {
-                'self': self,
-                'field': self.bound_field,
-                'show_label': False,
+                "self": self,
+                "field": self.bound_field,
+                "show_label": False,
             }
 
 
@@ -93,7 +96,7 @@ class FilteredFieldPanel(FieldPanel):
     def clone(self):
         return self.__class__(
             field_name=self.field_name,
-            widget=self.widget if hasattr(self, 'widget') else None,
+            widget=self.widget if hasattr(self, "widget") else None,
             heading=self.heading,
             classname=self.classname,
             help_text=self.help_text,
diff --git a/hypha/apply/funds/files.py b/hypha/apply/funds/files.py
index 5df115252ecb9fac28b6f8fd56a2d047390b5443..27b8fcba75be89f1a6302345c5736347eb69e052 100644
--- a/hypha/apply/funds/files.py
+++ b/hypha/apply/funds/files.py
@@ -6,7 +6,7 @@ from hypha.apply.stream_forms.files import StreamFieldFile
 
 
 def generate_submission_file_path(submission_id, field_id, file_name):
-    path = os.path.join('submission', str(submission_id), str(field_id))
+    path = os.path.join("submission", str(submission_id), str(field_id))
     if file_name.startswith(path):
         return file_name
 
@@ -14,9 +14,9 @@ def generate_submission_file_path(submission_id, field_id, file_name):
 
 
 class SubmissionStreamFieldFile(StreamFieldFile):
-
     def get_submission_id(self):
         from hypha.apply.funds.models import ApplicationRevision
+
         submission_id = self.instance.pk
 
         if isinstance(self.instance, ApplicationRevision):
@@ -24,14 +24,17 @@ class SubmissionStreamFieldFile(StreamFieldFile):
         return submission_id
 
     def generate_filename(self):
-        return generate_submission_file_path(self.get_submission_id(), self.field.id, self.name)
+        return generate_submission_file_path(
+            self.get_submission_id(), self.field.id, self.name
+        )
 
     @property
     def url(self):
         return reverse(
-            'apply:submissions:serve_private_media', kwargs={
-                'pk': self.get_submission_id(),
-                'field_id': self.field.id,
-                'file_name': self.basename,
-            }
+            "apply:submissions:serve_private_media",
+            kwargs={
+                "pk": self.get_submission_id(),
+                "field_id": self.field.id,
+                "file_name": self.basename,
+            },
         )
diff --git a/hypha/apply/funds/forms.py b/hypha/apply/funds/forms.py
index ed1993a84a194c6d495e19af7f6b3a0d26768452..b69fcfdeff400bf5e57dc240e519bf5334a54e37 100644
--- a/hypha/apply/funds/forms.py
+++ b/hypha/apply/funds/forms.py
@@ -41,9 +41,10 @@ class ApplicationSubmissionModelForm(forms.ModelForm):
         """
         if self.errors:
             raise ValueError(
-                "The %s could not be %s because the data didn't validate." % (
+                "The %s could not be %s because the data didn't validate."
+                % (
                     self.instance._meta.object_name,
-                    'created' if self.instance._state.adding else 'changed',
+                    "created" if self.instance._state.adding else "changed",
                 )
             )
         if commit:
@@ -58,63 +59,65 @@ class ApplicationSubmissionModelForm(forms.ModelForm):
 
 
 class ProgressSubmissionForm(ApplicationSubmissionModelForm):
-    action = forms.ChoiceField(label=_('Take action'))
+    action = forms.ChoiceField(label=_("Take action"))
 
     class Meta:
         model = ApplicationSubmission
         fields: list = []
 
     def __init__(self, *args, **kwargs):
-        self.user = kwargs.pop('user')
+        self.user = kwargs.pop("user")
         super().__init__(*args, **kwargs)
         choices = list(self.instance.get_actions_for_user(self.user))
         # Sort the transitions by the order they are listed.
         sort_by = list(self.instance.phase.transitions.keys())
         choices.sort(key=lambda k: sort_by.index(k[0]))
-        action_field = self.fields['action']
+        action_field = self.fields["action"]
         action_field.choices = choices
         self.should_show = bool(choices)
 
 
 class BatchProgressSubmissionForm(forms.Form):
-    action = forms.ChoiceField(label=_('Take action'))
-    submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'}))
+    action = forms.ChoiceField(label=_("Take action"))
+    submissions = forms.CharField(
+        widget=forms.HiddenInput(attrs={"class": "js-submissions-id"})
+    )
 
     def __init__(self, *args, round=None, **kwargs):
-        self.user = kwargs.pop('user')
+        self.user = kwargs.pop("user")
         super().__init__(*args, **kwargs)
         workflow = round and round.workflow
         self.action_mapping = get_action_mapping(workflow)
-        choices = [(action, detail['display']) for action, detail in self.action_mapping.items()]
-        self.fields['action'].choices = choices
+        choices = [
+            (action, detail["display"])
+            for action, detail in self.action_mapping.items()
+        ]
+        self.fields["action"].choices = choices
 
     def clean_submissions(self):
-        value = self.cleaned_data['submissions']
-        submission_ids = [int(submission) for submission in value.split(',')]
+        value = self.cleaned_data["submissions"]
+        submission_ids = [int(submission) for submission in value.split(",")]
         return ApplicationSubmission.objects.filter(id__in=submission_ids)
 
     def clean_action(self):
-        value = self.cleaned_data['action']
-        action = self.action_mapping[value]['transitions']
+        value = self.cleaned_data["action"]
+        action = self.action_mapping[value]["transitions"]
         return action
 
 
 class ScreeningSubmissionForm(ApplicationSubmissionModelForm):
-
     class Meta:
         model = ApplicationSubmission
-        fields = ('screening_statuses',)
-        labels = {
-            "screening_statuses": "Screening Decisions"
-        }
+        fields = ("screening_statuses",)
+        labels = {"screening_statuses": "Screening Decisions"}
 
     def __init__(self, *args, **kwargs):
-        self.user = kwargs.pop('user')
+        self.user = kwargs.pop("user")
         super().__init__(*args, **kwargs)
-        instance = kwargs.get('instance')
+        instance = kwargs.get("instance")
         if instance and instance.has_default_screening_status_set:
             screening_status = instance.screening_statuses.get(default=True)
-            self.fields['screening_statuses'].queryset = ScreeningStatus.objects.filter(
+            self.fields["screening_statuses"].queryset = ScreeningStatus.objects.filter(
                 yes=screening_status.yes
             )
         self.should_show = False
@@ -125,22 +128,25 @@ class ScreeningSubmissionForm(ApplicationSubmissionModelForm):
         cleaned_data = super().clean()
         instance = self.instance
         default_status = instance.screening_statuses.get(default=True)
-        if default_status not in cleaned_data['screening_statuses']:
-            self.add_error('screening_statuses', 'Can\'t remove default screening decision.')
+        if default_status not in cleaned_data["screening_statuses"]:
+            self.add_error(
+                "screening_statuses", "Can't remove default screening decision."
+            )
         return cleaned_data
 
 
 class UpdateSubmissionLeadForm(ApplicationSubmissionModelForm):
-
     class Meta:
         model = ApplicationSubmission
-        fields = ('lead',)
+        fields = ("lead",)
 
     def __init__(self, *args, **kwargs):
-        kwargs.pop('user')
+        kwargs.pop("user")
         super().__init__(*args, **kwargs)
-        lead_field = self.fields['lead']
-        lead_field.label = _('Update lead from {lead} to').format(lead=self.instance.lead)
+        lead_field = self.fields["lead"]
+        lead_field.label = _("Update lead from {lead} to").format(
+            lead=self.instance.lead
+        )
         lead_field.queryset = lead_field.queryset.exclude(id=self.instance.lead.id)
 
 
@@ -149,10 +155,10 @@ class UnarchiveSubmissionForm(ApplicationSubmissionModelForm):
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('unarchive',)
+        fields = ("unarchive",)
 
     def __init__(self, *args, **kwargs):
-        kwargs.pop('user')
+        kwargs.pop("user")
         super().__init__(*args, **kwargs)
 
     def save(self, commit=True):
@@ -165,10 +171,10 @@ class ArchiveSubmissionForm(ApplicationSubmissionModelForm):
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('archive',)
+        fields = ("archive",)
 
     def __init__(self, *args, **kwargs):
-        kwargs.pop('user')
+        kwargs.pop("user")
         super().__init__(*args, **kwargs)
 
     def save(self, commit=True):
@@ -177,55 +183,63 @@ class ArchiveSubmissionForm(ApplicationSubmissionModelForm):
 
 
 class BatchUpdateSubmissionLeadForm(forms.Form):
-    lead = forms.ChoiceField(label=_('Lead'))
-    submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'}))
+    lead = forms.ChoiceField(label=_("Lead"))
+    submissions = forms.CharField(
+        widget=forms.HiddenInput(attrs={"class": "js-submissions-id"})
+    )
 
     def __init__(self, *args, round=None, **kwargs):
-        self.user = kwargs.pop('user')
+        self.user = kwargs.pop("user")
         super().__init__(*args, **kwargs)
-        self.fields['lead'].choices = [(staff.id, staff) for staff in User.objects.staff()]
+        self.fields["lead"].choices = [
+            (staff.id, staff) for staff in User.objects.staff()
+        ]
 
     def clean_lead(self):
-        value = self.cleaned_data['lead']
+        value = self.cleaned_data["lead"]
         return User.objects.get(id=value)
 
     def clean_submissions(self):
-        value = self.cleaned_data['submissions']
-        submission_ids = [int(submission) for submission in value.split(',')]
+        value = self.cleaned_data["submissions"]
+        submission_ids = [int(submission) for submission in value.split(",")]
         return ApplicationSubmission.objects.filter(id__in=submission_ids)
 
 
 class BatchDeleteSubmissionForm(forms.Form):
-    submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'}))
+    submissions = forms.CharField(
+        widget=forms.HiddenInput(attrs={"class": "js-submissions-id"})
+    )
 
     def __init__(self, *args, round=None, **kwargs):
-        self.user = kwargs.pop('user')
+        self.user = kwargs.pop("user")
         super().__init__(*args, **kwargs)
 
     def clean_submissions(self):
-        value = self.cleaned_data['submissions']
-        submission_ids = [int(submission) for submission in value.split(',')]
+        value = self.cleaned_data["submissions"]
+        submission_ids = [int(submission) for submission in value.split(",")]
         return ApplicationSubmission.objects.filter(id__in=submission_ids)
 
 
 class BatchArchiveSubmissionForm(forms.Form):
-    submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'}))
+    submissions = forms.CharField(
+        widget=forms.HiddenInput(attrs={"class": "js-submissions-id"})
+    )
 
     def __init__(self, *args, round=None, **kwargs):
-        self.user = kwargs.pop('user')
+        self.user = kwargs.pop("user")
         super().__init__(*args, **kwargs)
 
     def clean_submissions(self):
-        value = self.cleaned_data['submissions']
-        submission_ids = [int(submission) for submission in value.split(',')]
+        value = self.cleaned_data["submissions"]
+        submission_ids = [int(submission) for submission in value.split(",")]
         return ApplicationSubmission.objects.filter(id__in=submission_ids)
 
 
 class UpdateReviewersForm(ApplicationSubmissionModelForm):
     reviewer_reviewers = forms.ModelMultipleChoiceField(
-        queryset=User.objects.reviewers().only('pk', 'full_name'),
-        widget=Select2MultiCheckboxesWidget(attrs={'data-placeholder': 'Reviewers'}),
-        label=_('External Reviewers'),
+        queryset=User.objects.reviewers().only("pk", "full_name"),
+        widget=Select2MultiCheckboxesWidget(attrs={"data-placeholder": "Reviewers"}),
+        label=_("External Reviewers"),
         required=False,
     )
 
@@ -234,10 +248,12 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm):
         fields: list = []
 
     def __init__(self, *args, **kwargs):
-        self.user = kwargs.pop('user')
-        if kwargs.get('instance'):
+        self.user = kwargs.pop("user")
+        if kwargs.get("instance"):
             # Providing initials(from model's instance) to BaseModelForm
-            kwargs['initial'] = model_form_initial(kwargs.get('instance'), self._meta.fields, self._meta.exclude)
+            kwargs["initial"] = model_form_initial(
+                kwargs.get("instance"), self._meta.fields, self._meta.exclude
+            )
         super().__init__(*args, **kwargs)
 
         # convert a python dict to orderedDict, to use move_to_end method
@@ -245,36 +261,34 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm):
 
         assigned_roles = {
             assigned.role: assigned.reviewer
-            for assigned in self.instance.assigned.filter(
-                role__isnull=False
-            )
+            for assigned in self.instance.assigned.filter(role__isnull=False)
         }
 
         self.role_fields = {}
         field_data = make_role_reviewer_fields()
 
         for data in field_data:
-            field_name = data['field_name']
-            self.fields[field_name] = data['field']
-            self.role_fields[field_name] = data['role']
-            self.fields[field_name].initial = assigned_roles.get(data['role'])
+            field_name = data["field_name"]
+            self.fields[field_name] = data["field"]
+            self.role_fields[field_name] = data["role"]
+            self.fields[field_name].initial = assigned_roles.get(data["role"])
 
         self.submitted_reviewers = User.objects.filter(
-            id__in=self.instance.assigned.reviewed().values('reviewer'),
+            id__in=self.instance.assigned.reviewed().values("reviewer"),
         )
 
         if can_change_external_reviewers(user=self.user, submission=self.instance):
-            reviewers = self.instance.reviewers.all().only('pk')
+            reviewers = self.instance.reviewers.all().only("pk")
             self.prepare_field(
-                'reviewer_reviewers',
+                "reviewer_reviewers",
                 initial=reviewers,
-                excluded=self.submitted_reviewers
+                excluded=self.submitted_reviewers,
             )
 
             # Move the non-role reviewers field to the end of the field list
-            self.fields.move_to_end('reviewer_reviewers')
+            self.fields.move_to_end("reviewer_reviewers")
         else:
-            self.fields.pop('reviewer_reviewers')
+            self.fields.pop("reviewer_reviewers")
 
     def prepare_field(self, field_name, initial, excluded):
         field = self.fields[field_name]
@@ -290,14 +304,23 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm):
         ]
 
         for field, role in self.role_fields.items():
-            assigned_reviewer = AssignedReviewers.objects.filter(role=role, submission=self.instance).last()
-            if assigned_reviewer and not cleaned_data[field] and assigned_reviewer.reviewer in self.submitted_reviewers:
-                self.add_error(field, _("Can't unassign, just change, because review already submitted"))
+            assigned_reviewer = AssignedReviewers.objects.filter(
+                role=role, submission=self.instance
+            ).last()
+            if (
+                assigned_reviewer
+                and not cleaned_data[field]
+                and assigned_reviewer.reviewer in self.submitted_reviewers
+            ):
+                self.add_error(
+                    field,
+                    _("Can't unassign, just change, because review already submitted"),
+                )
                 break
 
         # If any of the users match and are set to multiple roles, throw an error
         if len(role_reviewers) != len(set(role_reviewers)) and any(role_reviewers):
-            self.add_error(None, _('Users cannot be assigned to multiple roles.'))
+            self.add_error(None, _("Users cannot be assigned to multiple roles."))
 
         return cleaned_data
 
@@ -320,22 +343,30 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm):
                 if reviewer:
                     AssignedReviewers.objects.update_role(role, reviewer, instance)
                 else:
-                    AssignedReviewers.objects.filter(role=role, submission=instance, review__isnull=True).delete()
+                    AssignedReviewers.objects.filter(
+                        role=role, submission=instance, review__isnull=True
+                    ).delete()
 
             # 2. Update non-role reviewers
             # 2a. Remove those not on form
             if can_change_external_reviewers(submission=self.instance, user=self.user):
-                reviewers = self.cleaned_data.get('reviewer_reviewers')
+                reviewers = self.cleaned_data.get("reviewer_reviewers")
                 assigned_reviewers = instance.assigned.without_roles()
                 assigned_reviewers.never_tried_to_review().exclude(
                     reviewer__in=reviewers
                 ).delete()
 
-                remaining_reviewers = assigned_reviewers.values_list('reviewer_id', flat=True)
+                remaining_reviewers = assigned_reviewers.values_list(
+                    "reviewer_id", flat=True
+                )
 
                 # 2b. Add in any new non-role reviewers selected
                 AssignedReviewers.objects.bulk_create_reviewers(
-                    [reviewer for reviewer in reviewers if reviewer.id not in remaining_reviewers],
+                    [
+                        reviewer
+                        for reviewer in reviewers
+                        if reviewer.id not in remaining_reviewers
+                    ],
                     instance,
                 )
 
@@ -343,17 +374,19 @@ class UpdateReviewersForm(ApplicationSubmissionModelForm):
 
 
 class BatchUpdateReviewersForm(forms.Form):
-    submissions = forms.CharField(widget=forms.HiddenInput(attrs={'class': 'js-submissions-id'}))
+    submissions = forms.CharField(
+        widget=forms.HiddenInput(attrs={"class": "js-submissions-id"})
+    )
     external_reviewers = forms.ModelMultipleChoiceField(
-        queryset=User.objects.reviewers().only('pk', 'full_name'),
-        widget=Select2MultiCheckboxesWidget(attrs={'data-placeholder': 'Select...'}),
-        label=_('External Reviewers'),
+        queryset=User.objects.reviewers().only("pk", "full_name"),
+        widget=Select2MultiCheckboxesWidget(attrs={"data-placeholder": "Select..."}),
+        label=_("External Reviewers"),
         required=False,
     )
 
     def __init__(self, *args, user=None, round=None, **kwargs):
         super().__init__(*args, **kwargs)
-        self.request = kwargs.pop('request', None)
+        self.request = kwargs.pop("request", None)
         self.user = user
         self.fields = OrderedDict(self.fields)
 
@@ -361,26 +394,34 @@ class BatchUpdateReviewersForm(forms.Form):
         field_data = make_role_reviewer_fields()
 
         for data in field_data:
-            field_name = data['field_name']
-            self.fields[field_name] = data['field']
-            self.role_fields[field_name] = data['role']
+            field_name = data["field_name"]
+            self.fields[field_name] = data["field"]
+            self.role_fields[field_name] = data["role"]
 
-        self.fields.move_to_end('external_reviewers')
+        self.fields.move_to_end("external_reviewers")
 
     def clean_submissions(self):
-        value = self.cleaned_data['submissions']
-        submission_ids = [int(submission) for submission in value.split(',')]
+        value = self.cleaned_data["submissions"]
+        submission_ids = [int(submission) for submission in value.split(",")]
         return ApplicationSubmission.objects.filter(id__in=submission_ids)
 
     def clean(self):
         cleaned_data = super().clean()
-        external_reviewers = self.cleaned_data['external_reviewers']
-        submissions = self.cleaned_data['submissions']
+        external_reviewers = self.cleaned_data["external_reviewers"]
+        submissions = self.cleaned_data["submissions"]
         if external_reviewers:
             # User needs to be superuser or lead of all selected submissions.
 
-            if not all(can_change_external_reviewers(submission=s, user=self.user) for s in submissions):
-                self.add_error('external_reviewers', _("Make sure all submissions support external reviewers and you are lead for all the selected submissions."))
+            if not all(
+                can_change_external_reviewers(submission=s, user=self.user)
+                for s in submissions
+            ):
+                self.add_error(
+                    "external_reviewers",
+                    _(
+                        "Make sure all submissions support external reviewers and you are lead for all the selected submissions."
+                    ),
+                )
 
         role_reviewers = [
             user
@@ -390,7 +431,7 @@ class BatchUpdateReviewersForm(forms.Form):
 
         # If any of the users match and are set to multiple roles, throw an error
         if len(role_reviewers) != len(set(role_reviewers)) and any(role_reviewers):
-            self.add_error(None, _('Users cannot be assigned to multiple roles.'))
+            self.add_error(None, _("Users cannot be assigned to multiple roles."))
 
         return cleaned_data
 
@@ -403,22 +444,27 @@ class BatchUpdateReviewersForm(forms.Form):
 
 def make_role_reviewer_fields():
     role_fields = []
-    staff_reviewers = User.objects.staff().only('full_name', 'pk')
+    staff_reviewers = User.objects.staff().only("full_name", "pk")
 
-    for role in ReviewerRole.objects.all().order_by('order'):
+    for role in ReviewerRole.objects.all().order_by("order"):
         role_name = bleach.clean(role.name, strip=True)
-        field_name = f'role_reviewer_{role.id}'
+        field_name = f"role_reviewer_{role.id}"
         field = forms.ModelChoiceField(
             queryset=staff_reviewers,
-            empty_label=_('---'),
+            empty_label=_("---"),
             required=False,
-            label=mark_safe(render_icon(role.icon) + _('{role_name} Reviewer').format(role_name=role_name)),
+            label=mark_safe(
+                render_icon(role.icon)
+                + _("{role_name} Reviewer").format(role_name=role_name)
+            ),
+        )
+        role_fields.append(
+            {
+                "role": role,
+                "field": field,
+                "field_name": field_name,
+            }
         )
-        role_fields.append({
-            'role': role,
-            'field': field,
-            'field_name': field_name,
-        })
 
     return role_fields
 
@@ -426,8 +472,8 @@ def make_role_reviewer_fields():
 class UpdatePartnersForm(ApplicationSubmissionModelForm):
     partner_reviewers = forms.ModelMultipleChoiceField(
         queryset=User.objects.partners(),
-        widget=Select2MultiCheckboxesWidget(attrs={'data-placeholder': 'Partners'}),
-        label=_('Partners'),
+        widget=Select2MultiCheckboxesWidget(attrs={"data-placeholder": "Partners"}),
+        label=_("Partners"),
         required=False,
     )
 
@@ -436,21 +482,24 @@ class UpdatePartnersForm(ApplicationSubmissionModelForm):
         fields: list = []
 
     def __init__(self, *args, **kwargs):
-        kwargs.pop('user')
+        kwargs.pop("user")
         super().__init__(*args, **kwargs)
         partners = self.instance.partners.all()
-        self.submitted_partners = User.objects.partners().filter(id__in=self.instance.reviews.values('author'))
+        self.submitted_partners = User.objects.partners().filter(
+            id__in=self.instance.reviews.values("author")
+        )
 
-        partner_field = self.fields['partner_reviewers']
-        partner_field.queryset = partner_field.queryset.exclude(id__in=self.submitted_partners)
+        partner_field = self.fields["partner_reviewers"]
+        partner_field.queryset = partner_field.queryset.exclude(
+            id__in=self.submitted_partners
+        )
         partner_field.initial = partners
 
     def save(self, *args, **kwargs):
         instance = super().save(*args, **kwargs)
 
         instance.partners.set(
-            self.cleaned_data['partner_reviewers'] |
-            self.submitted_partners
+            self.cleaned_data["partner_reviewers"] | self.submitted_partners
         )
         return instance
 
@@ -476,22 +525,27 @@ class GroupedModelMultipleChoiceField(forms.ModelMultipleChoiceField):
         if isinstance(choices_groupby, str):
             choices_groupby = methodcaller(choices_groupby)
         elif not callable(choices_groupby):
-            raise TypeError('choices_groupby must either be a str or a callable accepting a single argument')
+            raise TypeError(
+                "choices_groupby must either be a str or a callable accepting a single argument"
+            )
         self.iterator = partial(GroupedModelChoiceIterator, groupby=choices_groupby)
         super().__init__(*args, **kwargs)
 
     def label_from_instance(self, obj):
-        return {'label': super().label_from_instance(obj), 'disabled': not obj.is_leaf()}
+        return {
+            "label": super().label_from_instance(obj),
+            "disabled": not obj.is_leaf(),
+        }
 
 
 class UpdateMetaTermsForm(ApplicationSubmissionModelForm):
     meta_terms = GroupedModelMultipleChoiceField(
         queryset=None,  # updated in init method
-        widget=MetaTermSelect2Widget(attrs={'data-placeholder': 'Meta terms'}),
-        label=_('Meta terms'),
-        choices_groupby='get_parent',
+        widget=MetaTermSelect2Widget(attrs={"data-placeholder": "Meta terms"}),
+        label=_("Meta terms"),
+        choices_groupby="get_parent",
         required=False,
-        help_text=_('Meta terms are hierarchical in nature.'),
+        help_text=_("Meta terms are hierarchical in nature."),
     )
 
     class Meta:
@@ -499,9 +553,11 @@ class UpdateMetaTermsForm(ApplicationSubmissionModelForm):
         fields: list = []
 
     def __init__(self, *args, **kwargs):
-        kwargs.pop('user')
+        kwargs.pop("user")
         super().__init__(*args, **kwargs)
-        self.fields['meta_terms'].queryset = MetaTerm.get_root_descendants().exclude(depth=2)
+        self.fields["meta_terms"].queryset = MetaTerm.get_root_descendants().exclude(
+            depth=2
+        )
 
 
 class CreateReminderForm(forms.ModelForm):
@@ -516,16 +572,17 @@ class CreateReminderForm(forms.ModelForm):
         self.user = user
 
         if instance:
-            self.fields['submission'].initial = instance.id
+            self.fields["submission"].initial = instance.id
 
     def save(self, *args, **kwargs):
         return Reminder.objects.create(
-            title=self.cleaned_data['title'],
-            description=self.cleaned_data['description'],
-            time=self.cleaned_data['time'],
-            submission=self.cleaned_data['submission'],
-            user=self.user)
+            title=self.cleaned_data["title"],
+            description=self.cleaned_data["description"],
+            time=self.cleaned_data["time"],
+            submission=self.cleaned_data["submission"],
+            user=self.user,
+        )
 
     class Meta:
         model = Reminder
-        fields = ['title', 'description', 'time', 'action']
+        fields = ["title", "description", "time", "action"]
diff --git a/hypha/apply/funds/management/commands/export_submissions_csv.py b/hypha/apply/funds/management/commands/export_submissions_csv.py
index 999f380d391076cb4f745797084d98530ed0c14a..af107417a16f4aca1b1b80f9fe8537d96b7db7bc 100644
--- a/hypha/apply/funds/management/commands/export_submissions_csv.py
+++ b/hypha/apply/funds/management/commands/export_submissions_csv.py
@@ -9,30 +9,48 @@ class Command(BaseCommand):
     help = "Export submission stats to a csv file."
 
     def handle(self, *args, **options):
-        with open('export_submissions.csv', 'w', newline='') as csvfile:
+        with open("export_submissions.csv", "w", newline="") as csvfile:
             writer = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
-            writer.writerow(['Submission ID', 'Submission title', 'Submission author', 'Submission e-mail', 'Submission value', 'Submission duration', 'Submission reapplied', 'Submission stage', 'Submission phase', 'Submission screening', 'Submission date', 'Submission region', 'Submission country', 'Submission focus', 'Round/Lab/Fellowship'])
+            writer.writerow(
+                [
+                    "Submission ID",
+                    "Submission title",
+                    "Submission author",
+                    "Submission e-mail",
+                    "Submission value",
+                    "Submission duration",
+                    "Submission reapplied",
+                    "Submission stage",
+                    "Submission phase",
+                    "Submission screening",
+                    "Submission date",
+                    "Submission region",
+                    "Submission country",
+                    "Submission focus",
+                    "Round/Lab/Fellowship",
+                ]
+            )
             for submission in ApplicationSubmission.objects.exclude_draft():
-                submission_region = ''
-                submission_country = ''
-                submission_focus = ''
-                submission_reapplied = ''
+                submission_region = ""
+                submission_country = ""
+                submission_focus = ""
+                submission_reapplied = ""
                 for field_id in submission.question_text_field_ids:
                     if field_id not in submission.named_blocks:
                         question_field = submission.serialize(field_id)
-                        name = question_field['question']
-                        if isinstance(question_field['answer'], str):
-                            answer = question_field['answer']
+                        name = question_field["question"]
+                        if isinstance(question_field["answer"], str):
+                            answer = question_field["answer"]
                         else:
-                            answer = ','.join(question_field['answer'])
-                        if answer and not answer == 'N':
-                            if name == 'Region':
+                            answer = ",".join(question_field["answer"])
+                        if answer and not answer == "N":
+                            if name == "Region":
                                 submission_region = answer
-                            elif name == 'Country':
+                            elif name == "Country":
                                 submission_country = answer
-                            elif name == 'Focus':
+                            elif name == "Focus":
                                 submission_focus = answer
-                            elif 'or received funding' in name:
+                            elif "or received funding" in name:
                                 submission_reapplied = answer
 
                 if submission.round:
@@ -44,4 +62,22 @@ class Command(BaseCommand):
                     submission_value = submission.value
                 except KeyError:
                     submission_value = 0
-                writer.writerow([submission.id, submission.title, submission.full_name, submission.email, submission_value, submission.duration, submission_reapplied, submission.stage, submission.phase, submission.joined_screening_statuses, submission.submit_time.strftime('%Y-%m-%d'), submission_region, submission_country, submission_focus, submission_type])
+                writer.writerow(
+                    [
+                        submission.id,
+                        submission.title,
+                        submission.full_name,
+                        submission.email,
+                        submission_value,
+                        submission.duration,
+                        submission_reapplied,
+                        submission.stage,
+                        submission.phase,
+                        submission.joined_screening_statuses,
+                        submission.submit_time.strftime("%Y-%m-%d"),
+                        submission_region,
+                        submission_country,
+                        submission_focus,
+                        submission_type,
+                    ]
+                )
diff --git a/hypha/apply/funds/management/commands/migrate_community_lab_applications.py b/hypha/apply/funds/management/commands/migrate_community_lab_applications.py
index b887ae8fb3701a506f02a0443d5bd6d3c424eac9..9f21e8b4df66740e88157a590129fe25195633f8 100644
--- a/hypha/apply/funds/management/commands/migrate_community_lab_applications.py
+++ b/hypha/apply/funds/management/commands/migrate_community_lab_applications.py
@@ -126,5 +126,4 @@ class Command(MigrateCommand):
             "id": "a1f03bca-9267-49cf-9880-444d6806065c",
             "type": "boolean",
         },
-
     }
diff --git a/hypha/apply/funds/management/commands/migrate_fellowship_proposals.py b/hypha/apply/funds/management/commands/migrate_fellowship_proposals.py
index c849494ca99e7bd920ca0d90add0af5fd7df2f9a..6fc8a26869f9c40f8cf106fba0fedc4963f1164e 100644
--- a/hypha/apply/funds/management/commands/migrate_fellowship_proposals.py
+++ b/hypha/apply/funds/management/commands/migrate_fellowship_proposals.py
@@ -17,13 +17,11 @@ class Command(MigrateCommand):
             "type": "value",
             "key": "safe_value",
         },
-
         "field_proposal_host_text": {
             "id": "bc03235e-3c78-4770-9fc2-97feb93c2c8c",
             "type": "value",
             "key": "safe_value",
         },
-
         "field_proposal_start_date": {
             "id": "672cb6f1-335c-4005-a0f1-46c414feda06",
             "type": "value",
diff --git a/hypha/apply/funds/management/commands/migrate_proposals.py b/hypha/apply/funds/management/commands/migrate_proposals.py
index b90a90185affab6fccf99d2236693324f4d00c82..40844eddebca83dc59461ef04c2f483063ac3671 100644
--- a/hypha/apply/funds/management/commands/migrate_proposals.py
+++ b/hypha/apply/funds/management/commands/migrate_proposals.py
@@ -55,7 +55,7 @@ class Command(MigrateCommand):
                 "postal_code": "postalcode",
                 "thoroughfare": "thoroughfare",
                 "premise": "premise",
-            }
+            },
         },
         "field_proposal_summary": {
             "id": "a7502e97-5f2e-417f-b08c-588d367e40e5",
diff --git a/hypha/apply/funds/management/commands/migrate_rr_applications.py b/hypha/apply/funds/management/commands/migrate_rr_applications.py
index cc43c194b72a55d91649350029ef555d81e02ec5..d05a3754de472c90a176e26945147826c148df5a 100644
--- a/hypha/apply/funds/management/commands/migrate_rr_applications.py
+++ b/hypha/apply/funds/management/commands/migrate_rr_applications.py
@@ -159,7 +159,7 @@ class Command(MigrateCommand):
                 "postal_code": "postalcode",
                 "thoroughfare": "thoroughfare",
                 "premise": "premise",
-            }
+            },
         },
         "field_application_questions": {
             "id": "1889de86-0a0d-4abf-9916-4db87a499d35",
diff --git a/hypha/apply/funds/management/commands/migration_base.py b/hypha/apply/funds/management/commands/migration_base.py
index b1f024826023ed2d8dcdbeac7e3c23578c72ea83..7f9091bf3d58c165df3dd951fe1316e999f2bb69 100644
--- a/hypha/apply/funds/management/commands/migration_base.py
+++ b/hypha/apply/funds/management/commands/migration_base.py
@@ -20,22 +20,22 @@ from hypha.apply.funds.workflow import INITIAL_STATE
 
 
 class MigrationStorage(S3Boto3Storage):
-    if hasattr(settings, 'AWS_MIGRATION_BUCKET_NAME'):
+    if hasattr(settings, "AWS_MIGRATION_BUCKET_NAME"):
         bucket_name = settings.AWS_MIGRATION_BUCKET_NAME
 
-    if hasattr(settings, 'AWS_MIGRATION_ACCESS_KEY_ID'):
+    if hasattr(settings, "AWS_MIGRATION_ACCESS_KEY_ID"):
         access_key = settings.AWS_MIGRATION_ACCESS_KEY_ID
 
-    if hasattr(settings, 'AWS_MIGRATION_SECRET_ACCESS_KEY'):
+    if hasattr(settings, "AWS_MIGRATION_SECRET_ACCESS_KEY"):
         secret_key = settings.AWS_MIGRATION_SECRET_ACCESS_KEY
 
-    bucket_acl = 'private'
+    bucket_acl = "private"
     custom_domain = False
-    default_acl = 'private'
+    default_acl = "private"
     encryption = True
     file_overwrite = False
     querystring_auth = True
-    url_protocol = 'https:'
+    url_protocol = "https:"
 
 
 migration_storage = MigrationStorage()
@@ -51,17 +51,21 @@ class MigrateCommand(BaseCommand):
     ApplicationSubmission.status = patched_status_field
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
         # Prepare the list of categories.
         for item in CATEGORIES:
-            category, _ = Category.objects.get_or_create(name=item['category'])
-            option, _ = Option.objects.get_or_create(value=item['name'], category=category)
-            self.terms[item['tid']] = option
+            category, _ = Category.objects.get_or_create(name=item["category"])
+            option, _ = Option.objects.get_or_create(
+                value=item["name"], category=category
+            )
+            self.terms[item["tid"]] = option
 
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             counter = 0
@@ -75,9 +79,9 @@ class MigrateCommand(BaseCommand):
         node = self.data[id]
 
         try:
-            submission = ApplicationSubmission.objects.get(drupal_id=node['nid'])
+            submission = ApplicationSubmission.objects.get(drupal_id=node["nid"])
         except ApplicationSubmission.DoesNotExist:
-            submission = ApplicationSubmission(drupal_id=node['nid'])
+            submission = ApplicationSubmission(drupal_id=node["nid"])
 
         # Disable auto_* on date fields so imported dates are used.
         for field in submission._meta.local_fields:
@@ -85,8 +89,10 @@ class MigrateCommand(BaseCommand):
                 field.auto_now_add = False
 
         # TODO timezone?
-        submission.submit_time = datetime.fromtimestamp(int(node['created']), timezone.utc)
-        submission.user = self.get_user(node['uid'])
+        submission.submit_time = datetime.fromtimestamp(
+            int(node["created"]), timezone.utc
+        )
+        submission.user = self.get_user(node["uid"])
 
         if self.CONTENT_TYPE == "fund":
             FUND = FundType.objects.get(title=self.FUND_NAME)
@@ -108,21 +114,25 @@ class MigrateCommand(BaseCommand):
 
         submission.status = self.get_workflow_state(node)
 
-        if 'proposal_nid' in node:
+        if "proposal_nid" in node:
             try:
-                submission.next = ApplicationSubmission.objects.get(drupal_id=node['proposal_nid'])
+                submission.next = ApplicationSubmission.objects.get(
+                    drupal_id=node["proposal_nid"]
+                )
             except ApplicationSubmission.DoesNotExist:
-                self.stdout.write("No related proposal found, please import proposals before applications.")
+                self.stdout.write(
+                    "No related proposal found, please import proposals before applications."
+                )
                 pass
 
         form_data = {
-            'skip_account_creation_notification': True,
+            "skip_account_creation_notification": True,
         }
 
         for field in node:
             if field in self.STREAMFIELD_MAP:
                 try:
-                    id = self.STREAMFIELD_MAP[field]['id']
+                    id = self.STREAMFIELD_MAP[field]["id"]
                     form_data[id] = self.get_field_value(field, node)
                 except TypeError:
                     pass
@@ -134,7 +144,7 @@ class MigrateCommand(BaseCommand):
             form_data["duration"] = "1"
 
         if "email" not in form_data or not form_data["email"]:
-            if hasattr(submission.user, 'email'):
+            if hasattr(submission.user, "email"):
                 form_data["email"] = submission.user.email
             else:
                 form_data["email"] = f"user+{node['uid']}@example.com"
@@ -145,7 +155,9 @@ class MigrateCommand(BaseCommand):
             submission.save()
             self.stdout.write(f"Processed \"{node['title']}\" ({node['nid']})")
         except IntegrityError:
-            self.stdout.write(f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
 
     def get_user(self, uid):
         try:
@@ -164,41 +176,43 @@ class MigrateCommand(BaseCommand):
         field: [{value|target_id|tid: VALUE},]
         """
         mapping = self.STREAMFIELD_MAP[field]
-        mapping_type = mapping['type']
-        key = mapping.get('key', 'value')
+        mapping_type = mapping["type"]
+        key = mapping.get("key", "value")
         source_value = node[field]
         value = None
 
         if mapping_type == "direct":
             value = source_value
-        elif mapping_type == 'value':
+        elif mapping_type == "value":
             if key in source_value:
-                value = self.nl2br(source_value[key]) if source_value else ''
+                value = self.nl2br(source_value[key]) if source_value else ""
             else:
-                value = self.nl2br(source_value['value']) if source_value else ''
-        elif mapping_type == 'merge_value':
+                value = self.nl2br(source_value["value"]) if source_value else ""
+        elif mapping_type == "merge_value":
             values = []
             i = 0
             for item in source_value:
-                question = self.REQUEST_QUESTION_MAP[node['field_application_request']['target_id']]
+                question = self.REQUEST_QUESTION_MAP[
+                    node["field_application_request"]["target_id"]
+                ]
                 values.append(f"<strong>{question[i]}</strong>{item[key]}<br>\n")
                 i += 1
-            merged_values = ''.join(values)
-            value = self.nl2br(merged_values) if source_value else ''
-        elif mapping_type == 'map' and 'map' in 'mapping':
-            value = mapping['map'].get(source_value[key])
-        elif mapping_type == 'address' and 'map' in mapping:
+            merged_values = "".join(values)
+            value = self.nl2br(merged_values) if source_value else ""
+        elif mapping_type == "map" and "map" in "mapping":
+            value = mapping["map"].get(source_value[key])
+        elif mapping_type == "address" and "map" in mapping:
             try:
-                value_map = mapping['map']
+                value_map = mapping["map"]
                 value = {}
                 for item in value_map:
                     value[value_map[item]] = source_value[item]
                 value = json.dumps(value)
             except TypeError:
                 value = {}
-        elif mapping_type == 'boolean':
-            value = source_value[key] == '1' if source_value else False
-        elif mapping_type == 'category':
+        elif mapping_type == "boolean":
+            value = source_value[key] == "1" if source_value else False
+        elif mapping_type == "category":
             if not source_value:
                 value = []
             else:
@@ -211,7 +225,7 @@ class MigrateCommand(BaseCommand):
                         option = self.get_referenced_term(item[key])
                         if option:
                             value.append(option)
-        elif mapping_type == 'file':
+        elif mapping_type == "file":
             value = self.process_file(source_value)
 
         return value
@@ -241,7 +255,7 @@ class MigrateCommand(BaseCommand):
             "invited_for_proposal": "accepted",
             "dropped_concept_note": "rejected",
             "dropped": "rejected",
-            "dropped_without_review": "rejected"
+            "dropped_without_review": "rejected",
         }
 
         states_concept = {
@@ -255,7 +269,7 @@ class MigrateCommand(BaseCommand):
             "invited_for_proposal": "invited_to_proposal",
             "dropped_concept_note": "concept_rejected",
             "dropped": "concept_rejected",
-            "dropped_without_review": "concept_rejected"
+            "dropped_without_review": "concept_rejected",
         }
 
         states_proposal = {
@@ -269,22 +283,28 @@ class MigrateCommand(BaseCommand):
             "invited_for_proposal": "proposal_accepted",
             "dropped_concept_note": "proposal_rejected",
             "dropped": "proposal_rejected",
-            "dropped_without_review": "proposal_rejected"
+            "dropped_without_review": "proposal_rejected",
         }
 
         if self.APPLICATION_TYPE == "request":
-            workflow_state = states_request.get(node['workbench_moderation']['current']['state'], "in_discussion")
+            workflow_state = states_request.get(
+                node["workbench_moderation"]["current"]["state"], "in_discussion"
+            )
         elif self.APPLICATION_TYPE == "concept":
-            workflow_state = states_concept.get(node['workbench_moderation']['current']['state'], "in_discussion")
+            workflow_state = states_concept.get(
+                node["workbench_moderation"]["current"]["state"], "in_discussion"
+            )
         elif self.APPLICATION_TYPE == "proposal":
-            workflow_state = states_proposal.get(node['workbench_moderation']['current']['state'], "draft_proposal")
+            workflow_state = states_proposal.get(
+                node["workbench_moderation"]["current"]["state"], "draft_proposal"
+            )
         else:
             workflow_state = None
 
         return workflow_state
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
 
     def process_file(self, value):
         if isinstance(value, dict):
@@ -293,10 +313,12 @@ class MigrateCommand(BaseCommand):
         files = []
 
         for file_data in value:
-            parts = urlsplit(file_data['uri'])
-            file_path = os.path.join('files', 'private', parts.netloc, *parts.path.split('/'))
+            parts = urlsplit(file_data["uri"])
+            file_path = os.path.join(
+                "files", "private", parts.netloc, *parts.path.split("/")
+            )
             saved_file = migration_storage.open(file_path)
-            saved_file.name = file_data['filename']
+            saved_file.name = file_data["filename"]
             files.append(saved_file)
 
         return files
diff --git a/hypha/apply/funds/management/commands/seed_community_lab_application.py b/hypha/apply/funds/management/commands/seed_community_lab_application.py
index 116e3f95321bc5a9abb905af40e0a2addd52da45..1bda87d07b63836a06da80832413c524517eac4d 100644
--- a/hypha/apply/funds/management/commands/seed_community_lab_application.py
+++ b/hypha/apply/funds/management/commands/seed_community_lab_application.py
@@ -10,7 +10,7 @@ from hypha.apply.home.models import ApplyHomePage
 from hypha.apply.review.models import ReviewForm
 from hypha.apply.users.groups import STAFF_GROUP_NAME
 
-CL_FUND_TITLE = 'Community lab (archive fund)'
+CL_FUND_TITLE = "Community lab (archive fund)"
 
 
 class Command(BaseCommand):
@@ -23,65 +23,399 @@ class Command(BaseCommand):
         self.create_community_lab_fund_type(application_form, application_review_form)
 
     def create_community_lab_form(self):
-
         data = [
-            {"type": "text_markup", "value": "<h3>Basic information</h3>", "id": "353df1fa-a054-406f-855f-842a52ad2852"},
-            {"type": "title", "value": {"field_label": "What is your event name?", "help_text": "", "info": None}, "id": "690e7839-eedb-4c24-a438-91d09da88774"},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "4926d94b-7e57-494a-a2e2-2331a8ee04a2"},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "f0b90755-dc11-4de7-89aa-7611bf698455"},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "64a2f72a-9e3b-4b97-b69a-d0b9dbdd1cc7"},
-            {"type": "date", "value": {"field_label": "Date of event", "help_text": "", "required": "", "default_value": ""}, "id": "d3364b5b-976b-4cd6-85d5-4ccc0bb9b560"},
-            {"type": "value", "value": {"field_label": "Amount requested", "help_text": "", "info": None}, "id": "eadbd266-c825-45ea-8de9-deaa2aaa677b"},
-            {"type": "duration", "value": {"field_label": "Duration", "help_text": "", "info": None}, "id": "9af05779-8547-4a85-8f1c-3505d5778e94"},
-            {"type": "text_markup", "value": "<h3>More information about your product</h3>", "id": "17bc7cbe-49d7-42cf-8f60-1bbb0c841a1a"},
-            {"type": "rich_text", "value": {"field_label": "Please provide us a description of this event", "help_text": "", "required": "", "default_value": ""}, "id": "aeea7bd9-01b5-406e-bb30-1303ba0f550a"},
-            {"type": "rich_text", "value": {"field_label": "Please describe the target audience(s)", "help_text": "", "required": "", "default_value": ""}, "id": "a5117396-0286-4937-91a3-be33a5944ac6"},
-            {"type": "rich_text", "value": {"field_label": "What are the event’s objectives?", "help_text": "", "required": "", "default_value": ""}, "id": "d90d2cd4-831e-46f5-8f2e-82ac94913784"},
-            {"type": "rich_text", "value": {"field_label": "Please describe the strategy that will allow you to achieve your goals", "help_text": "", "required": "", "default_value": ""}, "id": "fc5ddac7-c7b5-4d07-9bc3-16902e9a7afb"},
-            {"type": "rich_text", "value": {"field_label": "How will this event support people living within a developing country affected by repressive censorship and/or surveillance?", "help_text": "", "required": "", "default_value": ""}, "id": "ea6ceb76-882e-4739-94da-7b055a112d1c"},
-            {"type": "rich_text", "value": {"field_label": "What collaborations with other organizations, communities, or networks exist around this event, if any?", "help_text": "", "required": "", "default_value": ""}, "id": "afa7e16b-d31c-4016-af88-7939acc7b6e1"},
-            {"type": "rich_text", "value": {"field_label": "How will the event ensure new and diverse voices are being represented?", "help_text": "", "required": "", "default_value": ""}, "id": "55e23c45-72a7-4ab9-9940-764d00724de8"},
-            {"type": "rich_text", "value": {"field_label": "Please describe the outreach and promotion plan for the event?", "help_text": "", "required": "", "default_value": ""}, "id": "737bd894-78b1-41ef-969c-2a57c843cd5b"},
-            {"type": "rich_text", "value": {"field_label": "Is there anything you need help with in regards to planning this event that is non-monetary related?", "help_text": "For example, are there any audiences you are trying to cultivate? Do you need advice on the format of the event?", "required": "", "default_value": ""}, "id": "56c84f40-f59e-4e82-80a1-2cd971717e9c"},
-            {"type": "rich_text", "value": {"field_label": "Please provide a detailed budget", "help_text": "", "required": "", "default_value": ""}, "id": "6ca29ae0-780a-467a-a3e9-34195bcb0d79"},
-            {"type": "checkbox", "value": {"field_label": "Do you have a code of conduct?", "help_text": "If yes, upload it in the field below.", "required": "true", "default_value": "false"}, "id": "9db8b2ca-62b6-44c4-9d3d-70cb4a28e65f"},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": ""}, "id": "b3af7aac-3439-45fa-9573-518f82f5cd6c"},
-            {"type": "text_markup", "value": "<h3>I acknowledge</h3>", "id": "b4bbe32a-058d-44b0-aaea-bddc70674277"},
-            {"type": "checkbox", "value": {"field_label": "My application will be dismissed if it does not fit within OTF\'s mission, values, principles statements.", "help_text": "", "default_value": ""}, "id": "1248f597-2f18-4b16-8f96-63912e5197c5"},
-            {"type": "text_markup", "value": "Read our <a href=\"\\/about/program\">mission, values, and principles</a>.", "id": "67b65f65-5d9f-4152-9c0b-d980d9944e3d"},
-            {"type": "checkbox", "value": {"field_label": "I have read and understand OTF\'s Terms and Privacy policy.", "help_text": "", "default_value": ""}, "id": "5a676552-e189-417e-9901-05bfc973cfb5"},
-            {"type": "text_markup", "value": "Read the <a href=\"\\/tos\">Terms and Privacy policy</a>.", "id": "f340a29d-56e3-4a01-be37-fc405cbafa8e"},
-            {"type": "checkbox", "value": {"field_label": "I am legally able to sign contracts or represent an organization that can.", "help_text": "", "default_value": ""}, "id": "c4f54c3d-6b2a-4b32-b651-9121430aa06f"},
-            {"type": "checkbox", "value": {"field_label": "I understand that all intellectual property created with support for this application must be openly licensed.", "help_text": "", "default_value": ""}, "id": "beb4d454-466d-43d5-823e-80dbccacbbb3"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is incomplete in any way, it will be dismissed.", "help_text": "", "default_value": ""}, "id": "fd6b034d-7cec-49fe-b4da-991c382283ef"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.", "help_text": "", "default_value": ""}, "id": "d930a864-263d-4d0d-8ff1-553b13efda41"},
-            {"type": "text_markup", "value": "<h3>I would like to</h3>", "id": "2b572f43-c912-4a94-93ae-cd6b64c2b95b"},
-            {"type": "checkbox", "value": {"field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc).", "help_text": "", "default_value": ""}, "id": "f75fd335-be7d-460d-b96a-53d7aa9a826f"},
-            {"type": "checkbox", "value": {"field_label": "Sign up for OTF\'s daily newsletter (collection of news related to global internet freedom).", "help_text": "", "default_value": ""}, "id": "a1f03bca-9267-49cf-9880-444d6806065c"}
+            {
+                "type": "text_markup",
+                "value": "<h3>Basic information</h3>",
+                "id": "353df1fa-a054-406f-855f-842a52ad2852",
+            },
+            {
+                "type": "title",
+                "value": {
+                    "field_label": "What is your event name?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "690e7839-eedb-4c24-a438-91d09da88774",
+            },
+            {
+                "type": "full_name",
+                "value": {"field_label": "Your name", "help_text": "", "info": None},
+                "id": "4926d94b-7e57-494a-a2e2-2331a8ee04a2",
+            },
+            {
+                "type": "email",
+                "value": {"field_label": "E-mail", "help_text": "", "info": None},
+                "id": "f0b90755-dc11-4de7-89aa-7611bf698455",
+            },
+            {
+                "type": "address",
+                "value": {"field_label": "Address", "help_text": "", "info": None},
+                "id": "64a2f72a-9e3b-4b97-b69a-d0b9dbdd1cc7",
+            },
+            {
+                "type": "date",
+                "value": {
+                    "field_label": "Date of event",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "d3364b5b-976b-4cd6-85d5-4ccc0bb9b560",
+            },
+            {
+                "type": "value",
+                "value": {
+                    "field_label": "Amount requested",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "eadbd266-c825-45ea-8de9-deaa2aaa677b",
+            },
+            {
+                "type": "duration",
+                "value": {"field_label": "Duration", "help_text": "", "info": None},
+                "id": "9af05779-8547-4a85-8f1c-3505d5778e94",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>More information about your product</h3>",
+                "id": "17bc7cbe-49d7-42cf-8f60-1bbb0c841a1a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Please provide us a description of this event",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "aeea7bd9-01b5-406e-bb30-1303ba0f550a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Please describe the target audience(s)",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "a5117396-0286-4937-91a3-be33a5944ac6",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What are the event’s objectives?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "d90d2cd4-831e-46f5-8f2e-82ac94913784",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Please describe the strategy that will allow you to achieve your goals",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "fc5ddac7-c7b5-4d07-9bc3-16902e9a7afb",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "How will this event support people living within a developing country affected by repressive censorship and/or surveillance?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "ea6ceb76-882e-4739-94da-7b055a112d1c",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What collaborations with other organizations, communities, or networks exist around this event, if any?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "afa7e16b-d31c-4016-af88-7939acc7b6e1",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "How will the event ensure new and diverse voices are being represented?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "55e23c45-72a7-4ab9-9940-764d00724de8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Please describe the outreach and promotion plan for the event?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "737bd894-78b1-41ef-969c-2a57c843cd5b",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Is there anything you need help with in regards to planning this event that is non-monetary related?",
+                    "help_text": "For example, are there any audiences you are trying to cultivate? Do you need advice on the format of the event?",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "56c84f40-f59e-4e82-80a1-2cd971717e9c",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Please provide a detailed budget",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "6ca29ae0-780a-467a-a3e9-34195bcb0d79",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Do you have a code of conduct?",
+                    "help_text": "If yes, upload it in the field below.",
+                    "required": "true",
+                    "default_value": "false",
+                },
+                "id": "9db8b2ca-62b6-44c4-9d3d-70cb4a28e65f",
+            },
+            {
+                "type": "multi_file",
+                "value": {"field_label": "Upload", "help_text": "", "required": ""},
+                "id": "b3af7aac-3439-45fa-9573-518f82f5cd6c",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I acknowledge</h3>",
+                "id": "b4bbe32a-058d-44b0-aaea-bddc70674277",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "My application will be dismissed if it does not fit within OTF's mission, values, principles statements.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "1248f597-2f18-4b16-8f96-63912e5197c5",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read our <a href="\\/about/program">mission, values, and principles</a>.',
+                "id": "67b65f65-5d9f-4152-9c0b-d980d9944e3d",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I have read and understand OTF's Terms and Privacy policy.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "5a676552-e189-417e-9901-05bfc973cfb5",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read the <a href="\\/tos">Terms and Privacy policy</a>.',
+                "id": "f340a29d-56e3-4a01-be37-fc405cbafa8e",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I am legally able to sign contracts or represent an organization that can.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "c4f54c3d-6b2a-4b32-b651-9121430aa06f",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that all intellectual property created with support for this application must be openly licensed.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "beb4d454-466d-43d5-823e-80dbccacbbb3",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is incomplete in any way, it will be dismissed.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "fd6b034d-7cec-49fe-b4da-991c382283ef",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "d930a864-263d-4d0d-8ff1-553b13efda41",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I would like to</h3>",
+                "id": "2b572f43-c912-4a94-93ae-cd6b64c2b95b",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc).",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "f75fd335-be7d-460d-b96a-53d7aa9a826f",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up for OTF's daily newsletter (collection of news related to global internet freedom).",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "a1f03bca-9267-49cf-9880-444d6806065c",
+            },
         ]
 
-        application_form, _ = ApplicationForm.objects.get_or_create(name='Community lab', defaults={'form_fields': json.dumps(data)})
+        application_form, _ = ApplicationForm.objects.get_or_create(
+            name="Community lab", defaults={"form_fields": json.dumps(data)}
+        )
 
         return application_form
 
     def create_community_lab_review_form(self):
-
         data2 = [
-            {"type": "text_markup", "value": "<h3>Conflicts of Interest and Confidentialit</h3>", "id": "fe01dccb-87db-4dba-8cb8-f75e6f3448e6"},
-            {"type": "checkbox", "value": {"field_label": "I understand about confidentiality", "help_text": "", "required": "true", "default_value": ""}, "id": "c1c6cedc-a084-4c55-87d5-7f6baf48441e"},
-            {"type": "dropdown", "value": {"field_label": "Do you have any conflicts of interest to report?", "help_text": "", "required": "", "choices": ["Yes", "No"]}, "id": "c29a7f43-009c-4341-bbe8-9582ba089d52"},
-            {"type": "rich_text", "value": {"field_label": "Conflict(s) of interest disclosure", "help_text": "", "required": "", "default_value": ""}, "id": "3aab69b1-6b60-4850-8f9f-7bc1b5871dcf"},
-            {"type": "recommendation", "value": {"field_label": "Do you think we should support this request?", "help_text": "", "info": None}, "id": "caa6d522-4cfc-4f96-a29b-773a2de03e31"},
-            {"type": "score", "value": {"field_label": "How well do the goals and objectives fit OTF’s remit?", "help_text": "", "required": ""}, "id": "732fc004-3086-44e1-8508-e0f17c3732a8"},
-            {"type": "rich_text", "value": {"field_label": "What do you like about the proposed effort?", "help_text": "", "required": "", "default_value": ""}, "id": "f3c42cf1-e5ef-4674-bf6c-8e4640ee0d58"},
-            {"type": "rich_text", "value": {"field_label": "What do you not like about the proposed effort?", "help_text": "", "required": "", "default_value": ""}, "id": "e1e69628-c663-4cd2-a0ea-507ad01149de"},
-            {"type": "rich_text", "value": {"field_label": "What areas, if any, would you like more information?", "help_text": "", "required": "", "default_value": ""}, "id": "3033f228-58af-4944-b884-736fe6258bd6"},
-            {"type": "rich_text", "value": {"field_label": "How could they can improve collaboration or the inclusion of diverse voices?", "help_text": "", "required": "", "default_value": ""}, "id": "20ec1ed7-4e3e-433c-944a-7c20cd6245c8"},
-            {"type": "rich_text", "value": {"field_label": "Are there any individuals, communities, or networks they should reach out to?", "help_text": "", "required": "", "default_value": ""}, "id": "fd361c53-a263-4572-8403-74f6736d38fc"},
-            {"type": "comments", "value": {"field_label": "Other comments", "help_text": "", "info": None}, "id": "d74e398e-6e64-43ae-b799-a3b79860c80e"}
+            {
+                "type": "text_markup",
+                "value": "<h3>Conflicts of Interest and Confidentialit</h3>",
+                "id": "fe01dccb-87db-4dba-8cb8-f75e6f3448e6",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand about confidentiality",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "c1c6cedc-a084-4c55-87d5-7f6baf48441e",
+            },
+            {
+                "type": "dropdown",
+                "value": {
+                    "field_label": "Do you have any conflicts of interest to report?",
+                    "help_text": "",
+                    "required": "",
+                    "choices": ["Yes", "No"],
+                },
+                "id": "c29a7f43-009c-4341-bbe8-9582ba089d52",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Conflict(s) of interest disclosure",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "3aab69b1-6b60-4850-8f9f-7bc1b5871dcf",
+            },
+            {
+                "type": "recommendation",
+                "value": {
+                    "field_label": "Do you think we should support this request?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "caa6d522-4cfc-4f96-a29b-773a2de03e31",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "How well do the goals and objectives fit OTF’s remit?",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "732fc004-3086-44e1-8508-e0f17c3732a8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What do you like about the proposed effort?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "f3c42cf1-e5ef-4674-bf6c-8e4640ee0d58",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What do you not like about the proposed effort?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "e1e69628-c663-4cd2-a0ea-507ad01149de",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What areas, if any, would you like more information?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "3033f228-58af-4944-b884-736fe6258bd6",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "How could they can improve collaboration or the inclusion of diverse voices?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "20ec1ed7-4e3e-433c-944a-7c20cd6245c8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Are there any individuals, communities, or networks they should reach out to?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "fd361c53-a263-4572-8403-74f6736d38fc",
+            },
+            {
+                "type": "comments",
+                "value": {
+                    "field_label": "Other comments",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "d74e398e-6e64-43ae-b799-a3b79860c80e",
+            },
         ]
 
-        community_lab_review_form, _ = ReviewForm.objects.get_or_create(name='Community lab review', defaults={'form_fields': json.dumps(data2)})
+        community_lab_review_form, _ = ReviewForm.objects.get_or_create(
+            name="Community lab review", defaults={"form_fields": json.dumps(data2)}
+        )
 
         return community_lab_review_form
 
@@ -98,12 +432,14 @@ class Command(BaseCommand):
         except LabType.DoesNotExist:
             apply_home = ApplyHomePage.objects.first()
 
-            lab = LabType(title=CL_FUND_TITLE, lead=lead, workflow_name='single')
+            lab = LabType(title=CL_FUND_TITLE, lead=lead, workflow_name="single")
             apply_home.add_child(instance=lab)
 
             lab_form = LabBaseForm.objects.create(lab=lab, form=application_form)
             lab.forms = [lab_form]
-            lab_review_form = LabBaseReviewForm.objects.create(lab=lab, form=application_review_form)
+            lab_review_form = LabBaseReviewForm.objects.create(
+                lab=lab, form=application_review_form
+            )
             lab.review_forms = [lab_review_form]
             lab.save()
 
diff --git a/hypha/apply/funds/management/commands/seed_concept_note.py b/hypha/apply/funds/management/commands/seed_concept_note.py
index 34ea41566962be5e7e2fe82eeb47356814bf251d..645f4a23231f460163dda5cc991264ae6f9b86d8 100644
--- a/hypha/apply/funds/management/commands/seed_concept_note.py
+++ b/hypha/apply/funds/management/commands/seed_concept_note.py
@@ -15,8 +15,8 @@ from hypha.apply.home.models import ApplyHomePage
 from hypha.apply.review.models import ReviewForm
 from hypha.apply.users.groups import STAFF_GROUP_NAME
 
-CN_ROUND_TITLE = 'Internet Freedom Fund (archive round)'
-CN_FUND_TITLE = 'Internet Freedom Fund (archive fund)'
+CN_ROUND_TITLE = "Internet Freedom Fund (archive round)"
+CN_FUND_TITLE = "Internet Freedom Fund (archive fund)"
 
 
 class Command(BaseCommand):
@@ -26,194 +26,1066 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         # There's an Internet Freedom Fund open round, so bail out. Avoids duplicate command runs.
         if Round.objects.filter(title=CN_ROUND_TITLE).count():
-            self.stdout.write(self.style.WARNING('Skipping. The target Round/Fund Type and Application Form exist'))
+            self.stdout.write(
+                self.style.WARNING(
+                    "Skipping. The target Round/Fund Type and Application Form exist"
+                )
+            )
             return
 
         application_form = self.create_concept_note_form()
         proposal_form = self.create_proposal_form()
         application_review_form = self.create_concept_review_form()
         proposal_review_form = self.create_proposal_review_form()
-        fund = self.create_concept_note_fund_type(application_form, proposal_form, application_review_form, proposal_review_form)
+        fund = self.create_concept_note_fund_type(
+            application_form,
+            proposal_form,
+            application_review_form,
+            proposal_review_form,
+        )
         self.create_concept_note_round(fund)
 
     def create_concept_note_form(self):
-
-        focus_id = Category.objects.get(name='Focus').id
-        objectives_id = Category.objects.get(name='Objective(s)').id
-        beneficiaries_id = Category.objects.get(name='Beneficiaries').id
-        regions_id = Category.objects.get(name='Region(s)').id
-        addressed_id = Category.objects.get(name='Addressed problems').id
-        status_id = Category.objects.get(name='Project status').id
-        tech_id = Category.objects.get(name='Technology attributes').id
-        countries_id = Category.objects.get(name='Countries').id
+        focus_id = Category.objects.get(name="Focus").id
+        objectives_id = Category.objects.get(name="Objective(s)").id
+        beneficiaries_id = Category.objects.get(name="Beneficiaries").id
+        regions_id = Category.objects.get(name="Region(s)").id
+        addressed_id = Category.objects.get(name="Addressed problems").id
+        status_id = Category.objects.get(name="Project status").id
+        tech_id = Category.objects.get(name="Technology attributes").id
+        countries_id = Category.objects.get(name="Countries").id
 
         data = [
-            {"type": "text_markup", "value": "<h3>Basic information</h3>", "id": "25108c8b-c268-4f47-a441-99c3bc4ce43a"},
-            {"type": "title", "value": {"field_label": "What is your project name?", "help_text": "", "info": None}, "id": "fd8e6437-89a4-4515-84d0-15c31be716ea"},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "825f74bf-9419-411a-97d1-631346ae7218"},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "d66e3f38-48db-498a-83a5-4781ded03941"},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "ea070127-684c-4136-8489-63c352b409c9"},
-            {"type": "dropdown", "value": {"field_label": "Have you ever applied to or received funding as an OTF project?", "help_text": "", "required": "", "choices": ["Yes", "No"]}, "id": "0305a465-8763-4c1f-9197-4ca4227d452a"},
-            {"type": "rich_text", "value": {"field_label": "If yes, which application and what was the outcome?", "help_text": "", "required": "", "default_value": ""}, "id": "c24691be-9861-4dbc-8be4-03b6e68c1973"},
-            {"type": "text_markup", "value": "<h3>What is your idea?</h3>", "id": "0702b9e5-2624-40a0-9caa-42ff46797fb6"},
-            {"type": "rich_text", "value": {"field_label": "Describe it", "help_text": "", "required": "", "default_value": ""}, "id": "c21c58c3-cfbe-4409-b2f2-8f56398f1731"},
-            {"type": "rich_text", "value": {"field_label": "What are hoped for goals or longer term effects of the project?", "help_text": "", "required": "", "default_value": ""}, "id": "27289c14-6926-4f61-bea2-8031a653f71c"},
-            {"type": "category", "value": {"field_label": "Focus", "help_text": "", "required": "", "category": focus_id, "multi": "true"}, "id": "404e2310-000b-4ccb-b772-3680946ff07d"},
-            {"type": "category", "value": {"field_label": "Status", "help_text": "", "required": "", "category": status_id, "multi": "true"}, "id": "145c364f-e0bb-4652-94e8-fe08c831da2b"},
-            {"type": "category", "value": {"field_label": "Technology attributes", "help_text": "", "required": "", "category": tech_id, "multi": "true"}, "id": "b4da2310-9654-4aa7-a04a-06335967ddc5"},
-            {"type": "text_markup", "value": "<h3>How will you do it?</h3>", "id": "e5fe71f5-8ec5-4ac9-ba21-38e03cdcf73b"},
-            {"type": "rich_text", "value": {"field_label": "Describe how", "help_text": "", "required": "", "default_value": ""}, "id": "418b8099-4525-437f-a55c-9b35745d0384"},
-            {"type": "category", "value": {"field_label": "Objective(s)", "help_text": "", "required": "", "category": objectives_id, "multi": "true"}, "id": "390702bd-e4e1-4dc2-8c43-d51bf018b427"},
-            {"type": "duration", "value": {"field_label": "How long will it take?", "help_text": "", "info": None}, "id": "b8d4f24f-c5bd-4a18-aa13-7c7358b3f99f"},
-            {"type": "value", "value": {"field_label": "How much do you want?", "help_text": "", "info": None}, "id": "1e669b4d-e43f-4c7a-9730-08e25cb1592d"},
-            {"type": "rich_text", "value": {"field_label": "How long have you been thinking of working on this idea? What made you first think about it?", "help_text": "", "required": "", "default_value": ""}, "id": "dfb9c307-9328-4a99-9efc-321d474b2ba7"},
-            {"type": "text_markup", "value": "<h3>Who is the project for?</h3>", "id": "563c12f1-d856-4ee2-a449-793bbfd12296"},
-            {"type": "rich_text", "value": {"field_label": "Describe them", "help_text": "", "required": "", "default_value": ""}, "id": "11f94a22-0571-4491-a93e-87c050e02a4a"},
-            {"type": "rich_text", "value": {"field_label": "What community currently exists around this project?", "help_text": "", "required": "", "default_value": ""}, "id": "c272969b-d89f-4b6e-859f-4606a15b3f28"},
-            {"type": "category", "value": {"field_label": "Beneficiaries", "help_text": "", "required": "", "category": beneficiaries_id, "multi": "true"}, "id": "72002c3e-aaee-47da-9377-8bb493f14c21"},
-            {"type": "category", "value": {"field_label": "Region", "help_text": "", "required": "", "category": regions_id, "multi": "true"}, "id": "369b248e-f669-4aeb-b771-7cba0eadb921"},
-            {"type": "category", "value": {"field_label": "Country", "help_text": "", "required": "", "category": countries_id, "multi": "true"}, "id": "57bceb33-ebda-4708-9080-fd1a5923e008"},
-            {"type": "text_markup", "value": "<h3>Why is this project needed?</h3>", "id": "ab556178-07b5-468e-b1cf-46655859fd32"},
-            {"type": "rich_text", "value": {"field_label": "Describe why", "help_text": "", "required": "", "default_value": ""}, "id": "c14ee077-c0eb-48b1-9825-fbba9b91ede5"},
-            {"type": "category", "value": {"field_label": "Addressed problems", "help_text": "", "required": "", "category": addressed_id, "multi": "true"}, "id": "a83a1884-f711-4196-8d15-ae2110466acb"},
-            {"type": "rich_text", "value": {"field_label": "Similar/Complementary efforts", "help_text": "", "required": "", "default_value": ""}, "id": "9ca35708-d611-4cd0-8d4a-3cc08349f45b"},
-            {"type": "rich_text", "value": {"field_label": "Other information", "help_text": "", "required": "", "default_value": ""}, "id": "db7b1642-c03d-4af4-82c9-db67bf9713b0"},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": ""}, "id": "8a91231c-5c3d-46fe-9de6-8d5c86817626"},
-            {"type": "text_markup", "value": "<h3>I acknowledge</h3>", "id": "2c1651a4-2cdc-4b74-8b6e-f077364ca4d8"},
-            {"type": "checkbox", "value": {"field_label": "My application will be dismissed if it does not fit within OTF\'s mission, values, principles statements.", "help_text": "", "default_value": ""}, "id": "4c661a64-2614-4169-b4d2-1fd39e2e831b"},
-            {"type": "text_markup", "value": "Read our <a href=\"\\/about/program\">mission, values, and principles</a>.", "id": "cfdd721d-a4d6-44a8-a2d6-6576f126799b"},
-            {"type": "checkbox", "value": {"field_label": "I have read and understand OTF\'s Terms and Privacy policy.", "help_text": "", "default_value": ""}, "id": "1bc4e113-1414-46ff-bba7-2dc02b2126df"},
-            {"type": "text_markup", "value": "Read the <a href=\"\\/tos\">Terms and Privacy policy</a>.", "id": "d1c79c07-02cb-4f59-b5ed-719da7bdd636"},
-            {"type": "checkbox", "value": {"field_label": "I am legally able to sign contracts or represent an organization that can.", "help_text": "", "default_value": ""}, "id": "42dd68a1-b699-4678-bea6-13e0f842e821"},
-            {"type": "checkbox", "value": {"field_label": "I understand that all intellectual property created with support for this application must be openly licensed.", "help_text": "", "default_value": ""}, "id": "72916731-ec97-4688-95f1-d3bf140b03c2"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is incomplete in any way, it will be dismissed.", "help_text": "", "default_value": ""}, "id": "6856d26d-b169-4fdf-b598-63c3dd9278a2"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.", "help_text": "", "default_value": ""}, "id": "33838399-f292-4b63-83f0-e02d344f99d4"},
-            {"type": "text_markup", "value": "<h3>I would like to</h3>", "id": "3ff08317-92ab-4eb1-adca-08547bed96f8"},
-            {"type": "checkbox", "value": {"field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc).", "help_text": "", "default_value": ""}, "id": "fc571e12-d4a2-4d53-ab34-2c57321dc6ac"},
-            {"type": "checkbox", "value": {"field_label": "Sign up for OTF\'s daily newsletter (collection of news related to global internet freedom).", "help_text": "", "default_value": ""}, "id": "cd0d8a4b-e71a-4dff-964a-f547bd655e7d"}
+            {
+                "type": "text_markup",
+                "value": "<h3>Basic information</h3>",
+                "id": "25108c8b-c268-4f47-a441-99c3bc4ce43a",
+            },
+            {
+                "type": "title",
+                "value": {
+                    "field_label": "What is your project name?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "fd8e6437-89a4-4515-84d0-15c31be716ea",
+            },
+            {
+                "type": "full_name",
+                "value": {"field_label": "Your name", "help_text": "", "info": None},
+                "id": "825f74bf-9419-411a-97d1-631346ae7218",
+            },
+            {
+                "type": "email",
+                "value": {"field_label": "E-mail", "help_text": "", "info": None},
+                "id": "d66e3f38-48db-498a-83a5-4781ded03941",
+            },
+            {
+                "type": "address",
+                "value": {"field_label": "Address", "help_text": "", "info": None},
+                "id": "ea070127-684c-4136-8489-63c352b409c9",
+            },
+            {
+                "type": "dropdown",
+                "value": {
+                    "field_label": "Have you ever applied to or received funding as an OTF project?",
+                    "help_text": "",
+                    "required": "",
+                    "choices": ["Yes", "No"],
+                },
+                "id": "0305a465-8763-4c1f-9197-4ca4227d452a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "If yes, which application and what was the outcome?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "c24691be-9861-4dbc-8be4-03b6e68c1973",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>What is your idea?</h3>",
+                "id": "0702b9e5-2624-40a0-9caa-42ff46797fb6",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Describe it",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "c21c58c3-cfbe-4409-b2f2-8f56398f1731",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What are hoped for goals or longer term effects of the project?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "27289c14-6926-4f61-bea2-8031a653f71c",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Focus",
+                    "help_text": "",
+                    "required": "",
+                    "category": focus_id,
+                    "multi": "true",
+                },
+                "id": "404e2310-000b-4ccb-b772-3680946ff07d",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Status",
+                    "help_text": "",
+                    "required": "",
+                    "category": status_id,
+                    "multi": "true",
+                },
+                "id": "145c364f-e0bb-4652-94e8-fe08c831da2b",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Technology attributes",
+                    "help_text": "",
+                    "required": "",
+                    "category": tech_id,
+                    "multi": "true",
+                },
+                "id": "b4da2310-9654-4aa7-a04a-06335967ddc5",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>How will you do it?</h3>",
+                "id": "e5fe71f5-8ec5-4ac9-ba21-38e03cdcf73b",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Describe how",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "418b8099-4525-437f-a55c-9b35745d0384",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Objective(s)",
+                    "help_text": "",
+                    "required": "",
+                    "category": objectives_id,
+                    "multi": "true",
+                },
+                "id": "390702bd-e4e1-4dc2-8c43-d51bf018b427",
+            },
+            {
+                "type": "duration",
+                "value": {
+                    "field_label": "How long will it take?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "b8d4f24f-c5bd-4a18-aa13-7c7358b3f99f",
+            },
+            {
+                "type": "value",
+                "value": {
+                    "field_label": "How much do you want?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "1e669b4d-e43f-4c7a-9730-08e25cb1592d",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "How long have you been thinking of working on this idea? What made you first think about it?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "dfb9c307-9328-4a99-9efc-321d474b2ba7",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Who is the project for?</h3>",
+                "id": "563c12f1-d856-4ee2-a449-793bbfd12296",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Describe them",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "11f94a22-0571-4491-a93e-87c050e02a4a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What community currently exists around this project?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "c272969b-d89f-4b6e-859f-4606a15b3f28",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Beneficiaries",
+                    "help_text": "",
+                    "required": "",
+                    "category": beneficiaries_id,
+                    "multi": "true",
+                },
+                "id": "72002c3e-aaee-47da-9377-8bb493f14c21",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Region",
+                    "help_text": "",
+                    "required": "",
+                    "category": regions_id,
+                    "multi": "true",
+                },
+                "id": "369b248e-f669-4aeb-b771-7cba0eadb921",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Country",
+                    "help_text": "",
+                    "required": "",
+                    "category": countries_id,
+                    "multi": "true",
+                },
+                "id": "57bceb33-ebda-4708-9080-fd1a5923e008",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Why is this project needed?</h3>",
+                "id": "ab556178-07b5-468e-b1cf-46655859fd32",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Describe why",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "c14ee077-c0eb-48b1-9825-fbba9b91ede5",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Addressed problems",
+                    "help_text": "",
+                    "required": "",
+                    "category": addressed_id,
+                    "multi": "true",
+                },
+                "id": "a83a1884-f711-4196-8d15-ae2110466acb",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Similar/Complementary efforts",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "9ca35708-d611-4cd0-8d4a-3cc08349f45b",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Other information",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "db7b1642-c03d-4af4-82c9-db67bf9713b0",
+            },
+            {
+                "type": "multi_file",
+                "value": {"field_label": "Upload", "help_text": "", "required": ""},
+                "id": "8a91231c-5c3d-46fe-9de6-8d5c86817626",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I acknowledge</h3>",
+                "id": "2c1651a4-2cdc-4b74-8b6e-f077364ca4d8",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "My application will be dismissed if it does not fit within OTF's mission, values, principles statements.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "4c661a64-2614-4169-b4d2-1fd39e2e831b",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read our <a href="\\/about/program">mission, values, and principles</a>.',
+                "id": "cfdd721d-a4d6-44a8-a2d6-6576f126799b",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I have read and understand OTF's Terms and Privacy policy.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "1bc4e113-1414-46ff-bba7-2dc02b2126df",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read the <a href="\\/tos">Terms and Privacy policy</a>.',
+                "id": "d1c79c07-02cb-4f59-b5ed-719da7bdd636",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I am legally able to sign contracts or represent an organization that can.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "42dd68a1-b699-4678-bea6-13e0f842e821",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that all intellectual property created with support for this application must be openly licensed.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "72916731-ec97-4688-95f1-d3bf140b03c2",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is incomplete in any way, it will be dismissed.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "6856d26d-b169-4fdf-b598-63c3dd9278a2",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "33838399-f292-4b63-83f0-e02d344f99d4",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I would like to</h3>",
+                "id": "3ff08317-92ab-4eb1-adca-08547bed96f8",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc).",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "fc571e12-d4a2-4d53-ab34-2c57321dc6ac",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up for OTF's daily newsletter (collection of news related to global internet freedom).",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "cd0d8a4b-e71a-4dff-964a-f547bd655e7d",
+            },
         ]
 
-        application_form, _ = ApplicationForm.objects.get_or_create(name='Concept note', defaults={'form_fields': json.dumps(data)})
+        application_form, _ = ApplicationForm.objects.get_or_create(
+            name="Concept note", defaults={"form_fields": json.dumps(data)}
+        )
 
         return application_form
 
     def create_proposal_form(self):
-
-        focus_id = Category.objects.get(name='Focus').id
-        objectives_id = Category.objects.get(name='Objective(s)').id
-        beneficiaries_id = Category.objects.get(name='Beneficiaries').id
-        regions_id = Category.objects.get(name='Region(s)').id
-        addressed_id = Category.objects.get(name='Addressed problems').id
-        status_id = Category.objects.get(name='Project status').id
-        tech_id = Category.objects.get(name='Technology attributes').id
-        countries_id = Category.objects.get(name='Countries').id
+        focus_id = Category.objects.get(name="Focus").id
+        objectives_id = Category.objects.get(name="Objective(s)").id
+        beneficiaries_id = Category.objects.get(name="Beneficiaries").id
+        regions_id = Category.objects.get(name="Region(s)").id
+        addressed_id = Category.objects.get(name="Addressed problems").id
+        status_id = Category.objects.get(name="Project status").id
+        tech_id = Category.objects.get(name="Technology attributes").id
+        countries_id = Category.objects.get(name="Countries").id
 
         data2 = [
-            {"type": "text_markup", "value": "<h3>Proposal information</h3>", "id": "f6bdb7e0-ec19-4b88-a2df-f0e7a512df8d"},
-            {"type": "title", "value": {"field_label": "Proposal title", "help_text": "", "info": None}, "id": "6a83b04d-0909-4018-bc77-f8d72a019dd4"},
-            {"type": "value", "value": {"field_label": "Requested funding", "help_text": "", "info": None}, "id": "0299f96f-3809-4f9e-a786-4af89547881b"},
-            {"type": "duration", "value": {"field_label": "How long will it take?", "help_text": "", "info": None}, "id": "3ff602a1-642b-4742-a2c9-c9226af727ac"},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "739a413b-46cc-4936-82ce-e68c2dfa41ca"},
-            {"type": "char", "value": {"field_label": "Legal name", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "d5cd3d89-89ea-44c2-9772-0da658c36881"},
-            {"type": "char", "value": {"field_label": "Primary point of contact", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "a3c9af86-d047-4663-864a-b6dd97a60c39"},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "6c95d411-bd68-4374-8c2d-1b64dc03ed68"},
-            {"type": "char", "value": {"field_label": "Phone", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "40479d2a-7d53-4c81-834a-775ccd6c91c0"},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "f7e431b1-9965-4ebe-ab30-a00ff4b972ec"},
-            {"type": "text_markup", "value": "<h3>Proposal narrative</h3>", "id": "07f2ffb3-4eda-4f4c-8ebc-9da157e0102c"},
-            {"type": "rich_text", "value": {"field_label": "Summary", "help_text": "", "required": "", "default_value": ""}, "id": "a7502e97-5f2e-417f-b08c-588d367e40e5"},
-            {"type": "rich_text", "value": {"field_label": "Project description", "help_text": "", "required": "", "default_value": ""}, "id": "072f181b-90a2-4bb2-986d-55e1aaa9f348"},
-            {"type": "rich_text", "value": {"field_label": "Objectives", "help_text": "", "required": "", "default_value": ""}, "id": "a7ae7375-4569-47e2-8ee7-3c3d441375a9"},
-            {"type": "rich_text", "value": {"field_label": "Project deliverables/activities", "help_text": "", "required": "", "default_value": ""}, "id": "50328cc9-879d-4817-8454-2062ac47aef9"},
-            {"type": "rich_text", "value": {"field_label": "Budget details", "help_text": "", "required": "", "default_value": ""}, "id": "7b0b0af4-009f-45db-b20c-5f991bce7752"},
-            {"type": "rich_text", "value": {"field_label": "Similar/Complementary efforts", "help_text": "", "required": "", "default_value": ""}, "id": "ba3733f3-bee8-4fe8-bdde-36812aa4df77"},
-            {"type": "rich_text", "value": {"field_label": "Monitoring and evaluation", "help_text": "", "required": "", "default_value": ""}, "id": "23028eab-92c3-4c30-9a3e-5604dec0854d"},
-            {"type": "rich_text", "value": {"field_label": "Sustainability", "help_text": "", "required": "", "default_value": ""}, "id": "88d635e4-81d6-413c-8e09-52b74015e78b"},
-            {"type": "rich_text", "value": {"field_label": "Other support information", "help_text": "", "required": "", "default_value": ""}, "id": "38072bb7-fcdd-4f74-9bfb-db45bfeb07a7"},
-            {"type": "rich_text", "value": {"field_label": "Organization/Individual background", "help_text": "", "required": "", "default_value": ""}, "id": "f8b340d0-8c0c-41f8-acb5-662c676e2bbd"},
-            {"type": "rich_text", "value": {"field_label": "References", "help_text": "", "required": "", "default_value": ""}, "id": "8b2572ce-d118-41c4-b5d7-59f4ffe44431"},
-            {"type": "rich_text", "value": {"field_label": "Community interaction", "help_text": "", "required": "", "default_value": ""}, "id": "1b93fcd1-c6cd-432a-b831-a0fb680e327e"},
-            {"type": "text_markup", "value": "<h3>Descriptors</h3>", "id": "a337e150-d3c5-40b0-9e9e-033c3a685290"},
-            {"type": "category", "value": {"field_label": "Status", "help_text": "", "required": "", "category": status_id, "multi": "true"}, "id": "036fa233-c42a-4fc6-861a-ff40450efc7d"},
-            {"type": "category", "value": {"field_label": "Focus", "help_text": "", "required": "", "category": focus_id, "multi": "true"}, "id": "7d69aeec-009d-4de2-8dd2-6b0aacb4578f"},
-            {"type": "category", "value": {"field_label": "Objective(s)", "help_text": "", "required": "", "category": objectives_id, "multi": "true"}, "id": "328590d3-fefd-410d-b745-12f2efdd5437"},
-            {"type": "category", "value": {"field_label": "Beneficiaries", "help_text": "", "required": "", "category": beneficiaries_id, "multi": "true"}, "id": "f18f0399-538b-4bf3-9cd5-4457138814a8"},
-            {"type": "category", "value": {"field_label": "Addressed problems", "help_text": "", "required": "", "category": addressed_id, "multi": "true"}, "id": "a9b2b6de-fb7b-4709-aa59-f0ad987a677a"},
-            {"type": "category", "value": {"field_label": "Technology attributes", "help_text": "", "required": "", "category": tech_id, "multi": "true"}, "id": "251cf41a-0a49-4725-8d5a-5e496d018647"},
-            {"type": "category", "value": {"field_label": "Region", "help_text": "", "required": "", "category": regions_id, "multi": "true"}, "id": "ed6244ae-6903-4412-8b7a-c219ed25dfbb"},
-            {"type": "category", "value": {"field_label": "Country", "help_text": "", "required": "", "category": countries_id, "multi": "true"}, "id": "4b79c527-bf24-47f1-87a7-39945e70caeb"},
-            {"type": "text_markup", "value": "<h3>Other</h3>", "id": "3cb5d831-bb5d-494a-946a-b24f7867027c"},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": ""}, "id": "6bec61a1-3527-4e21-aa65-f26d845bbb68"},
-            {"type": "rich_text", "value": {"field_label": "Comments", "help_text": "", "required": "", "default_value": ""}, "id": "c0ff8444-8d43-46ef-8498-ed1a32c09c6a"}
+            {
+                "type": "text_markup",
+                "value": "<h3>Proposal information</h3>",
+                "id": "f6bdb7e0-ec19-4b88-a2df-f0e7a512df8d",
+            },
+            {
+                "type": "title",
+                "value": {
+                    "field_label": "Proposal title",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "6a83b04d-0909-4018-bc77-f8d72a019dd4",
+            },
+            {
+                "type": "value",
+                "value": {
+                    "field_label": "Requested funding",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "0299f96f-3809-4f9e-a786-4af89547881b",
+            },
+            {
+                "type": "duration",
+                "value": {
+                    "field_label": "How long will it take?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "3ff602a1-642b-4742-a2c9-c9226af727ac",
+            },
+            {
+                "type": "full_name",
+                "value": {"field_label": "Your name", "help_text": "", "info": None},
+                "id": "739a413b-46cc-4936-82ce-e68c2dfa41ca",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Legal name",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "d5cd3d89-89ea-44c2-9772-0da658c36881",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Primary point of contact",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "a3c9af86-d047-4663-864a-b6dd97a60c39",
+            },
+            {
+                "type": "email",
+                "value": {"field_label": "E-mail", "help_text": "", "info": None},
+                "id": "6c95d411-bd68-4374-8c2d-1b64dc03ed68",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Phone",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "40479d2a-7d53-4c81-834a-775ccd6c91c0",
+            },
+            {
+                "type": "address",
+                "value": {"field_label": "Address", "help_text": "", "info": None},
+                "id": "f7e431b1-9965-4ebe-ab30-a00ff4b972ec",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Proposal narrative</h3>",
+                "id": "07f2ffb3-4eda-4f4c-8ebc-9da157e0102c",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Summary",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "a7502e97-5f2e-417f-b08c-588d367e40e5",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Project description",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "072f181b-90a2-4bb2-986d-55e1aaa9f348",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Objectives",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "a7ae7375-4569-47e2-8ee7-3c3d441375a9",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Project deliverables/activities",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "50328cc9-879d-4817-8454-2062ac47aef9",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Budget details",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "7b0b0af4-009f-45db-b20c-5f991bce7752",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Similar/Complementary efforts",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "ba3733f3-bee8-4fe8-bdde-36812aa4df77",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Monitoring and evaluation",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "23028eab-92c3-4c30-9a3e-5604dec0854d",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Sustainability",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "88d635e4-81d6-413c-8e09-52b74015e78b",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Other support information",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "38072bb7-fcdd-4f74-9bfb-db45bfeb07a7",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Organization/Individual background",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "f8b340d0-8c0c-41f8-acb5-662c676e2bbd",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "References",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "8b2572ce-d118-41c4-b5d7-59f4ffe44431",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Community interaction",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "1b93fcd1-c6cd-432a-b831-a0fb680e327e",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Descriptors</h3>",
+                "id": "a337e150-d3c5-40b0-9e9e-033c3a685290",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Status",
+                    "help_text": "",
+                    "required": "",
+                    "category": status_id,
+                    "multi": "true",
+                },
+                "id": "036fa233-c42a-4fc6-861a-ff40450efc7d",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Focus",
+                    "help_text": "",
+                    "required": "",
+                    "category": focus_id,
+                    "multi": "true",
+                },
+                "id": "7d69aeec-009d-4de2-8dd2-6b0aacb4578f",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Objective(s)",
+                    "help_text": "",
+                    "required": "",
+                    "category": objectives_id,
+                    "multi": "true",
+                },
+                "id": "328590d3-fefd-410d-b745-12f2efdd5437",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Beneficiaries",
+                    "help_text": "",
+                    "required": "",
+                    "category": beneficiaries_id,
+                    "multi": "true",
+                },
+                "id": "f18f0399-538b-4bf3-9cd5-4457138814a8",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Addressed problems",
+                    "help_text": "",
+                    "required": "",
+                    "category": addressed_id,
+                    "multi": "true",
+                },
+                "id": "a9b2b6de-fb7b-4709-aa59-f0ad987a677a",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Technology attributes",
+                    "help_text": "",
+                    "required": "",
+                    "category": tech_id,
+                    "multi": "true",
+                },
+                "id": "251cf41a-0a49-4725-8d5a-5e496d018647",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Region",
+                    "help_text": "",
+                    "required": "",
+                    "category": regions_id,
+                    "multi": "true",
+                },
+                "id": "ed6244ae-6903-4412-8b7a-c219ed25dfbb",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Country",
+                    "help_text": "",
+                    "required": "",
+                    "category": countries_id,
+                    "multi": "true",
+                },
+                "id": "4b79c527-bf24-47f1-87a7-39945e70caeb",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Other</h3>",
+                "id": "3cb5d831-bb5d-494a-946a-b24f7867027c",
+            },
+            {
+                "type": "multi_file",
+                "value": {"field_label": "Upload", "help_text": "", "required": ""},
+                "id": "6bec61a1-3527-4e21-aa65-f26d845bbb68",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Comments",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "c0ff8444-8d43-46ef-8498-ed1a32c09c6a",
+            },
         ]
 
-        proposal_form, _ = ApplicationForm.objects.get_or_create(name='Proposal', defaults={'form_fields': json.dumps(data2)})
+        proposal_form, _ = ApplicationForm.objects.get_or_create(
+            name="Proposal", defaults={"form_fields": json.dumps(data2)}
+        )
 
         return proposal_form
 
     def create_concept_review_form(self):
-
         data3 = [
-            {"type": "recommendation", "value": {"field_label": "Do you think we should support this request?", "help_text": "", "info": None}, "id": "25d0d9b0-6e65-4fe3-906a-a1cd211def96"},
-            {"type": "rich_text", "value": {"field_label": "Recommendation comments", "help_text": "", "required": "", "default_value": ""}, "id": "f16be0b3-ef02-4876-b056-8a84238b1a52"},
-            {"type": "score", "value": {"field_label": "Goals and principles", "help_text": "", "required": ""}, "id": "6dd8d5d2-09a5-4681-aebc-eb9ccd00395a"},
-            {"type": "score", "value": {"field_label": "Technical merit", "help_text": "", "required": ""}, "id": "52b1f53c-9656-4b0c-8b8b-a9c57869356d"},
-            {"type": "score", "value": {"field_label": "Reasonable and realistic", "help_text": "", "required": ""}, "id": "aedb27e7-6044-4e04-b2c7-358065c8fe5c"},
-            {"type": "rich_text", "value": {"field_label": "Request specific questions", "help_text": "", "required": "", "default_value": ""}, "id": "84405ba2-f94e-4d4d-92e1-190bd802f858"},
-            {"type": "comments", "value": {"field_label": "Other comments", "help_text": "", "info": None}, "id": "5028cac1-752f-4d47-b83a-4f766f19fb2d"}
+            {
+                "type": "recommendation",
+                "value": {
+                    "field_label": "Do you think we should support this request?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "25d0d9b0-6e65-4fe3-906a-a1cd211def96",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Recommendation comments",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "f16be0b3-ef02-4876-b056-8a84238b1a52",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "Goals and principles",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "6dd8d5d2-09a5-4681-aebc-eb9ccd00395a",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "Technical merit",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "52b1f53c-9656-4b0c-8b8b-a9c57869356d",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "Reasonable and realistic",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "aedb27e7-6044-4e04-b2c7-358065c8fe5c",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Request specific questions",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "84405ba2-f94e-4d4d-92e1-190bd802f858",
+            },
+            {
+                "type": "comments",
+                "value": {
+                    "field_label": "Other comments",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "5028cac1-752f-4d47-b83a-4f766f19fb2d",
+            },
         ]
 
-        concept_review_form, _ = ReviewForm.objects.get_or_create(name='Concept review', defaults={'form_fields': json.dumps(data3)})
+        concept_review_form, _ = ReviewForm.objects.get_or_create(
+            name="Concept review", defaults={"form_fields": json.dumps(data3)}
+        )
 
         return concept_review_form
 
     def create_proposal_review_form(self):
-
         data4 = [
-            {"type": "text_markup", "value": "<h3>A. Conflicts of Interest and Confidentialit</h3>", "id": "976386e1-3a66-490f-9e82-bfbe1f134cf2"},
-            {"type": "checkbox", "value": {"field_label": "I understand about confidentiality", "help_text": "", "default_value": ""}, "id": "65fb2c22-a0c5-4cde-94a7-feb27072bc3d"},
-            {"type": "dropdown", "value": {"field_label": "Do you have any conflicts of interest to report?", "help_text": "", "required": "", "choices": ["Yes", "No"]}, "id": "dd75ce49-e3c4-43da-b724-4cb8bb88dcf8"},
-            {"type": "rich_text", "value": {"field_label": "Conflict(s) of interest disclosure", "help_text": "", "required": "", "default_value": ""}, "id": "9f7fe70b-97b5-4263-98ac-a45bf97b59d0"},
-            {"type": "text_markup", "value": "<h3>B. General thoughts</h3>", "id": "46079135-4857-4749-9df0-7c1d0ba38e10"},
-            {"type": "rich_text", "value": {"field_label": "1. Positive aspects", "help_text": "", "required": "", "default_value": ""}, "id": "e91ed603-61ad-483e-be7b-21716d05a3bd"},
-            {"type": "rich_text", "value": {"field_label": "2. Concerns", "help_text": "", "required": "", "default_value": ""}, "id": "821fb071-7db7-4cc1-ac3a-34b9eee40c94"},
-            {"type": "rich_text", "value": {"field_label": "3. Items that must be addressed", "help_text": "", "required": "", "default_value": ""}, "id": "021624ac-6628-430d-ba86-e68fd518c87e"},
-            {"type": "text_markup", "value": "<h3>C. Specific aspects</h3>", "id": "64bf5170-7032-4250-b059-74d1022e1cb2"},
-            {"type": "score", "value": {"field_label": "1. Project overview", "help_text": "", "required": ""}, "id": "9c5603d5-f897-42fa-8739-5935769c94bd"},
-            {"type": "score", "value": {"field_label": "2. Proposal objectives", "help_text": "", "required": ""}, "id": "6b748400-fad9-4b31-bb85-e3a53c99f4df"},
-            {"type": "score", "value": {"field_label": "3. Appropriate activities and strategy", "help_text": "", "required": ""}, "id": "a806a944-1d8a-4904-ace0-acfce5634a50"},
-            {"type": "score", "value": {"field_label": "4. Technical feasibility (where applicable)", "help_text": "", "required": ""}, "id": "512a86a5-ec5b-4d36-9630-90648b5b43e4"},
-            {"type": "score", "value": {"field_label": "5. Alternative analysis - red teaming", "help_text": "", "required": ""}, "id": "d9695d1d-3373-4acf-ada5-3b2593b3a634"},
-            {"type": "score", "value": {"field_label": "6. Usability", "help_text": "", "required": ""}, "id": "e43dd4dc-d2fa-493c-9f55-5a126d0e0579"},
-            {"type": "score", "value": {"field_label": "7. Sustainability", "help_text": "", "required": ""}, "id": "ee7009b8-ad18-46b5-a981-ccc52972c0a5"},
-            {"type": "score", "value": {"field_label": "8. Collaboration", "help_text": "", "required": ""}, "id": "dc5dc5e0-e4d6-462f-8296-a0e58933e701"},
-            {"type": "score", "value": {"field_label": "9. Cost realism", "help_text": "", "required": ""}, "id": "31e9b202-24b1-4993-80b7-9851624e2162"},
-            {"type": "score", "value": {"field_label": "10. Qualifications", "help_text": "", "required": ""}, "id": "d3f5479c-68da-41d9-a266-130d383bab6b"},
-            {"type": "score", "value": {"field_label": "11. Evaluation", "help_text": "", "required": ""}, "id": "2a61c71a-74f6-4963-8850-9289e852f604"},
-            {"type": "text_markup", "value": "<h3>D. Rationale and appropriateness consideration</h3>", "id": "3fc9be9f-8cd3-42b8-acc1-542bca210d48"},
-            {"type": "score", "value": {"field_label": "Rationale and appropriateness", "help_text": "", "required": ""}, "id": "0d1bf533-968c-44b9-bb30-d437ae039474"},
-            {"type": "text_markup", "value": "<h3>E. General recommendation</h3>", "id": "ef4a3bab-2293-4021-9e2c-57e1d78f6237"},
-            {"type": "recommendation", "value": {"field_label": "Recommendation", "help_text": "", "info": None}, "id": "4bf80578-1c8f-4515-9d6a-e52e87629e3e"},
-            {"type": "comments", "value": {"field_label": "Recommendation comments", "help_text": "", "info": None}, "id": "a814d7ac-8291-4f3e-b733-4a9a4f1f8a49"}
+            {
+                "type": "text_markup",
+                "value": "<h3>A. Conflicts of Interest and Confidentialit</h3>",
+                "id": "976386e1-3a66-490f-9e82-bfbe1f134cf2",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand about confidentiality",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "65fb2c22-a0c5-4cde-94a7-feb27072bc3d",
+            },
+            {
+                "type": "dropdown",
+                "value": {
+                    "field_label": "Do you have any conflicts of interest to report?",
+                    "help_text": "",
+                    "required": "",
+                    "choices": ["Yes", "No"],
+                },
+                "id": "dd75ce49-e3c4-43da-b724-4cb8bb88dcf8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Conflict(s) of interest disclosure",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "9f7fe70b-97b5-4263-98ac-a45bf97b59d0",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>B. General thoughts</h3>",
+                "id": "46079135-4857-4749-9df0-7c1d0ba38e10",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "1. Positive aspects",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "e91ed603-61ad-483e-be7b-21716d05a3bd",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "2. Concerns",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "821fb071-7db7-4cc1-ac3a-34b9eee40c94",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "3. Items that must be addressed",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "021624ac-6628-430d-ba86-e68fd518c87e",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>C. Specific aspects</h3>",
+                "id": "64bf5170-7032-4250-b059-74d1022e1cb2",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "1. Project overview",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "9c5603d5-f897-42fa-8739-5935769c94bd",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "2. Proposal objectives",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "6b748400-fad9-4b31-bb85-e3a53c99f4df",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "3. Appropriate activities and strategy",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "a806a944-1d8a-4904-ace0-acfce5634a50",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "4. Technical feasibility (where applicable)",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "512a86a5-ec5b-4d36-9630-90648b5b43e4",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "5. Alternative analysis - red teaming",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "d9695d1d-3373-4acf-ada5-3b2593b3a634",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "6. Usability",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "e43dd4dc-d2fa-493c-9f55-5a126d0e0579",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "7. Sustainability",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "ee7009b8-ad18-46b5-a981-ccc52972c0a5",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "8. Collaboration",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "dc5dc5e0-e4d6-462f-8296-a0e58933e701",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "9. Cost realism",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "31e9b202-24b1-4993-80b7-9851624e2162",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "10. Qualifications",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "d3f5479c-68da-41d9-a266-130d383bab6b",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "11. Evaluation",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "2a61c71a-74f6-4963-8850-9289e852f604",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>D. Rationale and appropriateness consideration</h3>",
+                "id": "3fc9be9f-8cd3-42b8-acc1-542bca210d48",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "Rationale and appropriateness",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "0d1bf533-968c-44b9-bb30-d437ae039474",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>E. General recommendation</h3>",
+                "id": "ef4a3bab-2293-4021-9e2c-57e1d78f6237",
+            },
+            {
+                "type": "recommendation",
+                "value": {
+                    "field_label": "Recommendation",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "4bf80578-1c8f-4515-9d6a-e52e87629e3e",
+            },
+            {
+                "type": "comments",
+                "value": {
+                    "field_label": "Recommendation comments",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "a814d7ac-8291-4f3e-b733-4a9a4f1f8a49",
+            },
         ]
 
-        proposal_review_form, _ = ReviewForm.objects.get_or_create(name='Proposal review', defaults={'form_fields': json.dumps(data4)})
+        proposal_review_form, _ = ReviewForm.objects.get_or_create(
+            name="Proposal review", defaults={"form_fields": json.dumps(data4)}
+        )
 
         return proposal_review_form
 
-    def create_concept_note_fund_type(self, application_form, proposal_form, application_review_form, proposal_review_form):
+    def create_concept_note_fund_type(
+        self,
+        application_form,
+        proposal_form,
+        application_review_form,
+        proposal_review_form,
+    ):
         try:
             fund = FundType.objects.get(title=CN_FUND_TITLE)
         except FundType.DoesNotExist:
             apply_home = ApplyHomePage.objects.first()
 
-            fund = FundType(title=CN_FUND_TITLE, workflow_name='double')
+            fund = FundType(title=CN_FUND_TITLE, workflow_name="double")
             apply_home.add_child(instance=fund)
 
-            fund_form = ApplicationBaseForm.objects.create(application=fund, form=application_form)
-            fund_form2 = ApplicationBaseForm.objects.create(application=fund, form=proposal_form)
+            fund_form = ApplicationBaseForm.objects.create(
+                application=fund, form=application_form
+            )
+            fund_form2 = ApplicationBaseForm.objects.create(
+                application=fund, form=proposal_form
+            )
             fund.forms = [fund_form, fund_form2]
-            fund_review_form = ApplicationBaseReviewForm.objects.create(application=fund, form=application_review_form)
-            fund_review_form2 = ApplicationBaseReviewForm.objects.create(application=fund, form=proposal_review_form)
+            fund_review_form = ApplicationBaseReviewForm.objects.create(
+                application=fund, form=application_review_form
+            )
+            fund_review_form2 = ApplicationBaseReviewForm.objects.create(
+                application=fund, form=proposal_review_form
+            )
             fund.review_forms = [fund_review_form, fund_review_form2]
             fund.save()
 
@@ -232,7 +1104,7 @@ class Command(BaseCommand):
             lead=lead,
             # The date of the original Internet Freedom Fund request type
             start_date=date(2013, 1, 1),
-            end_date=date(2018, 8, 29)
+            end_date=date(2018, 8, 29),
         )
         round.parent_page = fund
         fund.add_child(instance=round)
diff --git a/hypha/apply/funds/management/commands/seed_fellowship.py b/hypha/apply/funds/management/commands/seed_fellowship.py
index a7b1439ea50adaa75e71d831c94942b8ed06bff1..7cb82ee9fb02b25d60e61b3477098df812a76063 100644
--- a/hypha/apply/funds/management/commands/seed_fellowship.py
+++ b/hypha/apply/funds/management/commands/seed_fellowship.py
@@ -15,8 +15,8 @@ from hypha.apply.home.models import ApplyHomePage
 from hypha.apply.review.models import ReviewForm
 from hypha.apply.users.groups import STAFF_GROUP_NAME
 
-FS_ROUND_TITLE = 'Fellowship (archive round)'
-FS_FUND_TITLE = 'Fellowship (archive fund)'
+FS_ROUND_TITLE = "Fellowship (archive round)"
+FS_FUND_TITLE = "Fellowship (archive fund)"
 
 
 class Command(BaseCommand):
@@ -26,137 +26,635 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         # There's an Internet Freedom Fund open round, so bail out. Avoids duplicate command runs.
         if Round.objects.filter(title=FS_ROUND_TITLE).count():
-            self.stdout.write(self.style.WARNING('Skipping. The target Round/Fund Type and Application Form exist'))
+            self.stdout.write(
+                self.style.WARNING(
+                    "Skipping. The target Round/Fund Type and Application Form exist"
+                )
+            )
             return
 
         application_form = self.create_fellowship_application_form()
         proposal_form = self.create_fellowship_proposal_form()
         application_review_form = self.create_fellowship_application_review_form()
         proposal_review_form = self.create_fellowship_proposal_review_form()
-        fund = self.create_fellowship_fund_type(application_form, proposal_form, application_review_form, proposal_review_form)
+        fund = self.create_fellowship_fund_type(
+            application_form,
+            proposal_form,
+            application_review_form,
+            proposal_review_form,
+        )
         self.create_fellowship_round(fund)
 
     def create_fellowship_application_form(self):
-
-        focus_id = Category.objects.get(name='Focus').id
-        objectives_id = Category.objects.get(name='Objective(s)').id
-        beneficiaries_id = Category.objects.get(name='Beneficiaries').id
-        regions_id = Category.objects.get(name='Region(s)').id
-        addressed_id = Category.objects.get(name='Addressed problems').id
-        status_id = Category.objects.get(name='Project status').id
+        focus_id = Category.objects.get(name="Focus").id
+        objectives_id = Category.objects.get(name="Objective(s)").id
+        beneficiaries_id = Category.objects.get(name="Beneficiaries").id
+        regions_id = Category.objects.get(name="Region(s)").id
+        addressed_id = Category.objects.get(name="Addressed problems").id
+        status_id = Category.objects.get(name="Project status").id
 
         data = [
-            {"type": "text_markup", "value": "<h3>About you</h3>", "id": "ef672ec5-f24c-4e95-9f18-522a5a1e6833"},
-            {"type": "title", "value": {"field_label": "What is your project name?", "help_text": "", "info": None}, "id": "32c37ee8-7d5b-4fc0-b606-9697a1c7e5c2"},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "3b051ef2-3c75-4a70-aae3-999d58852810"},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "bfc488d3-b77d-427d-825d-9000797e9576"},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "2c0db01a-b5ab-4882-aad8-8c9a2ec05e8f"},
-            {"type": "value", "value": {"field_label": "If you are applying for direct funding, how much do you need?", "help_text": "Amount requested should be less than 50000 USD.", "info": None}, "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7"},
-            {"type": "char", "value": {"field_label": "What is your current or most recent position and employer or research institution?", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "1282223d-77f5-4047-be03-4df4c4b2148a"},
-            {"type": "rich_text", "value": {"field_label": "What are (or were) your roles and responsibilities there?", "help_text": "", "required": "", "default_value": ""}, "id": "9c0256e4-42e1-41fe-9880-7f621d6c3458"},
-            {"type": "dropdown", "value": {"field_label": "Have you ever applied or received funding through an OTF fellowship program?", "help_text": "", "required": "", "choices": ["Yes", "No"]}, "id": "f8efef0a-0632-4c81-b4db-7bc6a06caa7d"},
-            {"type": "text_markup", "value": "<h3>About your project</h3>", "id": "3541d1b1-afc7-4dcd-8ed9-e9af27de5f3d"},
-            {"type": "rich_text", "value": {"field_label": "What is your project idea?", "help_text": "", "required": "", "default_value": ""}, "id": "1eb8b4e3-e2bb-4810-a8ce-3fc82a3192c8"},
-            {"type": "rich_text", "value": {"field_label": "How would you do it?", "help_text": "", "required": "", "default_value": ""}, "id": "177d56e8-2df1-4ead-8e3d-4916610fbed6"},
-            {"type": "rich_text", "value": {"field_label": "Why are you the right person for this project?", "help_text": "", "required": "", "default_value": ""}, "id": "05ff1755-947b-4e41-8f71-aae99977c572"},
-            {"type": "duration", "value": {"field_label": "How long do you want to work on this fellowship?", "help_text": "", "info": None}, "id": "3ccac109-2839-4b5d-b133-0e6cfca7c766"},
-            {"type": "text_markup", "value": "<h3>Host organization</h3>", "id": "f4b3ae6f-a1d6-4c9d-b334-e40614167257"},
-            {"type": "char", "value": {"field_label": "What is your most ideal host organization?", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "0afaf4e1-4556-4e79-aa3d-4990e33620da"},
-            {"type": "char", "value": {"field_label": "What is your next best host organization?", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "a543b34f-ae6a-4b17-8ac3-ececc14573a0"},
-            {"type": "text_markup", "value": "<h3>Request specific questions</h3>", "id": "755363fa-6a1c-422f-a03f-89db07a96e17"},
-            {"type": "rich_text", "value": {"field_label": "Request specific questions", "help_text": "", "required": "", "default_value": ""}, "id": "57cc52e2-b3ff-4e9f-a5fe-42e7735e16c2"},
-            {"type": "text_markup", "value": "<h3>Descriptors</h3>", "id": "b6ee65b3-d5cd-4cb0-9d7c-6e29d86deaaf"},
-            {"type": "category", "value": {"field_label": "Status", "help_text": "", "required": "", "category": status_id, "multi": "true"}, "id": "ff4d12ff-7b88-4e87-bb5b-81543aef0e25"},
-            {"type": "category", "value": {"field_label": "Objectives", "help_text": "", "required": "true", "category": objectives_id, "multi": "true"}, "id": "30c41288-a762-4003-acce-8c12e7343d90"},
-            {"type": "category", "value": {"field_label": "Beneficiaries", "help_text": "", "required": "", "category": beneficiaries_id, "multi": "true"}, "id": "56833441-542b-4a06-8ad2-8e7e8fd1a334"},
-            {"type": "category", "value": {"field_label": "Focus", "help_text": "", "required": "", "category": focus_id, "multi": "true"}, "id": "6b404851-ce2b-494f-b9f7-62858a937469"},
-            {"type": "category", "value": {"field_label": "Addressed problems", "help_text": "", "required": "true", "category": addressed_id, "multi": "true"}, "id": "590e4b77-c4f4-4bd0-b5be-2ad2851da4f5"},
-            {"type": "category", "value": {"field_label": "Region", "help_text": "", "required": "", "category": regions_id, "multi": "true"}, "id": "81c01278-8ba4-4d84-a1da-e05a07aad874"},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": ""}, "id": "25740b9d-0f8f-4ce1-88fa-c6ee831c6aef"},
-            {"type": "text_markup", "value": "<h3>I acknowledge</h3>", "id": "f69d3a56-491a-4321-89b7-4d7e34d69a1d"},
-            {"type": "checkbox", "value": {"field_label": "My application will be dismissed if it does not fit within OTF\'s mission, values, principles statements.", "help_text": "", "default_value": ""}, "id": "5178e15f-d442-4d36-824d-a4292ef77062"},
-            {"type": "text_markup", "value": "Read our <a href=\"\\/about/program\">mission, values, and principles</a>.", "id": "b0c69627-d7db-4633-b46f-0e787dddc779"},
-            {"type": "checkbox", "value": {"field_label": "I have read and understand OTF\'s Terms and Privacy policy.", "help_text": "", "default_value": ""}, "id": "bd91e220-4cdb-4392-8054-7b7dfe667d46"},
-            {"type": "text_markup", "value": "Read the <a href=\"\\/tos\">Terms and Privacy policy</a>.", "id": "6f6236fd-9d1d-4090-a819-72fb96205bc0"},
-            {"type": "checkbox", "value": {"field_label": "I am legally able to sign contracts or represent an organization that can.", "help_text": "", "default_value": ""}, "id": "8d000129-ca8b-48cf-8dc2-4651bcbe46e8"},
-            {"type": "checkbox", "value": {"field_label": "I understand that all intellectual property created with support for this application must be openly licensed.", "help_text": "", "default_value": ""}, "id": "92f0801e-b9dc-4edc-9716-3f1709ae1c9b"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is incomplete in any way, it will be dismissed.", "help_text": "", "default_value": ""}, "id": "3a3f2da3-4e32-4b86-9060-29c606927114"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.", "help_text": "", "default_value": ""}, "id": "19395179-ed9f-4556-9b6b-ab5caef4f610"},
-            {"type": "text_markup", "value": "<h3>I would like to</h3>", "id": "21c9a554-d0d2-4543-9ca5-f53e506fb7c4"},
-            {"type": "checkbox", "value": {"field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc).", "help_text": "", "default_value": ""}, "id": "1345a8eb-4dcc-4170-a5ac-edda42d4dafc"},
-            {"type": "checkbox", "value": {"field_label": "Sign up for OTF\'s daily newsletter (collection of news related to global internet freedom).", "help_text": "", "default_value": ""}, "id": "4ca22ebb-daba-4fb6-a4a6-b130dc6311a8"}
+            {
+                "type": "text_markup",
+                "value": "<h3>About you</h3>",
+                "id": "ef672ec5-f24c-4e95-9f18-522a5a1e6833",
+            },
+            {
+                "type": "title",
+                "value": {
+                    "field_label": "What is your project name?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "32c37ee8-7d5b-4fc0-b606-9697a1c7e5c2",
+            },
+            {
+                "type": "full_name",
+                "value": {"field_label": "Your name", "help_text": "", "info": None},
+                "id": "3b051ef2-3c75-4a70-aae3-999d58852810",
+            },
+            {
+                "type": "email",
+                "value": {"field_label": "E-mail", "help_text": "", "info": None},
+                "id": "bfc488d3-b77d-427d-825d-9000797e9576",
+            },
+            {
+                "type": "address",
+                "value": {"field_label": "Address", "help_text": "", "info": None},
+                "id": "2c0db01a-b5ab-4882-aad8-8c9a2ec05e8f",
+            },
+            {
+                "type": "value",
+                "value": {
+                    "field_label": "If you are applying for direct funding, how much do you need?",
+                    "help_text": "Amount requested should be less than 50000 USD.",
+                    "info": None,
+                },
+                "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "What is your current or most recent position and employer or research institution?",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "1282223d-77f5-4047-be03-4df4c4b2148a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What are (or were) your roles and responsibilities there?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "9c0256e4-42e1-41fe-9880-7f621d6c3458",
+            },
+            {
+                "type": "dropdown",
+                "value": {
+                    "field_label": "Have you ever applied or received funding through an OTF fellowship program?",
+                    "help_text": "",
+                    "required": "",
+                    "choices": ["Yes", "No"],
+                },
+                "id": "f8efef0a-0632-4c81-b4db-7bc6a06caa7d",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>About your project</h3>",
+                "id": "3541d1b1-afc7-4dcd-8ed9-e9af27de5f3d",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What is your project idea?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "1eb8b4e3-e2bb-4810-a8ce-3fc82a3192c8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "How would you do it?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "177d56e8-2df1-4ead-8e3d-4916610fbed6",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Why are you the right person for this project?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "05ff1755-947b-4e41-8f71-aae99977c572",
+            },
+            {
+                "type": "duration",
+                "value": {
+                    "field_label": "How long do you want to work on this fellowship?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "3ccac109-2839-4b5d-b133-0e6cfca7c766",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Host organization</h3>",
+                "id": "f4b3ae6f-a1d6-4c9d-b334-e40614167257",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "What is your most ideal host organization?",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "0afaf4e1-4556-4e79-aa3d-4990e33620da",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "What is your next best host organization?",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "a543b34f-ae6a-4b17-8ac3-ececc14573a0",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Request specific questions</h3>",
+                "id": "755363fa-6a1c-422f-a03f-89db07a96e17",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Request specific questions",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "57cc52e2-b3ff-4e9f-a5fe-42e7735e16c2",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Descriptors</h3>",
+                "id": "b6ee65b3-d5cd-4cb0-9d7c-6e29d86deaaf",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Status",
+                    "help_text": "",
+                    "required": "",
+                    "category": status_id,
+                    "multi": "true",
+                },
+                "id": "ff4d12ff-7b88-4e87-bb5b-81543aef0e25",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Objectives",
+                    "help_text": "",
+                    "required": "true",
+                    "category": objectives_id,
+                    "multi": "true",
+                },
+                "id": "30c41288-a762-4003-acce-8c12e7343d90",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Beneficiaries",
+                    "help_text": "",
+                    "required": "",
+                    "category": beneficiaries_id,
+                    "multi": "true",
+                },
+                "id": "56833441-542b-4a06-8ad2-8e7e8fd1a334",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Focus",
+                    "help_text": "",
+                    "required": "",
+                    "category": focus_id,
+                    "multi": "true",
+                },
+                "id": "6b404851-ce2b-494f-b9f7-62858a937469",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Addressed problems",
+                    "help_text": "",
+                    "required": "true",
+                    "category": addressed_id,
+                    "multi": "true",
+                },
+                "id": "590e4b77-c4f4-4bd0-b5be-2ad2851da4f5",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Region",
+                    "help_text": "",
+                    "required": "",
+                    "category": regions_id,
+                    "multi": "true",
+                },
+                "id": "81c01278-8ba4-4d84-a1da-e05a07aad874",
+            },
+            {
+                "type": "multi_file",
+                "value": {"field_label": "Upload", "help_text": "", "required": ""},
+                "id": "25740b9d-0f8f-4ce1-88fa-c6ee831c6aef",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I acknowledge</h3>",
+                "id": "f69d3a56-491a-4321-89b7-4d7e34d69a1d",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "My application will be dismissed if it does not fit within OTF's mission, values, principles statements.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "5178e15f-d442-4d36-824d-a4292ef77062",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read our <a href="\\/about/program">mission, values, and principles</a>.',
+                "id": "b0c69627-d7db-4633-b46f-0e787dddc779",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I have read and understand OTF's Terms and Privacy policy.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "bd91e220-4cdb-4392-8054-7b7dfe667d46",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read the <a href="\\/tos">Terms and Privacy policy</a>.',
+                "id": "6f6236fd-9d1d-4090-a819-72fb96205bc0",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I am legally able to sign contracts or represent an organization that can.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "8d000129-ca8b-48cf-8dc2-4651bcbe46e8",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that all intellectual property created with support for this application must be openly licensed.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "92f0801e-b9dc-4edc-9716-3f1709ae1c9b",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is incomplete in any way, it will be dismissed.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "3a3f2da3-4e32-4b86-9060-29c606927114",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "19395179-ed9f-4556-9b6b-ab5caef4f610",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I would like to</h3>",
+                "id": "21c9a554-d0d2-4543-9ca5-f53e506fb7c4",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc).",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "1345a8eb-4dcc-4170-a5ac-edda42d4dafc",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up for OTF's daily newsletter (collection of news related to global internet freedom).",
+                    "help_text": "",
+                    "default_value": "",
+                },
+                "id": "4ca22ebb-daba-4fb6-a4a6-b130dc6311a8",
+            },
         ]
 
-        application_form, _ = ApplicationForm.objects.get_or_create(name='Fellowship application', defaults={'form_fields': json.dumps(data)})
+        application_form, _ = ApplicationForm.objects.get_or_create(
+            name="Fellowship application", defaults={"form_fields": json.dumps(data)}
+        )
 
         return application_form
 
     def create_fellowship_proposal_form(self):
-
         data2 = [
             {"type": "text_markup", "value": "<h3>Proposal information</h3>", "id": ""},
-            {"type": "title", "value": {"field_label": "Proposal title", "help_text": "", "info": None}, "id": ""},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "c0c75948-b3c3-42be-8646-bc2a5d8521c3"},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "a607ec56-da2a-46d4-b0c9-7c8f3c351a6e"},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "8d3cf1ac-928f-4ee2-ad12-2e5fb16b4748"},
-            {"type": "value", "value": {"field_label": "If you are applying for direct funding, how much do you need?", "help_text": "Amount requested should be less than 50000 USD.", "info": None}, "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7"},
-            {"type": "duration", "value": {"field_label": "How long do you want to work on this fellowship?", "help_text": "", "info": None}, "id": "08b9b5c3-e01d-41ac-95be-600a4fee7d87"},
-            {"type": "char", "value": {"field_label": "Host organisation", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "bc03235e-3c78-4770-9fc2-97feb93c2c8c"},
-            {"type": "date", "value": {"field_label": "Start date", "help_text": "", "required": "", "default_value": ""}, "id": "672cb6f1-335c-4005-a0f1-46c414feda06"},
-            {"type": "date", "value": {"field_label": "Completion date", "help_text": "", "required": "", "default_value": ""}, "id": "8262f209-f084-4a79-9dfa-2d18137119bb"},
-            {"type": "rich_text", "value": {"field_label": "Objectives", "help_text": "", "required": "", "default_value": ""}, "id": "af2c5f38-7257-4295-87fa-787060e845ef"},
-            {"type": "rich_text", "value": {"field_label": "Milestones and dates", "help_text": "", "required": "", "default_value": ""}, "id": "3c521847-7642-4cae-aca9-d5336ad8962d"},
-            {"type": "rich_text", "value": {"field_label": "Anticipated outputs and outcomes", "help_text": "", "required": "", "default_value": ""}, "id": "fd0eb7ea-e054-4bcf-9580-eb672d44745c"},
-            {"type": "text_markup", "value": "<h3>Request specific questions</h3>", "id": "b05a54d1-3a59-41d1-bb70-d5f0f0acd67d"},
-            {"type": "rich_text", "value": {"field_label": "Request specific questions", "help_text": "", "required": "", "default_value": ""}, "id": "b6d71932-98c2-4ce8-a5e6-454a1f800d21"},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": ""}, "id": "30dfa46e-f656-46c9-9efc-bab9029f2008"}
+            {
+                "type": "title",
+                "value": {
+                    "field_label": "Proposal title",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "",
+            },
+            {
+                "type": "full_name",
+                "value": {"field_label": "Your name", "help_text": "", "info": None},
+                "id": "c0c75948-b3c3-42be-8646-bc2a5d8521c3",
+            },
+            {
+                "type": "email",
+                "value": {"field_label": "E-mail", "help_text": "", "info": None},
+                "id": "a607ec56-da2a-46d4-b0c9-7c8f3c351a6e",
+            },
+            {
+                "type": "address",
+                "value": {"field_label": "Address", "help_text": "", "info": None},
+                "id": "8d3cf1ac-928f-4ee2-ad12-2e5fb16b4748",
+            },
+            {
+                "type": "value",
+                "value": {
+                    "field_label": "If you are applying for direct funding, how much do you need?",
+                    "help_text": "Amount requested should be less than 50000 USD.",
+                    "info": None,
+                },
+                "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7",
+            },
+            {
+                "type": "duration",
+                "value": {
+                    "field_label": "How long do you want to work on this fellowship?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "08b9b5c3-e01d-41ac-95be-600a4fee7d87",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Host organisation",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "bc03235e-3c78-4770-9fc2-97feb93c2c8c",
+            },
+            {
+                "type": "date",
+                "value": {
+                    "field_label": "Start date",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "672cb6f1-335c-4005-a0f1-46c414feda06",
+            },
+            {
+                "type": "date",
+                "value": {
+                    "field_label": "Completion date",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "8262f209-f084-4a79-9dfa-2d18137119bb",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Objectives",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "af2c5f38-7257-4295-87fa-787060e845ef",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Milestones and dates",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "3c521847-7642-4cae-aca9-d5336ad8962d",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Anticipated outputs and outcomes",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "fd0eb7ea-e054-4bcf-9580-eb672d44745c",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Request specific questions</h3>",
+                "id": "b05a54d1-3a59-41d1-bb70-d5f0f0acd67d",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Request specific questions",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "b6d71932-98c2-4ce8-a5e6-454a1f800d21",
+            },
+            {
+                "type": "multi_file",
+                "value": {"field_label": "Upload", "help_text": "", "required": ""},
+                "id": "30dfa46e-f656-46c9-9efc-bab9029f2008",
+            },
         ]
 
-        proposal_form, _ = ApplicationForm.objects.get_or_create(name='Fellowship proposal', defaults={'form_fields': json.dumps(data2)})
+        proposal_form, _ = ApplicationForm.objects.get_or_create(
+            name="Fellowship proposal", defaults={"form_fields": json.dumps(data2)}
+        )
 
         return proposal_form
 
     def create_fellowship_application_review_form(self):
-
         data3 = [
-            {"type": "recommendation", "value": {"field_label": "Overall, do you think we should select this applicant and their project to be part of the fellowship program?", "help_text": "", "info": None}, "id": "56264b32-fa39-4c08-b41e-68e9c54b2712"},
-            {"type": "rich_text", "value": {"field_label": "If no, please select a reason why not.", "help_text": "", "required": "", "default_value": ""}, "id": "f0533950-57f5-4bb7-81ec-2d3813490c88"},
-            {"type": "rich_text", "value": {"field_label": "Request specific questions", "help_text": "", "required": "", "default_value": ""}, "id": "ba789376-e3f9-434e-8da5-330811723b30"},
-            {"type": "comments", "value": {"field_label": "Other comments", "help_text": "", "info": None}, "id": "e74e2581-d06c-43b1-9c0b-911407225834"}
+            {
+                "type": "recommendation",
+                "value": {
+                    "field_label": "Overall, do you think we should select this applicant and their project to be part of the fellowship program?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "56264b32-fa39-4c08-b41e-68e9c54b2712",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "If no, please select a reason why not.",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "f0533950-57f5-4bb7-81ec-2d3813490c88",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Request specific questions",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "ba789376-e3f9-434e-8da5-330811723b30",
+            },
+            {
+                "type": "comments",
+                "value": {
+                    "field_label": "Other comments",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "e74e2581-d06c-43b1-9c0b-911407225834",
+            },
         ]
 
-        application_review_form, _ = ReviewForm.objects.get_or_create(name='Fellowship application review', defaults={'form_fields': json.dumps(data3)})
+        application_review_form, _ = ReviewForm.objects.get_or_create(
+            name="Fellowship application review",
+            defaults={"form_fields": json.dumps(data3)},
+        )
 
         return application_review_form
 
     def create_fellowship_proposal_review_form(self):
-
         data4 = [
-            {"type": "recommendation", "value": {"field_label": "Overall, do you think we should select this applicant and their project to be part of the fellowship program?", "help_text": "", "info": None}, "id": "e1ea4f9d-64e2-4f28-a68a-851ec0f2d9ad"},
-            {"type": "rich_text", "value": {"field_label": "If no, please select a reason why not.", "help_text": "", "required": "", "default_value": ""}, "id": "e68b6fe9-8b11-4cf0-8ae4-2ffed75e1e80"},
-            {"type": "rich_text", "value": {"field_label": "If yes, but you believe some changes need to be made to the proposed effort, please let us know.", "help_text": "", "required": "", "default_value": ""}, "id": "a413f3a2-b486-4bf3-9e2d-c48d19626876"},
-            {"type": "rich_text", "value": {"field_label": "Request specific questions", "help_text": "", "required": "", "default_value": ""}, "id": "536c963a-f183-45bc-b83f-458b46dc5542"},
-            {"type": "comments", "value": {"field_label": "Anything else you'd like to give us feedback on?", "help_text": "", "info": None}, "id": "cc82ba7b-b55e-4309-85f0-f68ad6f43471"}
+            {
+                "type": "recommendation",
+                "value": {
+                    "field_label": "Overall, do you think we should select this applicant and their project to be part of the fellowship program?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "e1ea4f9d-64e2-4f28-a68a-851ec0f2d9ad",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "If no, please select a reason why not.",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "e68b6fe9-8b11-4cf0-8ae4-2ffed75e1e80",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "If yes, but you believe some changes need to be made to the proposed effort, please let us know.",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "a413f3a2-b486-4bf3-9e2d-c48d19626876",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Request specific questions",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "536c963a-f183-45bc-b83f-458b46dc5542",
+            },
+            {
+                "type": "comments",
+                "value": {
+                    "field_label": "Anything else you'd like to give us feedback on?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "cc82ba7b-b55e-4309-85f0-f68ad6f43471",
+            },
         ]
 
-        proposal_review_form, _ = ReviewForm.objects.get_or_create(name='Fellowship proposal review', defaults={'form_fields': json.dumps(data4)})
+        proposal_review_form, _ = ReviewForm.objects.get_or_create(
+            name="Fellowship proposal review",
+            defaults={"form_fields": json.dumps(data4)},
+        )
 
         return proposal_review_form
 
-    def create_fellowship_fund_type(self, application_form, proposal_form, application_review_form, proposal_review_form):
+    def create_fellowship_fund_type(
+        self,
+        application_form,
+        proposal_form,
+        application_review_form,
+        proposal_review_form,
+    ):
         try:
             fund = FundType.objects.get(title=FS_FUND_TITLE)
         except FundType.DoesNotExist:
             apply_home = ApplyHomePage.objects.first()
 
-            fund = FundType(title=FS_FUND_TITLE, workflow_name='double')
+            fund = FundType(title=FS_FUND_TITLE, workflow_name="double")
             apply_home.add_child(instance=fund)
 
-            fund_form = ApplicationBaseForm.objects.create(application=fund, form=application_form)
-            fund_form2 = ApplicationBaseForm.objects.create(application=fund, form=proposal_form)
+            fund_form = ApplicationBaseForm.objects.create(
+                application=fund, form=application_form
+            )
+            fund_form2 = ApplicationBaseForm.objects.create(
+                application=fund, form=proposal_form
+            )
             fund.forms = [fund_form, fund_form2]
-            fund_review_form = ApplicationBaseReviewForm.objects.create(application=fund, form=application_review_form)
-            fund_review_form2 = ApplicationBaseReviewForm.objects.create(application=fund, form=proposal_review_form)
+            fund_review_form = ApplicationBaseReviewForm.objects.create(
+                application=fund, form=application_review_form
+            )
+            fund_review_form2 = ApplicationBaseReviewForm.objects.create(
+                application=fund, form=proposal_review_form
+            )
             fund.review_forms = [fund_review_form, fund_review_form2]
             fund.save()
 
@@ -175,7 +673,7 @@ class Command(BaseCommand):
             lead=lead,
             # The date of the original Information Controls Fellowship request type
             start_date=date(2013, 1, 1),
-            end_date=date(2018, 8, 29)
+            end_date=date(2018, 8, 29),
         )
         round.parent_page = fund
         fund.add_child(instance=round)
diff --git a/hypha/apply/funds/management/commands/seed_rapid_response.py b/hypha/apply/funds/management/commands/seed_rapid_response.py
index 93f56f9651cc7aacf94d831c04d441d707fa45fa..097c4f4c26b4e39ceb5e78d6e2fd659aef63e360 100644
--- a/hypha/apply/funds/management/commands/seed_rapid_response.py
+++ b/hypha/apply/funds/management/commands/seed_rapid_response.py
@@ -15,8 +15,8 @@ from hypha.apply.home.models import ApplyHomePage
 from hypha.apply.review.models import ReviewForm
 from hypha.apply.users.groups import STAFF_GROUP_NAME
 
-RR_ROUND_TITLE = 'Rapid Response (archive round)'
-RR_FUND_TITLE = 'Rapid Response (archive fund)'
+RR_ROUND_TITLE = "Rapid Response (archive round)"
+RR_FUND_TITLE = "Rapid Response (archive fund)"
 
 
 class Command(BaseCommand):
@@ -26,100 +26,521 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         # There's an RR open round, so bail out. Avoids duplicate command runs.
         if Round.objects.filter(title=RR_ROUND_TITLE).count():
-            self.stdout.write(self.style.WARNING('Skipping. The target Round/Fund Type and Application Form exist'))
+            self.stdout.write(
+                self.style.WARNING(
+                    "Skipping. The target Round/Fund Type and Application Form exist"
+                )
+            )
             return
 
         application_form = self.create_rapid_response_form()
         application_review_form = self.create_rapid_response_review_form()
-        fund = self.create_rapid_response_fund_type(application_form, application_review_form)
+        fund = self.create_rapid_response_fund_type(
+            application_form, application_review_form
+        )
         self.create_rapid_response_round(fund)
 
     def create_rapid_response_form(self):
-
-        focus_id = Category.objects.get(name='Focus').id
-        objectives_id = Category.objects.get(name='Objective(s)').id
-        beneficiaries_id = Category.objects.get(name='Beneficiaries').id
-        regions_id = Category.objects.get(name='Region(s)').id
-        addressed_id = Category.objects.get(name='Addressed problems').id
+        focus_id = Category.objects.get(name="Focus").id
+        objectives_id = Category.objects.get(name="Objective(s)").id
+        beneficiaries_id = Category.objects.get(name="Beneficiaries").id
+        regions_id = Category.objects.get(name="Region(s)").id
+        addressed_id = Category.objects.get(name="Addressed problems").id
 
         data = [
-            {"type": "text_markup", "value": "<h3>Basic information</h3>", "id": "a96e8d83-edfc-42d2-a02a-c4f72cb94b84"},
-            {"type": "title", "value": {"field_label": "What is your project name?", "help_text": "", "info": None}, "id": "09d320bc-9c20-4795-8823-54cab9cc6eaf"},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "a3580ace-11c4-4b79-bc5d-2445414782b7"},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "14cda1f7-4553-43c6-9f09-944285246fbf"},
-            {"type": "dropdown", "value": {"field_label": "Have you ever applied to or received funding as an OTF project or fellow?", "help_text": "", "required": "true", "choices": ["Yes", "No"]}, "id": "49a0f5f4-e8e9-4dfc-8575-205ee9675032"},
-            {"type": "text_markup", "value": "<h3>More information about your project</h3>", "id": "37657bd3-04b0-4dbb-af2d-63065c349f82"},
-            {"type": "radios", "value": {"field_label": "What are you applying for?", "help_text": "", "required": "true", "choices": ["Direct funding", "Requesting to receive services", "Requesting to provide services"]}, "id": "c1277029-1718-40e3-8bf5-d80ece7fd343"},
-            {"type": "value", "value": {"field_label": "If you are applying for direct funding, how much do you need?", "help_text": "Amount requested should be less than 50000 USD.", "info": None}, "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7"},
-            {"type": "dropdown", "value": {"field_label": "If you are requesting to receive or provide a service, what is it?", "help_text": "", "required": "", "choices": ["Audit of presumably compromised websites", "DDoS response and mitigation", "Secure web hosting", "monitoring and resiliency of websites during special events (elections, campaigns etc.)", "VPN connections", "Safe internet connections", "Forensic analysis of digital attacks", "Recovery of compromised websites", "Malware analysis", "Equipment replacements", "Finding legal representation", "Payment of legal fees"]}, "id": "ebdf9a22-58c7-4bd6-a58d-e71363357470"},
-            {"type": "rich_text", "value": {"field_label": "If not listed above, what other services do you want to provide or receive?", "help_text": "", "required": "", "default_value": ""}, "id": "c8c329c7-78e4-4cbf-a3b1-77a1324e92ff"},
-            {"type": "duration", "value": {"field_label": "How long will it take?", "help_text": "", "info": None}, "id": "b47f84f5-81bc-4aff-a865-5b927f504246"},
-            {"type": "rich_text", "value": {"field_label": "What is the challenge you are trying to address and who will it help?", "help_text": "Please briefly provide contextual or background information regarding the problem you would like to address and the target groups/communities you are trying to help.", "required": "true", "default_value": ""}, "id": "1ec16cdc-7a68-40be-b17b-9a218def4260"},
-            {"type": "rich_text", "value": {"field_label": "What are you proposing to do and how will you accomplish it?", "help_text": "In other words, please describe your project\u2019s overall goal as well as specific objectives. What activities are you going to carry out in order to achieve your objectives?", "required": "true", "default_value": ""}, "id": "4fa2ac11-d1cd-4d23-8082-93a14c8f99c8"},
-            {"type": "rich_text", "value": {"field_label": "Anticipated outputs and outcomes", "help_text": "", "required": "true", "default_value": ""}, "id": "3cde39ae-b687-4c4f-b58b-849396c2fdb8"},
-            {"type": "rich_text", "value": {"field_label": "Timeline", "help_text": "", "required": "true", "default_value": ""}, "id": "0b2a4653-b390-44a6-b92e-fae4647e7ec4"},
-            {"type": "rich_text", "value": {"field_label": "How does this project fit into OTF\u2019s Rapid Response remit?", "help_text": "", "required": "true", "default_value": ""}, "id": "6d75e412-cf53-4833-9f1d-3e0126512fb9"},
-            {"type": "text_markup", "value": "<a href=\"\\/requests\\/rapid-response-fund\">Open the Rapid Response Fund remit in a new window.</a>", "id": "85d6c115-8d06-4a52-95cf-0e9096633bf0"},
-            {"type": "rich_text", "value": {"field_label": "Why does it have to happen immediately or within the next few months?", "help_text": "", "required": "true", "default_value": ""}, "id": "1b181d1e-ef91-41af-b9c1-d096a991314b"},
-            {"type": "category", "value": {"field_label": "Focus", "help_text": "", "required": "", "category": focus_id, "multi": "true"}, "id": "efd91eaf-378f-4aab-96cb-c5601155cbee"},
-            {"type": "category", "value": {"field_label": "Objectives", "help_text": "", "required": "true", "category": objectives_id, "multi": "true"}, "id": "4be0c7bd-231d-4d9f-bd47-8589fc005f54"},
-            {"type": "category", "value": {"field_label": "Beneficiaries", "help_text": "", "required": "true", "category": beneficiaries_id, "multi": "true"}, "id": "6e0293ee-218e-4c3b-b82d-5bf91fdb21c9"},
-            {"type": "category", "value": {"field_label": "Regions", "help_text": "", "required": "true", "category": regions_id, "multi": "true"}, "id": "6ff029c6-c6d1-4c37-a49a-46181b1cd33d"},
-            {"type": "category", "value": {"field_label": "Addressed problems", "help_text": "", "required": "true", "category": addressed_id, "multi": "true"}, "id": "7fb1001e-d458-414f-a5bb-006db6f89baf"},
-            {"type": "rich_text", "value": {"field_label": "Budget", "help_text": "", "required": "true", "default_value": ""}, "id": "45d7d38a-9c9d-4c43-98df-bb95d4a1dd77"},
-            {"type": "text_markup", "value": "<h3>Legal information for the contract</h3>", "id": "29432dd7-d5d8-42e7-8d54-3b45c576dd7d"},
-            {"type": "char", "value": {"field_label": "Legal name", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "632065c5-860f-4751-9b31-52914d7c6448"},
-            {"type": "char", "value": {"field_label": "Primary point of contact", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "13bb0d64-65f3-4340-8e7e-e5da80d706d5"},
-            {"type": "char", "value": {"field_label": "Phone", "help_text": "", "required": "", "format": "", "default_value": ""}, "id": "2cb9fe4b-df45-4181-80e5-14382f853081"},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "bd29eb88-9754-4305-9b2d-406a875ec56a"},
-            {"type": "rich_text", "value": {"field_label": "Request specific questions", "help_text": "", "required": "", "default_value": ""}, "id": "1889de86-0a0d-4abf-9916-4db87a499d35"},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": ""}, "id": "607daeba-1f33-4ad0-b135-eda743ba8e3a"},
-            {"type": "text_markup", "value": "<h3>I acknowledge</h3>", "id": "5688ddc7-0397-41e7-9e6b-2c0fe44f42aa"},
-            {"type": "checkbox", "value": {"field_label": "My application will be dismissed if it does not fit within OTF\'s mission, values, principles statements.", "help_text": "", "required": "true", "default_value": ""}, "id": "e695f0d7-4c74-4cc6-853f-bd62ecd19d3d"},
-            {"type": "text_markup", "value": "Read our <a href=\"\\/about/program\">mission, values, and principles</a>.", "id": "051be067-d45a-4bc3-8016-a09dadd734f5"},
-            {"type": "checkbox", "value": {"field_label": "I have read and understand OTF\'s Terms and Privacy policy.", "help_text": "", "required": "true", "default_value": ""}, "id": "f40d1acc-d802-4cc6-b0e9-fff78dc54223"},
-            {"type": "text_markup", "value": "Read the <a href=\"\\/tos\">Terms and Privacy policy</a>.", "id": "bcf64886-df76-41d2-9a22-fb7e49a7718c"},
-            {"type": "checkbox", "value": {"field_label": "I am legally able to sign contracts or represent an organization that can.", "help_text": "", "required": "true", "default_value": ""}, "id": "0b3c0827-38e2-439b-bca5-735835af1019"},
-            {"type": "checkbox", "value": {"field_label": "I understand that all intellectual property created with support for this application must be openly licensed.", "help_text": "", "required": "true", "default_value": ""}, "id": "bc9c960e-a6f4-4bc2-b626-efb5bc5552c6"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is incomplete in any way, it will be dismissed.", "help_text": "", "required": "true", "default_value": ""}, "id": "5812b66d-630e-4ca2-8bea-819084278f55"},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.", "help_text": "", "required": "true", "default_value": ""}, "id": "97d3746c-cf0f-449a-b3a3-7a9cdd45cc6d"},
-            {"type": "text_markup", "value": "<h3>I would like to</h3>", "id": "e99c9dbe-f788-4eb2-813d-1787c0871210"},
-            {"type": "checkbox", "value": {"field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc)", "help_text": "", "required": "true", "default_value": ""}, "id": "fc3d2a87-1151-418b-b1cd-9289f00bde35"},
-            {"type": "checkbox", "value": {"field_label": "Sign up for OTF\'s daily newsletter (collection of news related to global internet freedom).", "help_text": "", "required": "true", "default_value": ""}, "id": "83ecc69a-f47c-495e-bc8f-326e55aed67a"}
+            {
+                "type": "text_markup",
+                "value": "<h3>Basic information</h3>",
+                "id": "a96e8d83-edfc-42d2-a02a-c4f72cb94b84",
+            },
+            {
+                "type": "title",
+                "value": {
+                    "field_label": "What is your project name?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "09d320bc-9c20-4795-8823-54cab9cc6eaf",
+            },
+            {
+                "type": "full_name",
+                "value": {"field_label": "Your name", "help_text": "", "info": None},
+                "id": "a3580ace-11c4-4b79-bc5d-2445414782b7",
+            },
+            {
+                "type": "email",
+                "value": {"field_label": "E-mail", "help_text": "", "info": None},
+                "id": "14cda1f7-4553-43c6-9f09-944285246fbf",
+            },
+            {
+                "type": "dropdown",
+                "value": {
+                    "field_label": "Have you ever applied to or received funding as an OTF project or fellow?",
+                    "help_text": "",
+                    "required": "true",
+                    "choices": ["Yes", "No"],
+                },
+                "id": "49a0f5f4-e8e9-4dfc-8575-205ee9675032",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>More information about your project</h3>",
+                "id": "37657bd3-04b0-4dbb-af2d-63065c349f82",
+            },
+            {
+                "type": "radios",
+                "value": {
+                    "field_label": "What are you applying for?",
+                    "help_text": "",
+                    "required": "true",
+                    "choices": [
+                        "Direct funding",
+                        "Requesting to receive services",
+                        "Requesting to provide services",
+                    ],
+                },
+                "id": "c1277029-1718-40e3-8bf5-d80ece7fd343",
+            },
+            {
+                "type": "value",
+                "value": {
+                    "field_label": "If you are applying for direct funding, how much do you need?",
+                    "help_text": "Amount requested should be less than 50000 USD.",
+                    "info": None,
+                },
+                "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7",
+            },
+            {
+                "type": "dropdown",
+                "value": {
+                    "field_label": "If you are requesting to receive or provide a service, what is it?",
+                    "help_text": "",
+                    "required": "",
+                    "choices": [
+                        "Audit of presumably compromised websites",
+                        "DDoS response and mitigation",
+                        "Secure web hosting",
+                        "monitoring and resiliency of websites during special events (elections, campaigns etc.)",
+                        "VPN connections",
+                        "Safe internet connections",
+                        "Forensic analysis of digital attacks",
+                        "Recovery of compromised websites",
+                        "Malware analysis",
+                        "Equipment replacements",
+                        "Finding legal representation",
+                        "Payment of legal fees",
+                    ],
+                },
+                "id": "ebdf9a22-58c7-4bd6-a58d-e71363357470",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "If not listed above, what other services do you want to provide or receive?",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "c8c329c7-78e4-4cbf-a3b1-77a1324e92ff",
+            },
+            {
+                "type": "duration",
+                "value": {
+                    "field_label": "How long will it take?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "b47f84f5-81bc-4aff-a865-5b927f504246",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What is the challenge you are trying to address and who will it help?",
+                    "help_text": "Please briefly provide contextual or background information regarding the problem you would like to address and the target groups/communities you are trying to help.",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "1ec16cdc-7a68-40be-b17b-9a218def4260",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "What are you proposing to do and how will you accomplish it?",
+                    "help_text": "In other words, please describe your project\u2019s overall goal as well as specific objectives. What activities are you going to carry out in order to achieve your objectives?",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "4fa2ac11-d1cd-4d23-8082-93a14c8f99c8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Anticipated outputs and outcomes",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "3cde39ae-b687-4c4f-b58b-849396c2fdb8",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Timeline",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "0b2a4653-b390-44a6-b92e-fae4647e7ec4",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "How does this project fit into OTF\u2019s Rapid Response remit?",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "6d75e412-cf53-4833-9f1d-3e0126512fb9",
+            },
+            {
+                "type": "text_markup",
+                "value": '<a href="\\/requests\\/rapid-response-fund">Open the Rapid Response Fund remit in a new window.</a>',
+                "id": "85d6c115-8d06-4a52-95cf-0e9096633bf0",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Why does it have to happen immediately or within the next few months?",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "1b181d1e-ef91-41af-b9c1-d096a991314b",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Focus",
+                    "help_text": "",
+                    "required": "",
+                    "category": focus_id,
+                    "multi": "true",
+                },
+                "id": "efd91eaf-378f-4aab-96cb-c5601155cbee",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Objectives",
+                    "help_text": "",
+                    "required": "true",
+                    "category": objectives_id,
+                    "multi": "true",
+                },
+                "id": "4be0c7bd-231d-4d9f-bd47-8589fc005f54",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Beneficiaries",
+                    "help_text": "",
+                    "required": "true",
+                    "category": beneficiaries_id,
+                    "multi": "true",
+                },
+                "id": "6e0293ee-218e-4c3b-b82d-5bf91fdb21c9",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Regions",
+                    "help_text": "",
+                    "required": "true",
+                    "category": regions_id,
+                    "multi": "true",
+                },
+                "id": "6ff029c6-c6d1-4c37-a49a-46181b1cd33d",
+            },
+            {
+                "type": "category",
+                "value": {
+                    "field_label": "Addressed problems",
+                    "help_text": "",
+                    "required": "true",
+                    "category": addressed_id,
+                    "multi": "true",
+                },
+                "id": "7fb1001e-d458-414f-a5bb-006db6f89baf",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Budget",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "45d7d38a-9c9d-4c43-98df-bb95d4a1dd77",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>Legal information for the contract</h3>",
+                "id": "29432dd7-d5d8-42e7-8d54-3b45c576dd7d",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Legal name",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "632065c5-860f-4751-9b31-52914d7c6448",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Primary point of contact",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "13bb0d64-65f3-4340-8e7e-e5da80d706d5",
+            },
+            {
+                "type": "char",
+                "value": {
+                    "field_label": "Phone",
+                    "help_text": "",
+                    "required": "",
+                    "format": "",
+                    "default_value": "",
+                },
+                "id": "2cb9fe4b-df45-4181-80e5-14382f853081",
+            },
+            {
+                "type": "address",
+                "value": {"field_label": "Address", "help_text": "", "info": None},
+                "id": "bd29eb88-9754-4305-9b2d-406a875ec56a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Request specific questions",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "1889de86-0a0d-4abf-9916-4db87a499d35",
+            },
+            {
+                "type": "multi_file",
+                "value": {"field_label": "Upload", "help_text": "", "required": ""},
+                "id": "607daeba-1f33-4ad0-b135-eda743ba8e3a",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I acknowledge</h3>",
+                "id": "5688ddc7-0397-41e7-9e6b-2c0fe44f42aa",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "My application will be dismissed if it does not fit within OTF's mission, values, principles statements.",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "e695f0d7-4c74-4cc6-853f-bd62ecd19d3d",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read our <a href="\\/about/program">mission, values, and principles</a>.',
+                "id": "051be067-d45a-4bc3-8016-a09dadd734f5",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I have read and understand OTF's Terms and Privacy policy.",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "f40d1acc-d802-4cc6-b0e9-fff78dc54223",
+            },
+            {
+                "type": "text_markup",
+                "value": 'Read the <a href="\\/tos">Terms and Privacy policy</a>.',
+                "id": "bcf64886-df76-41d2-9a22-fb7e49a7718c",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I am legally able to sign contracts or represent an organization that can.",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "0b3c0827-38e2-439b-bca5-735835af1019",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that all intellectual property created with support for this application must be openly licensed.",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "bc9c960e-a6f4-4bc2-b626-efb5bc5552c6",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is incomplete in any way, it will be dismissed.",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "5812b66d-630e-4ca2-8bea-819084278f55",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "97d3746c-cf0f-449a-b3a3-7a9cdd45cc6d",
+            },
+            {
+                "type": "text_markup",
+                "value": "<h3>I would like to</h3>",
+                "id": "e99c9dbe-f788-4eb2-813d-1787c0871210",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc)",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "fc3d2a87-1151-418b-b1cd-9289f00bde35",
+            },
+            {
+                "type": "checkbox",
+                "value": {
+                    "field_label": "Sign up for OTF's daily newsletter (collection of news related to global internet freedom).",
+                    "help_text": "",
+                    "required": "true",
+                    "default_value": "",
+                },
+                "id": "83ecc69a-f47c-495e-bc8f-326e55aed67a",
+            },
         ]
 
-        application_form, _ = ApplicationForm.objects.get_or_create(name='Rapid response', defaults={'form_fields': json.dumps(data)})
+        application_form, _ = ApplicationForm.objects.get_or_create(
+            name="Rapid response", defaults={"form_fields": json.dumps(data)}
+        )
 
         return application_form
 
     def create_rapid_response_review_form(self):
-
         data2 = [
-            {"type": "recommendation", "value": {"field_label": "Do you think we should support this request?", "help_text": "", "info": None}, "id": "d350fbf9-e332-4d7f-b238-7f545cff927a"},
-            {"type": "rich_text", "value": {"field_label": "Things that you liked", "help_text": "", "required": "", "default_value": ""}, "id": "cec815a0-fab1-4142-9fc6-71319b054b2a"},
-            {"type": "rich_text", "value": {"field_label": "Things that concern you", "help_text": "", "required": "", "default_value": ""}, "id": "6915acf0-9a19-4e73-8d2b-d96e39e3b00e"},
-            {"type": "score", "value": {"field_label": "How appropriate are the proposed objectives for rapid response support?", "help_text": "", "required": ""}, "id": "71bfe95d-89c5-401b-ae7a-778e91d5c8c5"},
-            {"type": "score", "value": {"field_label": "How would you rate the applicant's capacity and knowledge to carry out this project?", "help_text": "", "required": ""}, "id": "3aa164c1-4386-4046-997a-a2778e1d894e"},
-            {"type": "score", "value": {"field_label": "Does the applicant provide sufficient justification for the amount of funding requested (is this cost effective)?", "help_text": "", "required": ""}, "id": "7cc12bb6-4c12-48aa-a269-1fd6d725abfe"},
-            {"type": "comments", "value": {"field_label": "Other comments", "help_text": "", "info": None}, "id": "d94e51d3-026c-443f-a98a-a66b1f6c968c"}
+            {
+                "type": "recommendation",
+                "value": {
+                    "field_label": "Do you think we should support this request?",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "d350fbf9-e332-4d7f-b238-7f545cff927a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Things that you liked",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "cec815a0-fab1-4142-9fc6-71319b054b2a",
+            },
+            {
+                "type": "rich_text",
+                "value": {
+                    "field_label": "Things that concern you",
+                    "help_text": "",
+                    "required": "",
+                    "default_value": "",
+                },
+                "id": "6915acf0-9a19-4e73-8d2b-d96e39e3b00e",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "How appropriate are the proposed objectives for rapid response support?",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "71bfe95d-89c5-401b-ae7a-778e91d5c8c5",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "How would you rate the applicant's capacity and knowledge to carry out this project?",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "3aa164c1-4386-4046-997a-a2778e1d894e",
+            },
+            {
+                "type": "score",
+                "value": {
+                    "field_label": "Does the applicant provide sufficient justification for the amount of funding requested (is this cost effective)?",
+                    "help_text": "",
+                    "required": "",
+                },
+                "id": "7cc12bb6-4c12-48aa-a269-1fd6d725abfe",
+            },
+            {
+                "type": "comments",
+                "value": {
+                    "field_label": "Other comments",
+                    "help_text": "",
+                    "info": None,
+                },
+                "id": "d94e51d3-026c-443f-a98a-a66b1f6c968c",
+            },
         ]
 
-        rapid_response_review_form, _ = ReviewForm.objects.get_or_create(name='Rapid response review', defaults={'form_fields': json.dumps(data2)})
+        rapid_response_review_form, _ = ReviewForm.objects.get_or_create(
+            name="Rapid response review", defaults={"form_fields": json.dumps(data2)}
+        )
 
         return rapid_response_review_form
 
-    def create_rapid_response_fund_type(self, application_form, application_review_form):
+    def create_rapid_response_fund_type(
+        self, application_form, application_review_form
+    ):
         try:
             fund = FundType.objects.get(title=RR_FUND_TITLE)
         except FundType.DoesNotExist:
             apply_home = ApplyHomePage.objects.first()
 
-            fund = FundType(title=RR_FUND_TITLE, workflow_name='single')
+            fund = FundType(title=RR_FUND_TITLE, workflow_name="single")
             apply_home.add_child(instance=fund)
 
-            fund_form = ApplicationBaseForm.objects.create(application=fund, form=application_form)
+            fund_form = ApplicationBaseForm.objects.create(
+                application=fund, form=application_form
+            )
             fund.forms = [fund_form]
-            fund_review_form = ApplicationBaseReviewForm.objects.create(application=fund, form=application_review_form)
+            fund_review_form = ApplicationBaseReviewForm.objects.create(
+                application=fund, form=application_review_form
+            )
             fund.review_forms = [fund_review_form]
             fund.save()
 
@@ -138,7 +559,7 @@ class Command(BaseCommand):
             lead=lead,
             # The date of the original RR request type
             start_date=date(2013, 1, 1),
-            end_date=date(2018, 8, 29)
+            end_date=date(2018, 8, 29),
         )
         round.parent_page = fund
         fund.add_child(instance=round)
diff --git a/hypha/apply/funds/management/commands/send_reminders.py b/hypha/apply/funds/management/commands/send_reminders.py
index 9309339cd8636d865461e7e4f1739f5d5fd49951..18f793b07ed1ea1413da3f9bc210b718c92e436f 100644
--- a/hypha/apply/funds/management/commands/send_reminders.py
+++ b/hypha/apply/funds/management/commands/send_reminders.py
@@ -11,18 +11,18 @@ from hypha.apply.home.models import ApplyHomePage
 
 
 class Command(BaseCommand):
-    help = 'Send reminders'
+    help = "Send reminders"
 
     def handle(self, *args, **options):
         site = ApplyHomePage.objects.first().get_site()
-        set_urlconf('hypha.apply.urls')
+        set_urlconf("hypha.apply.urls")
 
         # Mock a HTTPRequest in order to pass the site settings into the
         # templates
         request = HttpRequest()
-        request.META['SERVER_NAME'] = site.hostname
-        request.META['SERVER_PORT'] = site.port
-        request.META[settings.SECURE_PROXY_SSL_HEADER] = 'https'
+        request.META["SERVER_NAME"] = site.hostname
+        request.META["SERVER_PORT"] = site.port
+        request.META[settings.SECURE_PROXY_SSL_HEADER] = "https"
         request.session = {}
         request._messages = FallbackStorage(request)
 
@@ -34,8 +34,6 @@ class Command(BaseCommand):
                 source=reminder.submission,
                 related=reminder,
             )
-            self.stdout.write(
-                self.style.SUCCESS(f'Reminder sent: {reminder.id}')
-            )
+            self.stdout.write(self.style.SUCCESS(f"Reminder sent: {reminder.id}"))
             reminder.sent = True
             reminder.save()
diff --git a/hypha/apply/funds/migrations/0001_initial.py b/hypha/apply/funds/migrations/0001_initial.py
index b148de45cbacf495758597f423ab37507c2cd2be..392a58631286cc746980d3b5ae4bef16f47baf14 100644
--- a/hypha/apply/funds/migrations/0001_initial.py
+++ b/hypha/apply/funds/migrations/0001_initial.py
@@ -7,23 +7,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('images', '0001_initial'),
-        ('wagtailcore', '0040_page_draft_title'),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0040_page_draft_title"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='FundType',
+            name="FundType",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0002_fundpage_workflow.py b/hypha/apply/funds/migrations/0002_fundpage_workflow.py
index 40f23159dde125df3a33c90eeec9ea4caf546645..fa8c2b309fc5716f1c2b97d7ca5a9cf9d451fec4 100644
--- a/hypha/apply/funds/migrations/0002_fundpage_workflow.py
+++ b/hypha/apply/funds/migrations/0002_fundpage_workflow.py
@@ -6,15 +6,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0001_initial'),
+        ("funds", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='fundtype',
-            name='workflow',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100),
+            model_name="fundtype",
+            name="workflow",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0003_applicationform_category_fundpageform_option.py b/hypha/apply/funds/migrations/0003_applicationform_category_fundpageform_option.py
index 2db3f8327a3e5c70f155a21767944ca9ae5dd7b3..3fddd57096c39ecc512acf5e6fff02d1b22bcb53 100644
--- a/hypha/apply/funds/migrations/0003_applicationform_category_fundpageform_option.py
+++ b/hypha/apply/funds/migrations/0003_applicationform_category_fundpageform_option.py
@@ -11,32 +11,459 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0002_fundpage_workflow'),
-        ('categories', '0001_initial'),
+        ("funds", "0002_fundpage_workflow"),
+        ("categories", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ApplicationForm',
+            name="ApplicationForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('form_fields', wagtail.fields.StreamField((('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')))))
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "number",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkbox",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "radios",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "dropdown",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkboxes",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "checkboxes",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Checkbox"
+                                                )
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "date",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateBlock(required=False),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "time",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TimeBlock(required=False),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "datetime",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateTimeBlock(
+                                                required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "file",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Other", label="Paragraph"
+                                ),
+                            ),
+                            (
+                                "category",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Leave blank to use the default Category label",
+                                                label="Label",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Leave blank to use the default Category help text",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "category",
+                                            hypha.apply.categories.blocks.ModelChooserBlock(
+                                                "categories.Category"
+                                            ),
+                                        ),
+                                        (
+                                            "multi",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Multi select", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Custom",
+                                ),
+                            ),
+                        )
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='FundForm',
+            name="FundForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationForm')),
-                ('fund', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='forms', to='funds.FundType')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationForm",
+                    ),
+                ),
+                (
+                    "fund",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="forms",
+                        to="funds.FundType",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0004_categoryblock_add_required_option.py b/hypha/apply/funds/migrations/0004_categoryblock_add_required_option.py
index ec33fa882df0ef7cf4df4e667ee0af552f163b65..ae330c77d5c09a6d0a4cee80475e18b67f86d3fb 100644
--- a/hypha/apply/funds/migrations/0004_categoryblock_add_required_option.py
+++ b/hypha/apply/funds/migrations/0004_categoryblock_add_required_option.py
@@ -9,15 +9,404 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0003_applicationform_category_fundpageform_option'),
+        ("funds", "0003_applicationform_category_fundpageform_option"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Custom')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0005_applicationsubmission.py b/hypha/apply/funds/migrations/0005_applicationsubmission.py
index ac820aae9eaf15fbd2148a022f554c4c8de8ff4c..41e5de12ac59e39a9de42da9168b0ab4ea88e985 100644
--- a/hypha/apply/funds/migrations/0005_applicationsubmission.py
+++ b/hypha/apply/funds/migrations/0005_applicationsubmission.py
@@ -8,24 +8,40 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('funds', '0004_categoryblock_add_required_option'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("funds", "0004_categoryblock_add_required_option"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ApplicationSubmission',
+            name="ApplicationSubmission",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('form_data', django.contrib.postgres.fields.jsonb.JSONField()),
-                ('submit_time', models.DateTimeField(auto_now_add=True, verbose_name='submit time')),
-                ('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Page')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("form_data", django.contrib.postgres.fields.jsonb.JSONField()),
+                (
+                    "submit_time",
+                    models.DateTimeField(auto_now_add=True, verbose_name="submit time"),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'form submission',
-                'abstract': False,
+                "verbose_name": "form submission",
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0006_update_block_definitions.py b/hypha/apply/funds/migrations/0006_update_block_definitions.py
index bddaf622dbe0f35c2e64fcfa24bda5a7940c3e62..1facaa93bacff7daf82521402af31b7bdeb74556 100644
--- a/hypha/apply/funds/migrations/0006_update_block_definitions.py
+++ b/hypha/apply/funds/migrations/0006_update_block_definitions.py
@@ -9,15 +9,442 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0005_applicationsubmission'),
+        ("funds", "0005_applicationsubmission"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.StaticBlock())), group='Required')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0007_round.py b/hypha/apply/funds/migrations/0007_round.py
index 14ed8c2dbdf4b303871d1c486fc0d25cc29404de..9d3347bc80969643a04f443a748acdee29feb6a9 100644
--- a/hypha/apply/funds/migrations/0007_round.py
+++ b/hypha/apply/funds/migrations/0007_round.py
@@ -7,21 +7,30 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('funds', '0006_update_block_definitions'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("funds", "0006_update_block_definitions"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Round',
+            name="Round",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0008_add_date_to_round.py b/hypha/apply/funds/migrations/0008_add_date_to_round.py
index b57db907c91167001264c42c3c74a2e479d885c3..03cd677aa068f3fc109ba669018b580227dfdd18 100644
--- a/hypha/apply/funds/migrations/0008_add_date_to_round.py
+++ b/hypha/apply/funds/migrations/0008_add_date_to_round.py
@@ -7,20 +7,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0007_round'),
+        ("funds", "0007_round"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='round',
-            name='end_date',
+            model_name="round",
+            name="end_date",
             field=models.DateField(blank=True, default=datetime.date.today),
         ),
         migrations.AddField(
-            model_name='round',
-            name='start_date',
+            model_name="round",
+            name="start_date",
             field=models.DateField(blank=True, default=datetime.date.today),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0009_update_date_fields.py b/hypha/apply/funds/migrations/0009_update_date_fields.py
index ed7261b0f1e6dc064eb9d4f2640e19d633b05365..38177f0c9e2bbdbfd78d608460d9419ea994a94e 100644
--- a/hypha/apply/funds/migrations/0009_update_date_fields.py
+++ b/hypha/apply/funds/migrations/0009_update_date_fields.py
@@ -7,20 +7,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0008_add_date_to_round'),
+        ("funds", "0008_add_date_to_round"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='round',
-            name='end_date',
-            field=models.DateField(blank=True, default=datetime.date.today, help_text='When no end date is provided the round will remain open indefinitely.', null=True),
+            model_name="round",
+            name="end_date",
+            field=models.DateField(
+                blank=True,
+                default=datetime.date.today,
+                help_text="When no end date is provided the round will remain open indefinitely.",
+                null=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='round',
-            name='start_date',
+            model_name="round",
+            name="start_date",
             field=models.DateField(default=datetime.date.today),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0010_update_for_rich_text_block.py b/hypha/apply/funds/migrations/0010_update_for_rich_text_block.py
index d7ef5b05ffaaffd4165e1be7dbf577351fb319c3..8a685aad8e87ec82f70d49db582d410be9ed8d89 100644
--- a/hypha/apply/funds/migrations/0010_update_for_rich_text_block.py
+++ b/hypha/apply/funds/migrations/0010_update_for_rich_text_block.py
@@ -10,15 +10,472 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0009_update_date_fields'),
+        ("funds", "0009_update_date_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0011_update_encoder_add_round_to_submission.py b/hypha/apply/funds/migrations/0011_update_encoder_add_round_to_submission.py
index 99eec0fd5b5925e3f432a94138beda18b0faf5e6..cc6657f2f4f112603b220ef77a55a804537d91b4 100644
--- a/hypha/apply/funds/migrations/0011_update_encoder_add_round_to_submission.py
+++ b/hypha/apply/funds/migrations/0011_update_encoder_add_round_to_submission.py
@@ -9,22 +9,28 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('funds', '0010_update_for_rich_text_block'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("funds", "0010_update_for_rich_text_block"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='round',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='wagtailcore.Page'),
+            model_name="applicationsubmission",
+            name="round",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="submissions",
+                to="wagtailcore.Page",
+            ),
             preserve_default=False,
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_data',
-            field=django.contrib.postgres.fields.jsonb.JSONField(encoder=django.core.serializers.json.DjangoJSONEncoder),
+            model_name="applicationsubmission",
+            name="form_data",
+            field=django.contrib.postgres.fields.jsonb.JSONField(
+                encoder=django.core.serializers.json.DjangoJSONEncoder
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0012_create_lab_models.py b/hypha/apply/funds/migrations/0012_create_lab_models.py
index 53dde0dca31345f860d5423540bd9870f2e0660d..0c26c8a496cca87bca6d08766315842d2ec1efd0 100644
--- a/hypha/apply/funds/migrations/0012_create_lab_models.py
+++ b/hypha/apply/funds/migrations/0012_create_lab_models.py
@@ -8,39 +8,76 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('funds', '0011_update_encoder_add_round_to_submission'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("funds", "0011_update_encoder_add_round_to_submission"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='LabForm',
+            name="LabForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationForm')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationForm",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='LabType',
+            name="LabType",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('workflow', models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "workflow",
+                    models.CharField(
+                        choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                        default="single",
+                        max_length=100,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
         migrations.AddField(
-            model_name='labform',
-            name='lab',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='forms', to='funds.LabType'),
+            model_name="labform",
+            name="lab",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="forms",
+                to="funds.LabType",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0013_allow_nullable_round_on_submission.py b/hypha/apply/funds/migrations/0013_allow_nullable_round_on_submission.py
index b449dd383a92ceb4e3111a0b854ca8fa8f1149a6..17e838928b2eebfd573c8325e0d8856a3aefd276 100644
--- a/hypha/apply/funds/migrations/0013_allow_nullable_round_on_submission.py
+++ b/hypha/apply/funds/migrations/0013_allow_nullable_round_on_submission.py
@@ -7,15 +7,19 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0012_create_lab_models'),
+        ("funds", "0012_create_lab_models"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='round',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='wagtailcore.Page'),
+            model_name="applicationsubmission",
+            name="round",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="submissions",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0014_add_meta_names.py b/hypha/apply/funds/migrations/0014_add_meta_names.py
index be76a2f73a2460028c9bde9b230dfdf2264d76cb..cd42551eeabd9ff12bbb5565e75aaaf04b8ba755 100644
--- a/hypha/apply/funds/migrations/0014_add_meta_names.py
+++ b/hypha/apply/funds/migrations/0014_add_meta_names.py
@@ -6,18 +6,17 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0013_allow_nullable_round_on_submission'),
+        ("funds", "0013_allow_nullable_round_on_submission"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='fundtype',
-            options={'verbose_name': 'Fund'},
+            name="fundtype",
+            options={"verbose_name": "Fund"},
         ),
         migrations.AlterModelOptions(
-            name='labtype',
-            options={'verbose_name': 'Lab'},
+            name="labtype",
+            options={"verbose_name": "Lab"},
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0015_link_user_to_application.py b/hypha/apply/funds/migrations/0015_link_user_to_application.py
index e5b1424f3fc625e9bf6abf303cb171d3bb0a3968..e0d879ef3ce469324bebfaa5eb270c81c19f3a95 100644
--- a/hypha/apply/funds/migrations/0015_link_user_to_application.py
+++ b/hypha/apply/funds/migrations/0015_link_user_to_application.py
@@ -12,61 +12,580 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0014_add_meta_names'),
+        ("funds", "0014_add_meta_names"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='user',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="user",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AddField(
-            model_name='fundtype',
-            name='confirmation_text_extra',
-            field=models.TextField(blank=True, help_text='Additional text for the application confirmation message.'),
+            model_name="fundtype",
+            name="confirmation_text_extra",
+            field=models.TextField(
+                blank=True,
+                help_text="Additional text for the application confirmation message.",
+            ),
         ),
         migrations.AddField(
-            model_name='fundtype',
-            name='from_address',
-            field=models.CharField(blank=True, max_length=255, verbose_name='from address'),
+            model_name="fundtype",
+            name="from_address",
+            field=models.CharField(
+                blank=True, max_length=255, verbose_name="from address"
+            ),
         ),
         migrations.AddField(
-            model_name='fundtype',
-            name='subject',
-            field=models.CharField(blank=True, max_length=255, verbose_name='subject'),
+            model_name="fundtype",
+            name="subject",
+            field=models.CharField(blank=True, max_length=255, verbose_name="subject"),
         ),
         migrations.AddField(
-            model_name='fundtype',
-            name='to_address',
-            field=models.CharField(blank=True, help_text='Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.', max_length=255, verbose_name='to address'),
+            model_name="fundtype",
+            name="to_address",
+            field=models.CharField(
+                blank=True,
+                help_text="Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.",
+                max_length=255,
+                verbose_name="to address",
+            ),
         ),
         migrations.AddField(
-            model_name='labtype',
-            name='confirmation_text_extra',
-            field=models.TextField(blank=True, help_text='Additional text for the application confirmation message.'),
+            model_name="labtype",
+            name="confirmation_text_extra",
+            field=models.TextField(
+                blank=True,
+                help_text="Additional text for the application confirmation message.",
+            ),
         ),
         migrations.AddField(
-            model_name='labtype',
-            name='from_address',
-            field=models.CharField(blank=True, max_length=255, verbose_name='from address'),
+            model_name="labtype",
+            name="from_address",
+            field=models.CharField(
+                blank=True, max_length=255, verbose_name="from address"
+            ),
         ),
         migrations.AddField(
-            model_name='labtype',
-            name='subject',
-            field=models.CharField(blank=True, max_length=255, verbose_name='subject'),
+            model_name="labtype",
+            name="subject",
+            field=models.CharField(blank=True, max_length=255, verbose_name="subject"),
         ),
         migrations.AddField(
-            model_name='labtype',
-            name='to_address',
-            field=models.CharField(blank=True, help_text='Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.', max_length=255, verbose_name='to address'),
+            model_name="labtype",
+            name="to_address",
+            field=models.CharField(
+                blank=True,
+                help_text="Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.",
+                max_length=255,
+                verbose_name="to address",
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0016_roundform.py b/hypha/apply/funds/migrations/0016_roundform.py
index 038fd490c1b732b91ddb9fa3a610d87135ae0195..51e7502667e378474a22ab152690794e2503a529 100644
--- a/hypha/apply/funds/migrations/0016_roundform.py
+++ b/hypha/apply/funds/migrations/0016_roundform.py
@@ -8,23 +8,46 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0015_link_user_to_application'),
+        ("funds", "0015_link_user_to_application"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='RoundForm',
+            name="RoundForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationForm')),
-                ('round', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='forms', to='funds.Round')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationForm",
+                    ),
+                ),
+                (
+                    "round",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="forms",
+                        to="funds.Round",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0017_round_workflow.py b/hypha/apply/funds/migrations/0017_round_workflow.py
index 852c68af505b59474aa96f010765ab0a0565a82d..5b7e7e24d64f5deaed9c6becc0cd941558919437 100644
--- a/hypha/apply/funds/migrations/0017_round_workflow.py
+++ b/hypha/apply/funds/migrations/0017_round_workflow.py
@@ -6,15 +6,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0016_roundform'),
+        ("funds", "0016_roundform"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='round',
-            name='workflow',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100),
+            model_name="round",
+            name="workflow",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0018_add_addressfield.py b/hypha/apply/funds/migrations/0018_add_addressfield.py
index c5e5f8cd9e0e8efc430155db6ed757931841742d..e1c2c00b5253c82d439124ce763621cef4281ee9 100644
--- a/hypha/apply/funds/migrations/0018_add_addressfield.py
+++ b/hypha/apply/funds/migrations/0018_add_addressfield.py
@@ -10,15 +10,529 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0017_round_workflow'),
+        ("funds", "0017_round_workflow"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('address', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0019_protect_submission.py b/hypha/apply/funds/migrations/0019_protect_submission.py
index d9669d25aa7c7c4d9cf6e598ad49aab1bf987c10..8d48b23c01a8e8b315c6b63b32cf7dd908894b24 100644
--- a/hypha/apply/funds/migrations/0019_protect_submission.py
+++ b/hypha/apply/funds/migrations/0019_protect_submission.py
@@ -7,20 +7,26 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0018_add_addressfield'),
+        ("funds", "0018_add_addressfield"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='wagtailcore.Page'),
+            model_name="applicationsubmission",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT, to="wagtailcore.Page"
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='round',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='submissions', to='wagtailcore.Page'),
+            model_name="applicationsubmission",
+            name="round",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="submissions",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0020_add_workflow_and_status_to_submission.py b/hypha/apply/funds/migrations/0020_add_workflow_and_status_to_submission.py
index 9d64d2adf2343e766fe5082f49affed161b51708..e6fc14c78246091b3fa7095faa3dc80d7f280453 100644
--- a/hypha/apply/funds/migrations/0020_add_workflow_and_status_to_submission.py
+++ b/hypha/apply/funds/migrations/0020_add_workflow_and_status_to_submission.py
@@ -6,25 +6,28 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0019_protect_submission'),
+        ("funds", "0019_protect_submission"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='applicationsubmission',
+            name="applicationsubmission",
             options={},
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='status',
-            field=models.CharField(default='', max_length=254),
+            model_name="applicationsubmission",
+            name="status",
+            field=models.CharField(default="", max_length=254),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='workflow',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100),
+            model_name="applicationsubmission",
+            name="workflow",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0021_rename_workflow_field.py b/hypha/apply/funds/migrations/0021_rename_workflow_field.py
index ea9dbb49fecfdd4348d4bcbac03b6ffece25b9b4..b24682ab7b5c1ee6d36b6ab9e6c36cbde8fbb345 100644
--- a/hypha/apply/funds/migrations/0021_rename_workflow_field.py
+++ b/hypha/apply/funds/migrations/0021_rename_workflow_field.py
@@ -6,50 +6,69 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0020_add_workflow_and_status_to_submission'),
+        ("funds", "0020_add_workflow_and_status_to_submission"),
     ]
 
     operations = [
         migrations.RenameField(
-            model_name='applicationsubmission',
-            old_name='workflow',
-            new_name='workflow_name',
+            model_name="applicationsubmission",
+            old_name="workflow",
+            new_name="workflow_name",
         ),
         migrations.RenameField(
-            model_name='fundtype',
-            old_name='workflow',
-            new_name='workflow_name',
+            model_name="fundtype",
+            old_name="workflow",
+            new_name="workflow_name",
         ),
         migrations.RenameField(
-            model_name='labtype',
-            old_name='workflow',
-            new_name='workflow_name',
+            model_name="labtype",
+            old_name="workflow",
+            new_name="workflow_name",
         ),
         migrations.RenameField(
-            model_name='round',
-            old_name='workflow',
-            new_name='workflow_name',
+            model_name="round",
+            old_name="workflow",
+            new_name="workflow_name",
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="applicationsubmission",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='fundtype',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="fundtype",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='labtype',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="labtype",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='round',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Single Stage'), ('double', 'Two Stage')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="round",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Single Stage"), ("double", "Two Stage")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0022_applicationsubmission_form_fields.py b/hypha/apply/funds/migrations/0022_applicationsubmission_form_fields.py
index f7d62d15ee135899c995aa15962d46c38e61b4d9..c7b34298814f046f1d047153eb9c5699601547d2 100644
--- a/hypha/apply/funds/migrations/0022_applicationsubmission_form_fields.py
+++ b/hypha/apply/funds/migrations/0022_applicationsubmission_form_fields.py
@@ -10,16 +10,531 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0021_rename_workflow_field'),
+        ("funds", "0021_rename_workflow_field"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('address', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required'))), default=[]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                ),
+                default=[],
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0023_round_lead.py b/hypha/apply/funds/migrations/0023_round_lead.py
index df3a73882afa0a1f4fa94d1c1d67d8d52af6a839..4ae2cde0b3bf471d89240200227be553c93bf0df 100644
--- a/hypha/apply/funds/migrations/0023_round_lead.py
+++ b/hypha/apply/funds/migrations/0023_round_lead.py
@@ -8,17 +8,20 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0022_applicationsubmission_form_fields'),
+        ("funds", "0022_applicationsubmission_form_fields"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='round',
-            name='lead',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+            model_name="round",
+            name="lead",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                to=settings.AUTH_USER_MODEL,
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0024_applicationsubmission_search_data.py b/hypha/apply/funds/migrations/0024_applicationsubmission_search_data.py
index 97dc908a30de6f1bb1d71609d4d66dfb6ab262f8..1cfb3a6121e35f87b9d7f07f70c8a945c58cb4ae 100644
--- a/hypha/apply/funds/migrations/0024_applicationsubmission_search_data.py
+++ b/hypha/apply/funds/migrations/0024_applicationsubmission_search_data.py
@@ -6,16 +6,15 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0023_round_lead'),
+        ("funds", "0023_round_lead"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='search_data',
-            field=models.TextField(default=''),
+            model_name="applicationsubmission",
+            name="search_data",
+            field=models.TextField(default=""),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0025_update_with_file_blocks.py b/hypha/apply/funds/migrations/0025_update_with_file_blocks.py
index 4e876da96c719bab4559ae62eacf58867ad05d27..41dcbc945def9884091cdbec9c90d8184ca446ca 100644
--- a/hypha/apply/funds/migrations/0025_update_with_file_blocks.py
+++ b/hypha/apply/funds/migrations/0025_update_with_file_blocks.py
@@ -10,20 +10,1097 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0024_applicationsubmission_search_data'),
+        ("funds", "0024_applicationsubmission_search_data"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('multi_file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('address', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('multi_file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('address', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0026_add_leads_to_submission_and_lab.py b/hypha/apply/funds/migrations/0026_add_leads_to_submission_and_lab.py
index 8d68ac6179b435e8d6a2187c814cb6e72bed0d53..fa727a7f554097b2f7f42cd563ebb3e09ce33341 100644
--- a/hypha/apply/funds/migrations/0026_add_leads_to_submission_and_lab.py
+++ b/hypha/apply/funds/migrations/0026_add_leads_to_submission_and_lab.py
@@ -8,23 +8,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0025_update_with_file_blocks'),
+        ("funds", "0025_update_with_file_blocks"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='lead',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='submission_lead', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="lead",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="submission_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='labtype',
-            name='lead',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='lab_lead', to=settings.AUTH_USER_MODEL),
+            model_name="labtype",
+            name="lead",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="lab_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0027_applicationsubmission_drupal_id.py b/hypha/apply/funds/migrations/0027_applicationsubmission_drupal_id.py
index fe885fc83a8a1a9a2a15288318f5bff43158da7e..80df4764eaebccf28ee7167659c83dd48c4602c0 100644
--- a/hypha/apply/funds/migrations/0027_applicationsubmission_drupal_id.py
+++ b/hypha/apply/funds/migrations/0027_applicationsubmission_drupal_id.py
@@ -6,15 +6,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0026_add_leads_to_submission_and_lab'),
+        ("funds", "0026_add_leads_to_submission_and_lab"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='drupal_id',
+            model_name="applicationsubmission",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0028_update_on_delete_django2.py b/hypha/apply/funds/migrations/0028_update_on_delete_django2.py
index 1f3f45b75a901165630bd1c11d649982d2897b86..3b62f67153fac4f1f2910440eab9da424817b739 100644
--- a/hypha/apply/funds/migrations/0028_update_on_delete_django2.py
+++ b/hypha/apply/funds/migrations/0028_update_on_delete_django2.py
@@ -6,40 +6,59 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0027_applicationsubmission_drupal_id'),
+        ("funds", "0027_applicationsubmission_drupal_id"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff'}, on_delete=django.db.models.deletion.PROTECT, related_name='submission_lead', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff"},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="submission_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='fundform',
-            name='form',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='funds.ApplicationForm'),
+            model_name="fundform",
+            name="form",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT, to="funds.ApplicationForm"
+            ),
         ),
         migrations.AlterField(
-            model_name='labform',
-            name='form',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='funds.ApplicationForm'),
+            model_name="labform",
+            name="form",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT, to="funds.ApplicationForm"
+            ),
         ),
         migrations.AlterField(
-            model_name='labtype',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff'}, on_delete=django.db.models.deletion.PROTECT, related_name='lab_lead', to=settings.AUTH_USER_MODEL),
+            model_name="labtype",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff"},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="lab_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='round',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff'}, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
+            model_name="round",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff"},
+                on_delete=django.db.models.deletion.PROTECT,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundform',
-            name='form',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='funds.ApplicationForm'),
+            model_name="roundform",
+            name="form",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT, to="funds.ApplicationForm"
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0029_applicationsubmission_next.py b/hypha/apply/funds/migrations/0029_applicationsubmission_next.py
index 0f3baa78691bf7c70d430d729d9d0b9895235413..ead0771682526ccb67b37461a31b52eda69a37b1 100644
--- a/hypha/apply/funds/migrations/0029_applicationsubmission_next.py
+++ b/hypha/apply/funds/migrations/0029_applicationsubmission_next.py
@@ -5,15 +5,19 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0028_update_on_delete_django2'),
+        ("funds", "0028_update_on_delete_django2"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='next',
-            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='previous', to='funds.ApplicationSubmission'),
+            model_name="applicationsubmission",
+            name="next",
+            field=models.OneToOneField(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="previous",
+                to="funds.ApplicationSubmission",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0030_add_reviewers.py b/hypha/apply/funds/migrations/0030_add_reviewers.py
index 3640165854d9b2ccc6c3141a9911d789873beac6..11e64b2490f6b5c131e920a4c82a6d659116913b 100644
--- a/hypha/apply/funds/migrations/0030_add_reviewers.py
+++ b/hypha/apply/funds/migrations/0030_add_reviewers.py
@@ -7,31 +7,47 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0029_applicationsubmission_next'),
+        ("funds", "0029_applicationsubmission_next"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='reviewers',
-            field=models.ManyToManyField(limit_choices_to={'groups__name__in': ['Staff', 'Reviewer']}, related_name='submissions_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="reviewers",
+            field=models.ManyToManyField(
+                limit_choices_to={"groups__name__in": ["Staff", "Reviewer"]},
+                related_name="submissions_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AddField(
-            model_name='fundtype',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(limit_choices_to={'groups__name': 'Reviewer'}, related_name='fund_reviewers', to=settings.AUTH_USER_MODEL),
+            model_name="fundtype",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="fund_reviewers",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AddField(
-            model_name='round',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(limit_choices_to={'groups__name': 'Reviewer'}, related_name='rounds_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="round",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="rounds_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='round',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff'}, on_delete=django.db.models.deletion.PROTECT, related_name='round_lead', to=settings.AUTH_USER_MODEL),
+            model_name="round",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff"},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="round_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0031_labtype_reviewers.py b/hypha/apply/funds/migrations/0031_labtype_reviewers.py
index 5c126c7a6991b51d4e2a618254822c2caab21271..160b028045282b38fbc32a39685512306d27aa45 100644
--- a/hypha/apply/funds/migrations/0031_labtype_reviewers.py
+++ b/hypha/apply/funds/migrations/0031_labtype_reviewers.py
@@ -6,16 +6,19 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0030_add_reviewers'),
+        ("funds", "0030_add_reviewers"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='labtype',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(limit_choices_to={'groups__name': 'Reviewer'}, related_name='labs_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="labtype",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="labs_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0032_make_reviewers_optional_in_all_instances.py b/hypha/apply/funds/migrations/0032_make_reviewers_optional_in_all_instances.py
index 5e7088357954b8ebdc589bd6f12ec01616740444..6ee2a9b30297b6380faaa82737057514e17759db 100644
--- a/hypha/apply/funds/migrations/0032_make_reviewers_optional_in_all_instances.py
+++ b/hypha/apply/funds/migrations/0032_make_reviewers_optional_in_all_instances.py
@@ -6,30 +6,49 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0031_labtype_reviewers'),
+        ("funds", "0031_labtype_reviewers"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='reviewers',
-            field=models.ManyToManyField(blank=True, limit_choices_to={'groups__name__in': ['Staff', 'Reviewer']}, related_name='submissions_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="reviewers",
+            field=models.ManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name__in": ["Staff", "Reviewer"]},
+                related_name="submissions_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='fundtype',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer'}, related_name='fund_reviewers', to=settings.AUTH_USER_MODEL),
+            model_name="fundtype",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="fund_reviewers",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='labtype',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer'}, related_name='labs_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="labtype",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="labs_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='round',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer'}, related_name='rounds_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="round",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="rounds_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0033_use_django_fsm.py b/hypha/apply/funds/migrations/0033_use_django_fsm.py
index b27a4eb6d86742c014f2ba0d6e2c970032154426..c5f0210448c408305123df347f79b67981bd8bc3 100644
--- a/hypha/apply/funds/migrations/0033_use_django_fsm.py
+++ b/hypha/apply/funds/migrations/0033_use_django_fsm.py
@@ -5,35 +5,56 @@ import django_fsm
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0032_make_reviewers_optional_in_all_instances'),
+        ("funds", "0032_make_reviewers_optional_in_all_instances"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='status',
-            field=django_fsm.FSMField(default='in_discussion', max_length=50, protected=True),
+            model_name="applicationsubmission",
+            name="status",
+            field=django_fsm.FSMField(
+                default="in_discussion", max_length=50, protected=True
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="applicationsubmission",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Request"), ("double", "Concept & Proposal")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='fundtype',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="fundtype",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Request"), ("double", "Concept & Proposal")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='labtype',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="labtype",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Request"), ("double", "Concept & Proposal")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='round',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="round",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[("single", "Request"), ("double", "Concept & Proposal")],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0034_create_revisions_model.py b/hypha/apply/funds/migrations/0034_create_revisions_model.py
index e75812d775082949aa3dbd6e5c22c167658d6271..bb2867cdb5de19483738ec4679273a7bce264273 100644
--- a/hypha/apply/funds/migrations/0034_create_revisions_model.py
+++ b/hypha/apply/funds/migrations/0034_create_revisions_model.py
@@ -7,28 +7,59 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0033_use_django_fsm'),
+        ("funds", "0033_use_django_fsm"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ApplicationRevision',
+            name="ApplicationRevision",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('form_data', django.contrib.postgres.fields.jsonb.JSONField(encoder=django.core.serializers.json.DjangoJSONEncoder)),
-                ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='revisions', to='funds.ApplicationSubmission')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "form_data",
+                    django.contrib.postgres.fields.jsonb.JSONField(
+                        encoder=django.core.serializers.json.DjangoJSONEncoder
+                    ),
+                ),
+                (
+                    "submission",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="revisions",
+                        to="funds.ApplicationSubmission",
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='draft_revision',
-            field=models.OneToOneField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='draft', to='funds.ApplicationRevision'),
+            model_name="applicationsubmission",
+            name="draft_revision",
+            field=models.OneToOneField(
+                editable=False,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="draft",
+                to="funds.ApplicationRevision",
+            ),
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='live_revision',
-            field=models.OneToOneField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='live', to='funds.ApplicationRevision'),
+            model_name="applicationsubmission",
+            name="live_revision",
+            field=models.OneToOneField(
+                editable=False,
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="live",
+                to="funds.ApplicationRevision",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0035_author_timestamp_revision.py b/hypha/apply/funds/migrations/0035_author_timestamp_revision.py
index 19e85350d3770906d8eb544e97119773b6458059..1fae46c6c08b8fb2091938d81e67b858eb8340a6 100644
--- a/hypha/apply/funds/migrations/0035_author_timestamp_revision.py
+++ b/hypha/apply/funds/migrations/0035_author_timestamp_revision.py
@@ -6,25 +6,28 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0034_create_revisions_model'),
+        ("funds", "0034_create_revisions_model"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationrevision',
-            name='author',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
+            model_name="applicationrevision",
+            name="author",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AddField(
-            model_name='applicationrevision',
-            name='timestamp',
+            model_name="applicationrevision",
+            name="timestamp",
             field=models.DateTimeField(auto_now=True),
         ),
         migrations.AlterModelOptions(
-            name='applicationrevision',
-            options={'ordering': ['-timestamp']},
+            name="applicationrevision",
+            options={"ordering": ["-timestamp"]},
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0036_fundreviewform_labreviewform.py b/hypha/apply/funds/migrations/0036_fundreviewform_labreviewform.py
index e6ed3c39054228b44b09bf61f5293bde8271f4bb..98c121c3b5d29388f8f5fa9ecef874028c5df107 100644
--- a/hypha/apply/funds/migrations/0036_fundreviewform_labreviewform.py
+++ b/hypha/apply/funds/migrations/0036_fundreviewform_labreviewform.py
@@ -6,37 +6,84 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0005_streamform'),
-        ('funds', '0035_author_timestamp_revision'),
+        ("review", "0005_streamform"),
+        ("funds", "0035_author_timestamp_revision"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='FundReviewForm',
+            name="FundReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.ReviewForm')),
-                ('fund', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='review_forms', to='funds.FundType')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="review.ReviewForm",
+                    ),
+                ),
+                (
+                    "fund",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="review_forms",
+                        to="funds.FundType",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='LabReviewForm',
+            name="LabReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.ReviewForm')),
-                ('lab', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='review_forms', to='funds.LabType')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="review.ReviewForm",
+                    ),
+                ),
+                (
+                    "lab",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="review_forms",
+                        to="funds.LabType",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0037_refactor_funds_models.py b/hypha/apply/funds/migrations/0037_refactor_funds_models.py
index ce9fc3d027bd2395afede55b8f268979e33d1b61..4db661ac80da1fc34a4bbf52fea9327cb5d514a6 100644
--- a/hypha/apply/funds/migrations/0037_refactor_funds_models.py
+++ b/hypha/apply/funds/migrations/0037_refactor_funds_models.py
@@ -7,119 +7,157 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
+        ("wagtailcore", "0040_page_draft_title"),
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('review', '0006_remove_review_review'),
-        ('funds', '0036_fundreviewform_labreviewform'),
+        ("review", "0006_remove_review_review"),
+        ("funds", "0036_fundreviewform_labreviewform"),
     ]
 
     operations = [
         # Rename all the existing models as required
         migrations.RenameModel(
-            old_name='FundType',
-            new_name='ApplicationBase',
+            old_name="FundType",
+            new_name="ApplicationBase",
         ),
         migrations.RenameModel(
-            old_name='Round',
-            new_name='RoundBase',
+            old_name="Round",
+            new_name="RoundBase",
         ),
         migrations.RenameModel(
-            old_name='LabType',
-            new_name='LabBase',
+            old_name="LabType",
+            new_name="LabBase",
         ),
         migrations.RenameModel(
-            old_name='FundForm',
-            new_name='ApplicationBaseForm',
+            old_name="FundForm",
+            new_name="ApplicationBaseForm",
         ),
         migrations.RenameModel(
-            old_name='FundReviewForm',
-            new_name='ApplicationBaseReviewForm',
+            old_name="FundReviewForm",
+            new_name="ApplicationBaseReviewForm",
         ),
         migrations.RenameModel(
-            old_name='LabForm',
-            new_name='LabBaseForm',
+            old_name="LabForm",
+            new_name="LabBaseForm",
         ),
         migrations.RenameModel(
-            old_name='LabReviewForm',
-            new_name='LabBaseReviewForm',
+            old_name="LabReviewForm",
+            new_name="LabBaseReviewForm",
         ),
         migrations.RenameModel(
-            old_name='RoundForm',
-            new_name='RoundBaseForm',
+            old_name="RoundForm",
+            new_name="RoundBaseForm",
         ),
-
         # Add all the new models
         migrations.CreateModel(
-            name='FundType',
+            name="FundType",
             fields=[
-                ('applicationbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='funds.ApplicationBase')),
+                (
+                    "applicationbase_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="funds.ApplicationBase",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Fund',
+                "verbose_name": "Fund",
             },
-            bases=('funds.applicationbase',),
+            bases=("funds.applicationbase",),
         ),
         migrations.CreateModel(
-            name='LabType',
+            name="LabType",
             fields=[
-                ('labbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='funds.LabBase')),
+                (
+                    "labbase_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="funds.LabBase",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Lab',
+                "verbose_name": "Lab",
             },
-            bases=('funds.labbase',),
+            bases=("funds.labbase",),
         ),
         migrations.CreateModel(
-            name='Round',
+            name="Round",
             fields=[
-                ('roundbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='funds.RoundBase')),
+                (
+                    "roundbase_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="funds.RoundBase",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('funds.roundbase',),
+            bases=("funds.roundbase",),
         ),
-
-
         # Remove options - django
         migrations.AlterModelOptions(
-            name='applicationbase',
+            name="applicationbase",
             options={},
         ),
         migrations.AlterModelOptions(
-            name='labbase',
+            name="labbase",
             options={},
         ),
-
         # Rename fields as required - non essential
         migrations.RenameField(
-            model_name='applicationbaseform',
-            old_name='fund',
-            new_name='application',
+            model_name="applicationbaseform",
+            old_name="fund",
+            new_name="application",
         ),
         migrations.RenameField(
-            model_name='applicationbasereviewform',
-            old_name='fund',
-            new_name='application',
+            model_name="applicationbasereviewform",
+            old_name="fund",
+            new_name="application",
         ),
-
         # Alter related name based on the classname - non essential just being tidy
         migrations.AlterField(
-            model_name='applicationbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer'}, related_name='applicationbase_reviewers', to=settings.AUTH_USER_MODEL),
+            model_name="applicationbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="applicationbase_reviewers",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff'}, on_delete=django.db.models.deletion.PROTECT, related_name='roundbase_lead', to=settings.AUTH_USER_MODEL),
+            model_name="roundbase",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff"},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="roundbase_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer'}, related_name='roundbase_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="roundbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer"},
+                related_name="roundbase_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
-
     ]
diff --git a/hypha/apply/funds/migrations/0038_recreate_objects_that_exist.py b/hypha/apply/funds/migrations/0038_recreate_objects_that_exist.py
index 05f5d709096d4272463f9bb08ef08f0e4fe9d2cf..c1bea4f00f5a14a449eb20aa4ca69820ddcc28c4 100644
--- a/hypha/apply/funds/migrations/0038_recreate_objects_that_exist.py
+++ b/hypha/apply/funds/migrations/0038_recreate_objects_that_exist.py
@@ -7,28 +7,29 @@ def recreate_objects(apps, schema_editor):
     # We removed the old definition of these objects, need to create
     # a new object with a pointer back to that object, the underlying
     # data structure was unaffected
-    ContentType = apps.get_model('contenttypes.ContentType')
-
+    ContentType = apps.get_model("contenttypes.ContentType")
 
     for model_name, new_model_name in [
-            ('FundType', 'ApplicationBase'),
-            ('LabType', 'LabBase'),
-            ('Round', 'RoundBase'),
+        ("FundType", "ApplicationBase"),
+        ("LabType", "LabBase"),
+        ("Round", "RoundBase"),
     ]:
-        content_type, _ = ContentType.objects.get_or_create(model=model_name.lower(), app_label='funds')
+        content_type, _ = ContentType.objects.get_or_create(
+            model=model_name.lower(), app_label="funds"
+        )
 
-        model = apps.get_model('funds', model_name)
-        new_model = apps.get_model('funds', new_model_name)
+        model = apps.get_model("funds", model_name)
+        new_model = apps.get_model("funds", new_model_name)
         for obj in new_model.objects.all():
             field_values = {}
             for field in obj._meta.fields:
-                if field.name not in ['page_ptr']:
+                if field.name not in ["page_ptr"]:
                     field_values[field.name] = getattr(obj, field.name)
 
             kwargs = {
-                f'{new_model_name.lower()}_ptr': obj,
-                'draft_title': obj.draft_title,
-                'content_type': content_type,
+                f"{new_model_name.lower()}_ptr": obj,
+                "draft_title": obj.draft_title,
+                "content_type": content_type,
             }
             field_values.update(**kwargs)
             new_obj = model(**field_values)
@@ -36,9 +37,8 @@ def recreate_objects(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0037_refactor_funds_models'),
+        ("funds", "0037_refactor_funds_models"),
     ]
 
     operations = [
diff --git a/hypha/apply/funds/migrations/0039_add_rfps_and_sealed_rounds.py b/hypha/apply/funds/migrations/0039_add_rfps_and_sealed_rounds.py
index a44a1ef553ded0748f5dcea3043bb13605994137..0bd14403ead9e75dbc2a7109bd8ae5168f9b4d08 100644
--- a/hypha/apply/funds/migrations/0039_add_rfps_and_sealed_rounds.py
+++ b/hypha/apply/funds/migrations/0039_add_rfps_and_sealed_rounds.py
@@ -5,35 +5,54 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0038_recreate_objects_that_exist'),
+        ("funds", "0038_recreate_objects_that_exist"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='RequestForPartners',
+            name="RequestForPartners",
             fields=[
-                ('applicationbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='funds.ApplicationBase')),
+                (
+                    "applicationbase_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="funds.ApplicationBase",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'RFP',
+                "verbose_name": "RFP",
             },
-            bases=('funds.applicationbase',),
+            bases=("funds.applicationbase",),
         ),
         migrations.CreateModel(
-            name='SealedRound',
+            name="SealedRound",
             fields=[
-                ('roundbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='funds.RoundBase')),
+                (
+                    "roundbase_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="funds.RoundBase",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('funds.roundbase',),
+            bases=("funds.roundbase",),
         ),
         migrations.AddField(
-            model_name='roundbase',
-            name='sealed',
+            model_name="roundbase",
+            name="sealed",
             field=models.BooleanField(default=False),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0040_add_duration_stream_to_streamfield_definition.py b/hypha/apply/funds/migrations/0040_add_duration_stream_to_streamfield_definition.py
index 675b0da88a32811cb47c46f4827d2d48763dc1ee..6628cbfb988343d2809c210f7db193b779f7b620 100644
--- a/hypha/apply/funds/migrations/0040_add_duration_stream_to_streamfield_definition.py
+++ b/hypha/apply/funds/migrations/0040_add_duration_stream_to_streamfield_definition.py
@@ -8,20 +8,1135 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0039_add_rfps_and_sealed_rounds'),
+        ("funds", "0039_add_rfps_and_sealed_rounds"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('multi_file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('address', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('duration', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('number', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('checkbox', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))), group='Fields')), ('radios', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('dropdown', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))), group='Fields')), ('checkboxes', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))), group='Fields')), ('date', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))), group='Fields')), ('time', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))), group='Fields')), ('datetime', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))), group='Fields')), ('image', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('multi_file', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('category', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))), group='Custom')), ('title', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('value', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('email', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('address', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('full_name', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('duration', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0041_roundbasereviewform.py b/hypha/apply/funds/migrations/0041_roundbasereviewform.py
index 3e8f52c0aa19194612ad09494a365c77047a4e00..e8987e46233ae06b398a6b009a30f66a37a9b162 100644
--- a/hypha/apply/funds/migrations/0041_roundbasereviewform.py
+++ b/hypha/apply/funds/migrations/0041_roundbasereviewform.py
@@ -6,24 +6,47 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0006_remove_review_review'),
-        ('funds', '0040_add_duration_stream_to_streamfield_definition'),
+        ("review", "0006_remove_review_review"),
+        ("funds", "0040_add_duration_stream_to_streamfield_definition"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='RoundBaseReviewForm',
+            name="RoundBaseReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.ReviewForm')),
-                ('round', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='review_forms', to='funds.RoundBase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="review.ReviewForm",
+                    ),
+                ),
+                (
+                    "round",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="review_forms",
+                        to="funds.RoundBase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0042_update_json_encoder.py b/hypha/apply/funds/migrations/0042_update_json_encoder.py
index d64451728d047b901611ad8283712d5e3b46bdf8..a22ab1b39edba368de654edd1be2b594680fd8f6 100644
--- a/hypha/apply/funds/migrations/0042_update_json_encoder.py
+++ b/hypha/apply/funds/migrations/0042_update_json_encoder.py
@@ -6,20 +6,23 @@ import hypha.apply.stream_forms.files
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0041_roundbasereviewform'),
+        ("funds", "0041_roundbasereviewform"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationrevision',
-            name='form_data',
-            field=django.contrib.postgres.fields.jsonb.JSONField(encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder),
+            model_name="applicationrevision",
+            name="form_data",
+            field=django.contrib.postgres.fields.jsonb.JSONField(
+                encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_data',
-            field=django.contrib.postgres.fields.jsonb.JSONField(encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder),
+            model_name="applicationsubmission",
+            name="form_data",
+            field=django.contrib.postgres.fields.jsonb.JSONField(
+                encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0043_auto_20180926_0948.py b/hypha/apply/funds/migrations/0043_auto_20180926_0948.py
index e6679023402b2297450ab963f345e70ce020a966..10081720112aacafa88712d1b28fa374574420c3 100644
--- a/hypha/apply/funds/migrations/0043_auto_20180926_0948.py
+++ b/hypha/apply/funds/migrations/0043_auto_20180926_0948.py
@@ -8,20 +8,1147 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0042_update_json_encoder'),
+        ("funds", "0042_update_json_encoder"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0044_add_named_blocks.py b/hypha/apply/funds/migrations/0044_add_named_blocks.py
index 42b29bbb938bdc080b6311fdd5db81d786f3899b..ebdbb9619a668db01f61ccf76cbaae1eb4774739 100644
--- a/hypha/apply/funds/migrations/0044_add_named_blocks.py
+++ b/hypha/apply/funds/migrations/0044_add_named_blocks.py
@@ -8,20 +8,1171 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0043_auto_20180926_0948'),
+        ("funds", "0043_auto_20180926_0948"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Other', label='Paragraph')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Other", label="Paragraph"),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0045_new_workflow.py b/hypha/apply/funds/migrations/0045_new_workflow.py
index 21dab3f122ff1246d1caff6010534b328b94c5ad..b3918fb3b1626e746747c65e4fd7cb6b99044ee3 100644
--- a/hypha/apply/funds/migrations/0045_new_workflow.py
+++ b/hypha/apply/funds/migrations/0045_new_workflow.py
@@ -4,30 +4,65 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0044_add_named_blocks'),
+        ("funds", "0044_add_named_blocks"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationbase',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="applicationbase",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="applicationsubmission",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='labbase',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="labbase",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="roundbase",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0046_rename_fields.py b/hypha/apply/funds/migrations/0046_rename_fields.py
index 939ed2b2a9f5676b15f05b281d6c49487c5340ee..749994a77f7122042269ca250f773f0204882f4c 100644
--- a/hypha/apply/funds/migrations/0046_rename_fields.py
+++ b/hypha/apply/funds/migrations/0046_rename_fields.py
@@ -8,20 +8,1175 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0045_new_workflow'),
+        ("funds", "0045_new_workflow"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0047_add_markdown.py b/hypha/apply/funds/migrations/0047_add_markdown.py
index 7ff965c11a2b1f68aff241c61cebb166203a4237..edf54adaccd6d4bd4973a8e6d8c0abce0d2ab03e 100644
--- a/hypha/apply/funds/migrations/0047_add_markdown.py
+++ b/hypha/apply/funds/migrations/0047_add_markdown.py
@@ -8,20 +8,1235 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0046_rename_fields'),
+        ("funds", "0046_rename_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0048_add_field_slack_channel.py b/hypha/apply/funds/migrations/0048_add_field_slack_channel.py
index 328a04eed01698c515572b22e55866fec160d902..ddd51d7c7018b8873855dbc7f55bbb0c1a0e0a65 100644
--- a/hypha/apply/funds/migrations/0048_add_field_slack_channel.py
+++ b/hypha/apply/funds/migrations/0048_add_field_slack_channel.py
@@ -4,20 +4,27 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0047_add_markdown'),
+        ("funds", "0047_add_markdown"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='slack_channel',
-            field=models.CharField(blank=True, help_text='The slack #channel for notifications.', max_length=128),
+            model_name="applicationbase",
+            name="slack_channel",
+            field=models.CharField(
+                blank=True,
+                help_text="The slack #channel for notifications.",
+                max_length=128,
+            ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='slack_channel',
-            field=models.CharField(blank=True, help_text='The slack #channel for notifications.', max_length=128),
+            model_name="labbase",
+            name="slack_channel",
+            field=models.CharField(
+                blank=True,
+                help_text="The slack #channel for notifications.",
+                max_length=128,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0049_screening_status.py b/hypha/apply/funds/migrations/0049_screening_status.py
index ad1fb85306d9ac71a70cf6a79071ba401f60a1a3..7f5df07ea6f6c583cf1bd649a543f076de5b9960 100644
--- a/hypha/apply/funds/migrations/0049_screening_status.py
+++ b/hypha/apply/funds/migrations/0049_screening_status.py
@@ -5,25 +5,38 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0048_add_field_slack_channel'),
+        ("funds", "0048_add_field_slack_channel"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ScreeningStatus',
+            name="ScreeningStatus",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.CharField(max_length=128)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.CharField(max_length=128)),
             ],
             options={
-                'verbose_name_plural': 'screening statuses',
+                "verbose_name_plural": "screening statuses",
             },
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='screening_status',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='funds.ScreeningStatus', verbose_name='screening status'),
+            model_name="applicationsubmission",
+            name="screening_status",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="funds.ScreeningStatus",
+                verbose_name="screening status",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0050_roundsandlabs.py b/hypha/apply/funds/migrations/0050_roundsandlabs.py
index c1f65610caac3d58ea047bf60072ee920f5d98c0..8b042039302c2087a0c4d30378ccd6ceb0400f92 100644
--- a/hypha/apply/funds/migrations/0050_roundsandlabs.py
+++ b/hypha/apply/funds/migrations/0050_roundsandlabs.py
@@ -4,21 +4,19 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('funds', '0049_screening_status'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("funds", "0049_screening_status"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='RoundsAndLabs',
-            fields=[
-            ],
+            name="RoundsAndLabs",
+            fields=[],
             options={
-                'proxy': True,
-                'indexes': [],
+                "proxy": True,
+                "indexes": [],
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0051_applicationsubmission_partners.py b/hypha/apply/funds/migrations/0051_applicationsubmission_partners.py
index b50d68de3a24b464e5940ac9b60026f0cd4f6f6f..9f72f539d3f358a93f177aa93e9b6c69d33365d7 100644
--- a/hypha/apply/funds/migrations/0051_applicationsubmission_partners.py
+++ b/hypha/apply/funds/migrations/0051_applicationsubmission_partners.py
@@ -5,16 +5,20 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0050_roundsandlabs'),
+        ("funds", "0050_roundsandlabs"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='partners',
-            field=models.ManyToManyField(blank=True, limit_choices_to={'groups__name': 'Partner'}, related_name='submissions_partner', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="partners",
+            field=models.ManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Partner"},
+                related_name="submissions_partner",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0052_reviewerrole.py b/hypha/apply/funds/migrations/0052_reviewerrole.py
index b1d11e17744a325fc1118799eb0e9fcc1593c9a4..9f87d91cbc18a890f43fd490913d2a745a0bdfc5 100644
--- a/hypha/apply/funds/migrations/0052_reviewerrole.py
+++ b/hypha/apply/funds/migrations/0052_reviewerrole.py
@@ -5,20 +5,43 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0003_customimage_drupal_id'),
-        ('funds', '0051_applicationsubmission_partners'),
+        ("images", "0003_customimage_drupal_id"),
+        ("funds", "0051_applicationsubmission_partners"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ReviewerRole',
+            name="ReviewerRole",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=128)),
-                ('order', models.IntegerField(blank=True, help_text='The order this role should appear in the Update Reviewers form.', null=True)),
-                ('icon', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=128)),
+                (
+                    "order",
+                    models.IntegerField(
+                        blank=True,
+                        help_text="The order this role should appear in the Update Reviewers form.",
+                        null=True,
+                    ),
+                ),
+                (
+                    "icon",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0053_assigned_reviewers_pre.py b/hypha/apply/funds/migrations/0053_assigned_reviewers_pre.py
index 6ffb8a9196f8951db0359d61bd709d81dc8e9407..165c50dcac04ae752c436e876b0194400bf31064 100644
--- a/hypha/apply/funds/migrations/0053_assigned_reviewers_pre.py
+++ b/hypha/apply/funds/migrations/0053_assigned_reviewers_pre.py
@@ -6,38 +6,74 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0052_reviewerrole'),
+        ("funds", "0052_reviewerrole"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='AssignedReviewers',
+            name="AssignedReviewers",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('reviewer', models.ForeignKey(limit_choices_to={'groups__name__in': ['Staff', 'Reviewer']}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
-                ('role', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='funds.ReviewerRole')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "reviewer",
+                    models.ForeignKey(
+                        limit_choices_to={"groups__name__in": ["Staff", "Reviewer"]},
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "role",
+                    models.ForeignKey(
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="funds.ReviewerRole",
+                    ),
+                ),
             ],
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='reviewers',
-            field=models.ManyToManyField(blank=True, limit_choices_to={'groups__name__in': ['Staff', 'Reviewer']}, related_name='submissions_reviewer_OLD', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="reviewers",
+            field=models.ManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name__in": ["Staff", "Reviewer"]},
+                related_name="submissions_reviewer_OLD",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AddField(
-            model_name='assignedreviewers',
-            name='submission',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assigned', to='funds.ApplicationSubmission'),
+            model_name="assignedreviewers",
+            name="submission",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="assigned",
+                to="funds.ApplicationSubmission",
+            ),
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='reviewers_new',
-            field=models.ManyToManyField(blank=True, related_name='submissions_reviewer', through='funds.AssignedReviewers', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="reviewers_new",
+            field=models.ManyToManyField(
+                blank=True,
+                related_name="submissions_reviewer",
+                through="funds.AssignedReviewers",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='assignedreviewers',
-            unique_together={('submission', 'role')},
+            name="assignedreviewers",
+            unique_together={("submission", "role")},
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0054_move_reviewer_data.py b/hypha/apply/funds/migrations/0054_move_reviewer_data.py
index ff09ad0e6c0dcb6511862747b87c7af9e934eec5..9f15d26da5a6e31b410199c2502f9efbfe79d41a 100644
--- a/hypha/apply/funds/migrations/0054_move_reviewer_data.py
+++ b/hypha/apply/funds/migrations/0054_move_reviewer_data.py
@@ -6,24 +6,26 @@ from django.db import migrations
 def move_reviewer_data(apps, schema_editor):
     # We need to move data to the new `reviewers_new` field which will be renamed to `reviewers` in the next migration
     # This data migration is necessary because you cannot add a through model to an existing M2M field
-    ApplicationSubmission = apps.get_model('funds', 'ApplicationSubmission')
-    AssignedReviewers = apps.get_model('funds', 'AssignedReviewers')
+    ApplicationSubmission = apps.get_model("funds", "ApplicationSubmission")
+    AssignedReviewers = apps.get_model("funds", "AssignedReviewers")
     for submission in ApplicationSubmission.objects.all():
         AssignedReviewers.objects.bulk_create(
             AssignedReviewers(
                 submission=submission,
                 reviewer=reviewer,
                 role=None,
-            ) for reviewer in submission.reviewers.all()
+            )
+            for reviewer in submission.reviewers.all()
         )
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0053_assigned_reviewers_pre'),
+        ("funds", "0053_assigned_reviewers_pre"),
     ]
 
     operations = [
-        migrations.RunPython(move_reviewer_data, reverse_code=migrations.RunPython.noop),
+        migrations.RunPython(
+            move_reviewer_data, reverse_code=migrations.RunPython.noop
+        ),
     ]
diff --git a/hypha/apply/funds/migrations/0055_remove_applicationsubmission_reviewers.py b/hypha/apply/funds/migrations/0055_remove_applicationsubmission_reviewers.py
index 394dbb5e3bfb9827d06ae750434acdd76349c453..b435c098f919464e752ea9db29949ee8bbc18ea3 100644
--- a/hypha/apply/funds/migrations/0055_remove_applicationsubmission_reviewers.py
+++ b/hypha/apply/funds/migrations/0055_remove_applicationsubmission_reviewers.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0054_move_reviewer_data'),
+        ("funds", "0054_move_reviewer_data"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='applicationsubmission',
-            name='reviewers',
+            model_name="applicationsubmission",
+            name="reviewers",
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0056_reviewers_rename.py b/hypha/apply/funds/migrations/0056_reviewers_rename.py
index ff88498a72372186bf09539cf79d44f84f1fbf28..3ab18af9e37bb1ee7f7e36d458e4d88679a0b606 100644
--- a/hypha/apply/funds/migrations/0056_reviewers_rename.py
+++ b/hypha/apply/funds/migrations/0056_reviewers_rename.py
@@ -4,15 +4,14 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0055_remove_applicationsubmission_reviewers'),
+        ("funds", "0055_remove_applicationsubmission_reviewers"),
     ]
 
     operations = [
         migrations.RenameField(
-            model_name='applicationsubmission',
-            old_name='reviewers_new',
-            new_name='reviewers',
+            model_name="applicationsubmission",
+            old_name="reviewers_new",
+            new_name="reviewers",
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0057_start_date_blank_null_roundbase.py b/hypha/apply/funds/migrations/0057_start_date_blank_null_roundbase.py
index 4de6a79112c79fe8375d36c1b28fd62fffcdc748..63c0f7c87628f9e56622b5fdf1015f34977cde95 100644
--- a/hypha/apply/funds/migrations/0057_start_date_blank_null_roundbase.py
+++ b/hypha/apply/funds/migrations/0057_start_date_blank_null_roundbase.py
@@ -5,15 +5,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0056_reviewers_rename'),
+        ("funds", "0056_reviewers_rename"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='roundbase',
-            name='start_date',
+            model_name="roundbase",
+            name="start_date",
             field=models.DateField(blank=True, default=datetime.date.today, null=True),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0058_add_group_toggle.py b/hypha/apply/funds/migrations/0058_add_group_toggle.py
index 6f3459e530a8c03e3475ea40dc7defc9cfaee615..a15acdec0247a6fff8c171ffec7fd789daaa1b53 100644
--- a/hypha/apply/funds/migrations/0058_add_group_toggle.py
+++ b/hypha/apply/funds/migrations/0058_add_group_toggle.py
@@ -8,20 +8,1297 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0057_start_date_blank_null_roundbase'),
+        ("funds", "0057_start_date_blank_null_roundbase"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0059_add_community_review_workflow.py b/hypha/apply/funds/migrations/0059_add_community_review_workflow.py
index 81aaae5d5646e6decc021559061a9d4874d30914..a2a4e0e01d33a34cc6644f00c19c1bcc436c2d8f 100644
--- a/hypha/apply/funds/migrations/0059_add_community_review_workflow.py
+++ b/hypha/apply/funds/migrations/0059_add_community_review_workflow.py
@@ -4,30 +4,69 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0058_add_group_toggle'),
+        ("funds", "0058_add_group_toggle"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationbase',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('single_com', 'Request with community review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="applicationbase",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("single_com", "Request with community review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('single_com', 'Request with community review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="applicationsubmission",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("single_com", "Request with community review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='labbase',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('single_com', 'Request with community review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="labbase",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("single_com", "Request with community review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='workflow_name',
-            field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('single_com', 'Request with community review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
+            model_name="roundbase",
+            name="workflow_name",
+            field=models.CharField(
+                choices=[
+                    ("single", "Request"),
+                    ("single_ext", "Request with external review"),
+                    ("single_com", "Request with community review"),
+                    ("double", "Concept & Proposal"),
+                ],
+                default="single",
+                max_length=100,
+                verbose_name="Workflow",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0060_add_duration_type_in_duration_block.py b/hypha/apply/funds/migrations/0060_add_duration_type_in_duration_block.py
index ff2d87470bfcfd2ea1455291be261782a3bb0d3c..b3c0106e576d13a2a44ace5d40fd3642d1b4551d 100644
--- a/hypha/apply/funds/migrations/0060_add_duration_type_in_duration_block.py
+++ b/hypha/apply/funds/migrations/0060_add_duration_type_in_duration_block.py
@@ -8,20 +8,1317 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0059_add_community_review_workflow'),
+        ("funds", "0059_add_community_review_workflow"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0061_prepare_assigned_reviewers_for_data_migration.py b/hypha/apply/funds/migrations/0061_prepare_assigned_reviewers_for_data_migration.py
index 9b6685ae6b5100d44e65cb591827aa0cb1e051e2..69fb75a52bf12a1b130a870db0358f1e4c700a4f 100644
--- a/hypha/apply/funds/migrations/0061_prepare_assigned_reviewers_for_data_migration.py
+++ b/hypha/apply/funds/migrations/0061_prepare_assigned_reviewers_for_data_migration.py
@@ -6,26 +6,38 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('auth', '0009_alter_user_last_name_max_length'),
+        ("auth", "0009_alter_user_last_name_max_length"),
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0060_add_duration_type_in_duration_block'),
+        ("funds", "0060_add_duration_type_in_duration_block"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='assignedreviewers',
-            name='type',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='auth.Group'),
+            model_name="assignedreviewers",
+            name="type",
+            field=models.ForeignKey(
+                null=True, on_delete=django.db.models.deletion.PROTECT, to="auth.Group"
+            ),
         ),
         migrations.AlterField(
-            model_name='assignedreviewers',
-            name='reviewer',
-            field=models.ForeignKey(limit_choices_to={'groups__name__in': ['Staff', 'Reviewer', 'Community reviewer', 'Partner']}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+            model_name="assignedreviewers",
+            name="reviewer",
+            field=models.ForeignKey(
+                limit_choices_to={
+                    "groups__name__in": [
+                        "Staff",
+                        "Reviewer",
+                        "Community reviewer",
+                        "Partner",
+                    ]
+                },
+                on_delete=django.db.models.deletion.CASCADE,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='assignedreviewers',
-            unique_together={('submission', 'role'), ('submission', 'reviewer')},
+            name="assignedreviewers",
+            unique_together={("submission", "role"), ("submission", "reviewer")},
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0062_data_migrate_type_for_assigned_reviewers.py b/hypha/apply/funds/migrations/0062_data_migrate_type_for_assigned_reviewers.py
index a1a00be5388706d64a6e352f792a58fba588b88b..3c4bcb89e93da6cdc0aa269d266061733bdea28a 100644
--- a/hypha/apply/funds/migrations/0062_data_migrate_type_for_assigned_reviewers.py
+++ b/hypha/apply/funds/migrations/0062_data_migrate_type_for_assigned_reviewers.py
@@ -6,24 +6,32 @@ from django.db import migrations
 # importing and creating a future dependency. Changes to Group names should
 # be handled in another migration
 
-STAFF_GROUP_NAME = 'Staff'
-REVIEWER_GROUP_NAME = 'Reviewer'
-PARTNER_GROUP_NAME = 'Partner'
-COMMUNITY_REVIEWER_GROUP_NAME = 'Community reviewer'
+STAFF_GROUP_NAME = "Staff"
+REVIEWER_GROUP_NAME = "Reviewer"
+PARTNER_GROUP_NAME = "Partner"
+COMMUNITY_REVIEWER_GROUP_NAME = "Community reviewer"
 
-REVIEWER_GROUPS = {STAFF_GROUP_NAME,
+REVIEWER_GROUPS = {
+    STAFF_GROUP_NAME,
     REVIEWER_GROUP_NAME,
     COMMUNITY_REVIEWER_GROUP_NAME,
-    PARTNER_GROUP_NAME,}
+    PARTNER_GROUP_NAME,
+}
 
 
 def add_reviewer_type(apps, schema_editor):
-    AssignedReviewer = apps.get_model('funds', 'AssignedReviewers')
-    Group = apps.get_model('auth', 'Group')
-    for assigned in AssignedReviewer.objects.prefetch_related('reviewer__groups'):
-        groups = set(assigned.reviewer.groups.values_list('name', flat=True)) & REVIEWER_GROUPS
+    AssignedReviewer = apps.get_model("funds", "AssignedReviewers")
+    Group = apps.get_model("auth", "Group")
+    for assigned in AssignedReviewer.objects.prefetch_related("reviewer__groups"):
+        groups = (
+            set(assigned.reviewer.groups.values_list("name", flat=True))
+            & REVIEWER_GROUPS
+        )
         if len(groups) > 1:
-            if PARTNER_GROUP_NAME in groups and assigned.reviewer in assigned.submission.partners.all():
+            if (
+                PARTNER_GROUP_NAME in groups
+                and assigned.reviewer in assigned.submission.partners.all()
+            ):
                 groups = {PARTNER_GROUP_NAME}
             elif COMMUNITY_REVIEWER_GROUP_NAME in groups:
                 groups = {COMMUNITY_REVIEWER_GROUP_NAME}
@@ -43,9 +51,8 @@ def add_reviewer_type(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0061_prepare_assigned_reviewers_for_data_migration'),
+        ("funds", "0061_prepare_assigned_reviewers_for_data_migration"),
     ]
 
     operations = [
diff --git a/hypha/apply/funds/migrations/0063_make_reviewer_type_required.py b/hypha/apply/funds/migrations/0063_make_reviewer_type_required.py
index b094dfd8c40d8c1ac9e7cbbc57f171ba59d39931..aba3c16c859527d64af9417468c05bb967e478da 100644
--- a/hypha/apply/funds/migrations/0063_make_reviewer_type_required.py
+++ b/hypha/apply/funds/migrations/0063_make_reviewer_type_required.py
@@ -5,15 +5,16 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0062_data_migrate_type_for_assigned_reviewers'),
+        ("funds", "0062_data_migrate_type_for_assigned_reviewers"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='assignedreviewers',
-            name='type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='auth.Group'),
+            model_name="assignedreviewers",
+            name="type",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT, to="auth.Group"
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0064_group_toggle_end_block.py b/hypha/apply/funds/migrations/0064_group_toggle_end_block.py
index d4dfaee7acc8943270ebb3cea81c12070664b6a1..62977787ab15e9d174bd21c909b9185699fff987 100644
--- a/hypha/apply/funds/migrations/0064_group_toggle_end_block.py
+++ b/hypha/apply/funds/migrations/0064_group_toggle_end_block.py
@@ -9,20 +9,1329 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0063_make_reviewer_type_required'),
+        ("funds", "0063_make_reviewer_type_required"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0065_applicationsubmission_meta_categories.py b/hypha/apply/funds/migrations/0065_applicationsubmission_meta_categories.py
index 55c4507a8cf283f5b762833667dc0e5af8baf1f4..97907e8cee73247cbb9c67f235f6d7a3f937eb66 100644
--- a/hypha/apply/funds/migrations/0065_applicationsubmission_meta_categories.py
+++ b/hypha/apply/funds/migrations/0065_applicationsubmission_meta_categories.py
@@ -4,16 +4,17 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0002_metacategory'),
-        ('funds', '0064_group_toggle_end_block'),
+        ("categories", "0002_metacategory"),
+        ("funds", "0064_group_toggle_end_block"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='meta_categories',
-            field=models.ManyToManyField(blank=True, related_name='submissions', to='categories.MetaCategory'),
+            model_name="applicationsubmission",
+            name="meta_categories",
+            field=models.ManyToManyField(
+                blank=True, related_name="submissions", to="categories.MetaCategory"
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0066_add_stage_to_selected_forms.py b/hypha/apply/funds/migrations/0066_add_stage_to_selected_forms.py
index 4a9e9ae1079eb313361c252d80ad90dbdc4449d0..ff52fa83d844d8bcf75451b003a5095c0e917726 100644
--- a/hypha/apply/funds/migrations/0066_add_stage_to_selected_forms.py
+++ b/hypha/apply/funds/migrations/0066_add_stage_to_selected_forms.py
@@ -4,28 +4,33 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0065_applicationsubmission_meta_categories'),
+        ("funds", "0065_applicationsubmission_meta_categories"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbaseform',
-            name='stage',
-            field=models.PositiveSmallIntegerField(choices=[(1, '1st Stage'), (2, '2nd Stage')], default=1),
+            model_name="applicationbaseform",
+            name="stage",
+            field=models.PositiveSmallIntegerField(
+                choices=[(1, "1st Stage"), (2, "2nd Stage")], default=1
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='labbaseform',
-            name='stage',
-            field=models.PositiveSmallIntegerField(choices=[(1, '1st Stage'), (2, '2nd Stage')], default=1),
+            model_name="labbaseform",
+            name="stage",
+            field=models.PositiveSmallIntegerField(
+                choices=[(1, "1st Stage"), (2, "2nd Stage")], default=1
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='roundbaseform',
-            name='stage',
-            field=models.PositiveSmallIntegerField(choices=[(1, '1st Stage'), (2, '2nd Stage')], default=1),
+            model_name="roundbaseform",
+            name="stage",
+            field=models.PositiveSmallIntegerField(
+                choices=[(1, "1st Stage"), (2, "2nd Stage")], default=1
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0067_data_migration_for_one_form_per_stage.py b/hypha/apply/funds/migrations/0067_data_migration_for_one_form_per_stage.py
index 4fc31985f19f1ae047b9fb2598e6628bc4dd2dea..2b48086ba4b530f16f43e6109a17e7ac94cf2b97 100644
--- a/hypha/apply/funds/migrations/0067_data_migration_for_one_form_per_stage.py
+++ b/hypha/apply/funds/migrations/0067_data_migration_for_one_form_per_stage.py
@@ -10,15 +10,15 @@ def increment_stage_in_forms(forms):
     """
     for index, form in enumerate(forms.all(), 1):
         form.stage = index
-        form.save(update_fields=['stage'])
+        form.save(update_fields=["stage"])
 
 
 def one_application_form_per_stage(apps, schema_editor):
-    Fund = apps.get_model('funds', 'FundType')
-    RequestForPartners = apps.get_model('funds', 'RequestForPartners')
-    Round = apps.get_model('funds', 'Round')
-    SealedRound = apps.get_model('funds', 'SealedRound')
-    LabType = apps.get_model('funds', 'LabType')
+    Fund = apps.get_model("funds", "FundType")
+    RequestForPartners = apps.get_model("funds", "RequestForPartners")
+    Round = apps.get_model("funds", "Round")
+    SealedRound = apps.get_model("funds", "SealedRound")
+    LabType = apps.get_model("funds", "LabType")
 
     for fund in Fund.objects.all():
         if fund.forms.count() > 1:
@@ -42,9 +42,8 @@ def one_application_form_per_stage(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0066_add_stage_to_selected_forms'),
+        ("funds", "0066_add_stage_to_selected_forms"),
     ]
 
     operations = [
diff --git a/hypha/apply/funds/migrations/0068_add_help_link_field.py b/hypha/apply/funds/migrations/0068_add_help_link_field.py
index 1c686e48f40d2edf8d4bf3a78b9f25d03966fab3..605f8a85f0c661ca645cab4e12606a5a7573ea2a 100644
--- a/hypha/apply/funds/migrations/0068_add_help_link_field.py
+++ b/hypha/apply/funds/migrations/0068_add_help_link_field.py
@@ -9,20 +9,1605 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0067_data_migration_for_one_form_per_stage'),
+        ("funds", "0067_data_migration_for_one_form_per_stage"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0068_link_funds_and_labs_to_paf.py b/hypha/apply/funds/migrations/0068_link_funds_and_labs_to_paf.py
index d82e486bc9d22bd22f115278bce93a557d450300..7239c8b4a9fb959378613fe9eba77c3f08f0c52e 100644
--- a/hypha/apply/funds/migrations/0068_link_funds_and_labs_to_paf.py
+++ b/hypha/apply/funds/migrations/0068_link_funds_and_labs_to_paf.py
@@ -5,21 +5,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0018_projectapprovalform'),
-        ('funds', '0067_data_migration_for_one_form_per_stage'),
+        ("application_projects", "0018_projectapprovalform"),
+        ("funds", "0067_data_migration_for_one_form_per_stage"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='approval_form',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='funds', to='application_projects.ProjectApprovalForm'),
+            model_name="applicationbase",
+            name="approval_form",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="funds",
+                to="application_projects.ProjectApprovalForm",
+            ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='approval_form',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='labs', to='application_projects.ProjectApprovalForm'),
+            model_name="labbase",
+            name="approval_form",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="labs",
+                to="application_projects.ProjectApprovalForm",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0069_merge_20190905_0403.py b/hypha/apply/funds/migrations/0069_merge_20190905_0403.py
index 8e20eaf23c46e25add89713b94b50332d7032b00..53ad13c737f192723883da9a982f725d49d9fd10 100644
--- a/hypha/apply/funds/migrations/0069_merge_20190905_0403.py
+++ b/hypha/apply/funds/migrations/0069_merge_20190905_0403.py
@@ -4,11 +4,9 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0068_link_funds_and_labs_to_paf'),
-        ('funds', '0068_add_help_link_field'),
+        ("funds", "0068_link_funds_and_labs_to_paf"),
+        ("funds", "0068_add_help_link_field"),
     ]
 
-    operations = [
-    ]
+    operations = []
diff --git a/hypha/apply/funds/migrations/0070_rename_meta_categories_to_meta_terms.py b/hypha/apply/funds/migrations/0070_rename_meta_categories_to_meta_terms.py
index 44e7746dc8814705577a494905af233a797a25cc..16bd2dcdb9bafac12196b122fec5e84105e0657c 100644
--- a/hypha/apply/funds/migrations/0070_rename_meta_categories_to_meta_terms.py
+++ b/hypha/apply/funds/migrations/0070_rename_meta_categories_to_meta_terms.py
@@ -4,20 +4,21 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('categories', '0003_rename_meta_categories_to_meta_terms'),
-        ('funds', '0069_merge_20190905_0403'),
+        ("categories", "0003_rename_meta_categories_to_meta_terms"),
+        ("funds", "0069_merge_20190905_0403"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='applicationsubmission',
-            name='meta_categories',
+            model_name="applicationsubmission",
+            name="meta_categories",
         ),
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='meta_terms',
-            field=models.ManyToManyField(blank=True, related_name='submissions', to='categories.MetaTerm'),
+            model_name="applicationsubmission",
+            name="meta_terms",
+            field=models.ManyToManyField(
+                blank=True, related_name="submissions", to="categories.MetaTerm"
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0071_update_field_reviewer.py b/hypha/apply/funds/migrations/0071_update_field_reviewer.py
index c657f46e26496aec3f1444cf4dbd916ce76ef182..3184bb3bdaa72589694f7741f97cbaa9ae587895 100644
--- a/hypha/apply/funds/migrations/0071_update_field_reviewer.py
+++ b/hypha/apply/funds/migrations/0071_update_field_reviewer.py
@@ -6,15 +6,20 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0070_rename_meta_categories_to_meta_terms'),
+        ("funds", "0070_rename_meta_categories_to_meta_terms"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='assignedreviewers',
-            name='reviewer',
-            field=models.ForeignKey(limit_choices_to={'groups__name__in': ['Staff', 'Reviewer', 'Community reviewer']}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+            model_name="assignedreviewers",
+            name="reviewer",
+            field=models.ForeignKey(
+                limit_choices_to={
+                    "groups__name__in": ["Staff", "Reviewer", "Community reviewer"]
+                },
+                on_delete=django.db.models.deletion.CASCADE,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0072_add_guide_link_field.py b/hypha/apply/funds/migrations/0072_add_guide_link_field.py
index d2d47cbb5922d053fcef942ede451ae371bd9360..b1c637d981d171e3a5cd3fd085e256a996c3a79f 100644
--- a/hypha/apply/funds/migrations/0072_add_guide_link_field.py
+++ b/hypha/apply/funds/migrations/0072_add_guide_link_field.py
@@ -4,20 +4,23 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0071_update_field_reviewer'),
+        ("funds", "0071_update_field_reviewer"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='guide_link',
-            field=models.URLField(blank=True, help_text='Link to the apply guide.', max_length=255),
+            model_name="applicationbase",
+            name="guide_link",
+            field=models.URLField(
+                blank=True, help_text="Link to the apply guide.", max_length=255
+            ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='guide_link',
-            field=models.URLField(blank=True, help_text='Link to the apply guide.', max_length=255),
+            model_name="labbase",
+            name="guide_link",
+            field=models.URLField(
+                blank=True, help_text="Link to the apply guide.", max_length=255
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0073_reminder.py b/hypha/apply/funds/migrations/0073_reminder.py
index 247398da79e669421e4d7b54b290fb47e3fc53b3..55fc86b4dd305ee0a2f52b5c8d1ec263641033fc 100644
--- a/hypha/apply/funds/migrations/0073_reminder.py
+++ b/hypha/apply/funds/migrations/0073_reminder.py
@@ -6,25 +6,52 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0072_add_guide_link_field'),
+        ("funds", "0072_add_guide_link_field"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Reminder',
+            name="Reminder",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('time', models.DateTimeField()),
-                ('action', models.CharField(choices=[('reviewers_review', 'Remind reviewers to Review')], default='reviewers_review', max_length=50)),
-                ('sent', models.BooleanField(default=False)),
-                ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reminders', to='funds.ApplicationSubmission')),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("time", models.DateTimeField()),
+                (
+                    "action",
+                    models.CharField(
+                        choices=[("reviewers_review", "Remind reviewers to Review")],
+                        default="reviewers_review",
+                        max_length=50,
+                    ),
+                ),
+                ("sent", models.BooleanField(default=False)),
+                (
+                    "submission",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="reminders",
+                        to="funds.ApplicationSubmission",
+                    ),
+                ),
+                (
+                    "user",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
             options={
-                'ordering': ['-time'],
+                "ordering": ["-time"],
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0074_add_word_limit_to_text_blocks.py b/hypha/apply/funds/migrations/0074_add_word_limit_to_text_blocks.py
index 5890f88bcaf36a2d734448ba91e2ed7c8af8ddcb..23b0bd3282163ca320a81a8a69f9c395b37a9cb9 100644
--- a/hypha/apply/funds/migrations/0074_add_word_limit_to_text_blocks.py
+++ b/hypha/apply/funds/migrations/0074_add_word_limit_to_text_blocks.py
@@ -9,20 +9,1641 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0073_reminder'),
+        ("funds", "0073_reminder"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0075_auto_20200629_1707.py b/hypha/apply/funds/migrations/0075_auto_20200629_1707.py
index 96dc9feef8d52bd10911fa83084307c1881503e0..2a10fcbcce57a6e19b7f1ae6a3ee380b57e1e4b1 100644
--- a/hypha/apply/funds/migrations/0075_auto_20200629_1707.py
+++ b/hypha/apply/funds/migrations/0075_auto_20200629_1707.py
@@ -4,15 +4,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0074_add_word_limit_to_text_blocks'),
+        ("funds", "0074_add_word_limit_to_text_blocks"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationbase',
-            name='slack_channel',
-            field=models.CharField(blank=True, help_text='The slack #channel for notifications. If left empty, notifications will go to the default channel.', max_length=128),
+            model_name="applicationbase",
+            name="slack_channel",
+            field=models.CharField(
+                blank=True,
+                help_text="The slack #channel for notifications. If left empty, notifications will go to the default channel.",
+                max_length=128,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0076_multi_input_char_block.py b/hypha/apply/funds/migrations/0076_multi_input_char_block.py
index 0150b4103ff28f5e910ce6d480ea6cdddd18edcc..2d3f42986d638ddc21acf380078ef35f67840e9d 100644
--- a/hypha/apply/funds/migrations/0076_multi_input_char_block.py
+++ b/hypha/apply/funds/migrations/0076_multi_input_char_block.py
@@ -9,20 +9,1753 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0075_auto_20200629_1707'),
+        ("funds", "0075_auto_20200629_1707"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0077_add_determination_stream_field_forms.py b/hypha/apply/funds/migrations/0077_add_determination_stream_field_forms.py
index 7c84636f35de28766e593862d99feac8fdc5b1c0..49f1d31f3cff53dcc5eea299798af02046c0afe7 100644
--- a/hypha/apply/funds/migrations/0077_add_determination_stream_field_forms.py
+++ b/hypha/apply/funds/migrations/0077_add_determination_stream_field_forms.py
@@ -6,50 +6,121 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('determinations', '0010_add_determination_stream_field_forms'),
-        ('funds', '0076_multi_input_char_block'),
+        ("determinations", "0010_add_determination_stream_field_forms"),
+        ("funds", "0076_multi_input_char_block"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='RoundBaseDeterminationForm',
+            name="RoundBaseDeterminationForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='determinations.DeterminationForm')),
-                ('round', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='determination_forms', to='funds.RoundBase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="determinations.DeterminationForm",
+                    ),
+                ),
+                (
+                    "round",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="determination_forms",
+                        to="funds.RoundBase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='LabBaseDeterminationForm',
+            name="LabBaseDeterminationForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='determinations.DeterminationForm')),
-                ('lab', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='determination_forms', to='funds.LabBase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="determinations.DeterminationForm",
+                    ),
+                ),
+                (
+                    "lab",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="determination_forms",
+                        to="funds.LabBase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='ApplicationBaseDeterminationForm',
+            name="ApplicationBaseDeterminationForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('application', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='determination_forms', to='funds.ApplicationBase')),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='determinations.DeterminationForm')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "application",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="determination_forms",
+                        to="funds.ApplicationBase",
+                    ),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="determinations.DeterminationForm",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0078_add_heading_block_to_form_fields_block.py b/hypha/apply/funds/migrations/0078_add_heading_block_to_form_fields_block.py
index 5cfc827f997f462952c2d285c967165d12e04723..587e34554dfa4babc480b95c9621c3154d9919d6 100644
--- a/hypha/apply/funds/migrations/0078_add_heading_block_to_form_fields_block.py
+++ b/hypha/apply/funds/migrations/0078_add_heading_block_to_form_fields_block.py
@@ -9,20 +9,1803 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0077_add_determination_stream_field_forms'),
+        ("funds", "0077_add_determination_stream_field_forms"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0079_add_reviewer_settings_for_submission_access.py b/hypha/apply/funds/migrations/0079_add_reviewer_settings_for_submission_access.py
index 2b4a822bcecd203fc94fc2efc2ca5cc1eba1e65d..804f99abba7703c3039a944df91dd4d936297e90 100644
--- a/hypha/apply/funds/migrations/0079_add_reviewer_settings_for_submission_access.py
+++ b/hypha/apply/funds/migrations/0079_add_reviewer_settings_for_submission_access.py
@@ -5,26 +5,85 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0045_assign_unlock_grouppagepermission'),
-        ('funds', '0078_add_heading_block_to_form_fields_block'),
+        ("wagtailcore", "0045_assign_unlock_grouppagepermission"),
+        ("funds", "0078_add_heading_block_to_form_fields_block"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ReviewerSettings',
+            name="ReviewerSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('submission', models.CharField(choices=[('all', 'All Submissions'), ('reviewed', 'Only reviewed Submissions')], default='all', help_text='Submissions for which reviewers should have access to', max_length=10)),
-                ('state', models.CharField(choices=[('all', 'All States'), ('ext_state_or_higher', 'Only External review and higher')], default='all', help_text='Submissions states for which reviewers should have access to', max_length=20)),
-                ('outcome', models.CharField(choices=[('all', 'All Outcomes'), ('accepted', 'Only Accepted')], default='all', help_text='Submissions outcomes for which reviewers should have access to', max_length=10)),
-                ('assigned', models.BooleanField(default=False, help_text='Submissions for which reviewer is assigned to')),
-                ('use_settings', models.BooleanField(default=False, help_text='Use the above configured variables to filter out submissions')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "submission",
+                    models.CharField(
+                        choices=[
+                            ("all", "All Submissions"),
+                            ("reviewed", "Only reviewed Submissions"),
+                        ],
+                        default="all",
+                        help_text="Submissions for which reviewers should have access to",
+                        max_length=10,
+                    ),
+                ),
+                (
+                    "state",
+                    models.CharField(
+                        choices=[
+                            ("all", "All States"),
+                            ("ext_state_or_higher", "Only External review and higher"),
+                        ],
+                        default="all",
+                        help_text="Submissions states for which reviewers should have access to",
+                        max_length=20,
+                    ),
+                ),
+                (
+                    "outcome",
+                    models.CharField(
+                        choices=[
+                            ("all", "All Outcomes"),
+                            ("accepted", "Only Accepted"),
+                        ],
+                        default="all",
+                        help_text="Submissions outcomes for which reviewers should have access to",
+                        max_length=10,
+                    ),
+                ),
+                (
+                    "assigned",
+                    models.BooleanField(
+                        default=False,
+                        help_text="Submissions for which reviewer is assigned to",
+                    ),
+                ),
+                (
+                    "use_settings",
+                    models.BooleanField(
+                        default=False,
+                        help_text="Use the above configured variables to filter out submissions",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Reviewer Settings',
+                "verbose_name": "Reviewer Settings",
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0080_add_yes_and_default_fields_to_screening_status.py b/hypha/apply/funds/migrations/0080_add_yes_and_default_fields_to_screening_status.py
index c44ee4cc1d4f1808c80c62cf3a5d83023425830b..8a8d24cc690c868d4c2cae50274d4c9805236e96 100644
--- a/hypha/apply/funds/migrations/0080_add_yes_and_default_fields_to_screening_status.py
+++ b/hypha/apply/funds/migrations/0080_add_yes_and_default_fields_to_screening_status.py
@@ -4,20 +4,27 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0079_add_reviewer_settings_for_submission_access'),
+        ("funds", "0079_add_reviewer_settings_for_submission_access"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='screeningstatus',
-            name='default',
-            field=models.BooleanField(default=False, help_text='Only one Yes and No screening status can be set as default.', verbose_name='Default Yes/No'),
+            model_name="screeningstatus",
+            name="default",
+            field=models.BooleanField(
+                default=False,
+                help_text="Only one Yes and No screening status can be set as default.",
+                verbose_name="Default Yes/No",
+            ),
         ),
         migrations.AddField(
-            model_name='screeningstatus',
-            name='yes',
-            field=models.BooleanField(default=False, help_text='Tick mark for Yes otherwise No.', verbose_name='Yes/No'),
+            model_name="screeningstatus",
+            name="yes",
+            field=models.BooleanField(
+                default=False,
+                help_text="Tick mark for Yes otherwise No.",
+                verbose_name="Yes/No",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0081_add_screening_statuses_field.py b/hypha/apply/funds/migrations/0081_add_screening_statuses_field.py
index 61bc366e80b42a793f8bf196ae78b1c55805580c..c966c615e7ba66a79a8ecf095b14320a5e02eb9b 100644
--- a/hypha/apply/funds/migrations/0081_add_screening_statuses_field.py
+++ b/hypha/apply/funds/migrations/0081_add_screening_statuses_field.py
@@ -4,15 +4,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0080_add_yes_and_default_fields_to_screening_status'),
+        ("funds", "0080_add_yes_and_default_fields_to_screening_status"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='screening_statuses',
-            field=models.ManyToManyField(blank=True, related_name='submissions', to='funds.ScreeningStatus'),
+            model_name="applicationsubmission",
+            name="screening_statuses",
+            field=models.ManyToManyField(
+                blank=True, related_name="submissions", to="funds.ScreeningStatus"
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0082_migrate_screening_status_to_screening_statuses.py b/hypha/apply/funds/migrations/0082_migrate_screening_status_to_screening_statuses.py
index 0f2d35214b34f807d345f5f1cf77b192ef08f3b8..39fea40d3eddc41cb0b51e6cd59d1e1e187af6fb 100644
--- a/hypha/apply/funds/migrations/0082_migrate_screening_status_to_screening_statuses.py
+++ b/hypha/apply/funds/migrations/0082_migrate_screening_status_to_screening_statuses.py
@@ -5,28 +5,29 @@ from django.db import migrations
 
 def make_many_screening_statuses(apps, schema_editor):
     """
-        Adds the ScreeningStatus object in ApplicationSubmission.screening_status
-        to the many-to-many relationship in ApplicationSubmission.screening_statuses
+    Adds the ScreeningStatus object in ApplicationSubmission.screening_status
+    to the many-to-many relationship in ApplicationSubmission.screening_statuses
     """
-    ApplicationSubmission = apps.get_model('funds', 'ApplicationSubmission')
+    ApplicationSubmission = apps.get_model("funds", "ApplicationSubmission")
 
-    for submission in ApplicationSubmission.objects.filter(screening_status__isnull=False):
+    for submission in ApplicationSubmission.objects.filter(
+        screening_status__isnull=False
+    ):
         if submission.screening_status:
             submission.screening_statuses.add(submission.screening_status)
 
-    ScreeningStatus = apps.get_model('funds', 'ScreeningStatus')
+    ScreeningStatus = apps.get_model("funds", "ScreeningStatus")
 
     if not ScreeningStatus.objects.filter(yes=True).exists():
-        ScreeningStatus.objects.create(title='Accept', yes=True, default=True)
+        ScreeningStatus.objects.create(title="Accept", yes=True, default=True)
 
     if not ScreeningStatus.objects.filter(yes=False).exists():
-        ScreeningStatus.objects.create(title='Dismiss', yes=False, default=True)
+        ScreeningStatus.objects.create(title="Dismiss", yes=False, default=True)
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0081_add_screening_statuses_field'),
+        ("funds", "0081_add_screening_statuses_field"),
     ]
 
     operations = [
diff --git a/hypha/apply/funds/migrations/0083_remove_screening_status_field.py b/hypha/apply/funds/migrations/0083_remove_screening_status_field.py
index 2ebe21d055f7fd5b932efdab068fdfa68a06f2fe..bc7c07388b81ef5e5f25d8987cbc9fdb97919f05 100644
--- a/hypha/apply/funds/migrations/0083_remove_screening_status_field.py
+++ b/hypha/apply/funds/migrations/0083_remove_screening_status_field.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0082_migrate_screening_status_to_screening_statuses'),
+        ("funds", "0082_migrate_screening_status_to_screening_statuses"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='applicationsubmission',
-            name='screening_status',
+            model_name="applicationsubmission",
+            name="screening_status",
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0084_add_all_except_dismissed_outcome_reviewersettings.py b/hypha/apply/funds/migrations/0084_add_all_except_dismissed_outcome_reviewersettings.py
index 4560254962b2eb53c62a95610a0126b484d2c2a2..054d2d6deff53b807636ad575c9c9860872f522f 100644
--- a/hypha/apply/funds/migrations/0084_add_all_except_dismissed_outcome_reviewersettings.py
+++ b/hypha/apply/funds/migrations/0084_add_all_except_dismissed_outcome_reviewersettings.py
@@ -4,15 +4,23 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0083_remove_screening_status_field'),
+        ("funds", "0083_remove_screening_status_field"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='reviewersettings',
-            name='outcome',
-            field=models.CharField(choices=[('all', 'All Outcomes'), ('all_except_dismissed', 'All Outcomes Except Dismissed'), ('accepted', 'Only Accepted')], default='all', help_text='Submissions outcomes for which reviewers should have access to', max_length=20),
+            model_name="reviewersettings",
+            name="outcome",
+            field=models.CharField(
+                choices=[
+                    ("all", "All Outcomes"),
+                    ("all_except_dismissed", "All Outcomes Except Dismissed"),
+                    ("accepted", "Only Accepted"),
+                ],
+                default="all",
+                help_text="Submissions outcomes for which reviewers should have access to",
+                max_length=20,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0085_add_days_to_duration_block.py b/hypha/apply/funds/migrations/0085_add_days_to_duration_block.py
index 76dee256643bc586779f141f8c6d27f1aff830d3..1656941b9a2faa0f732c29a6d30d5f33318e0d0b 100644
--- a/hypha/apply/funds/migrations/0085_add_days_to_duration_block.py
+++ b/hypha/apply/funds/migrations/0085_add_days_to_duration_block.py
@@ -9,20 +9,1805 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0084_add_all_except_dismissed_outcome_reviewersettings'),
+        ("funds", "0084_add_all_except_dismissed_outcome_reviewersettings"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(label='Leave blank to use the default Category help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Leave blank to use the default Category help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0086_applicationsubmission_summary.py b/hypha/apply/funds/migrations/0086_applicationsubmission_summary.py
index e6e7ed3bc9a2a901bf2dae79eb62179934879ca5..b344d9de86d7c52143eab4109377c476d4088b65 100644
--- a/hypha/apply/funds/migrations/0086_applicationsubmission_summary.py
+++ b/hypha/apply/funds/migrations/0086_applicationsubmission_summary.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0085_add_days_to_duration_block'),
+        ("funds", "0085_add_days_to_duration_block"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='summary',
-            field=models.TextField(blank=True, default='', null=True),
+            model_name="applicationsubmission",
+            name="summary",
+            field=models.TextField(blank=True, default="", null=True),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0087_applicationsettings.py b/hypha/apply/funds/migrations/0087_applicationsettings.py
index f813578d9e6818024f53563163b99b6991ce57d4..2531f35670ca61d1b9863696cc7b9ddacaae64fe 100644
--- a/hypha/apply/funds/migrations/0087_applicationsettings.py
+++ b/hypha/apply/funds/migrations/0087_applicationsettings.py
@@ -6,23 +6,37 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0059_apply_collection_ordering'),
-        ('funds', '0086_applicationsubmission_summary'),
+        ("wagtailcore", "0059_apply_collection_ordering"),
+        ("funds", "0086_applicationsubmission_summary"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ApplicationSettings',
+            name="ApplicationSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('extra_text_round', wagtail.fields.RichTextField(blank=True)),
-                ('extra_text_lab', wagtail.fields.RichTextField(blank=True)),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("extra_text_round", wagtail.fields.RichTextField(blank=True)),
+                ("extra_text_lab", wagtail.fields.RichTextField(blank=True)),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'application settings',
+                "verbose_name": "application settings",
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0088_auto_20210423_1257.py b/hypha/apply/funds/migrations/0088_auto_20210423_1257.py
index d3e96f8dc868a5464510fc1e6569c734cf928ec2..9525bc6115b114498457cfc9fde69b52ad89a065 100644
--- a/hypha/apply/funds/migrations/0088_auto_20210423_1257.py
+++ b/hypha/apply/funds/migrations/0088_auto_20210423_1257.py
@@ -4,20 +4,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0087_applicationsettings'),
+        ("funds", "0087_applicationsettings"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='reminder',
-            name='description',
+            model_name="reminder",
+            name="description",
             field=models.TextField(blank=True),
         ),
         migrations.AddField(
-            model_name='reminder',
-            name='title',
-            field=models.CharField(default='', max_length=60),
+            model_name="reminder",
+            name="title",
+            field=models.CharField(default="", max_length=60),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0089_remove_project_approval_form_refrences.py b/hypha/apply/funds/migrations/0089_remove_project_approval_form_refrences.py
index 9e867993b4db70f553988d065a2a6fc0f553b0b8..319147337d5b0969cbd0a1bb61e434d2e82cc735 100644
--- a/hypha/apply/funds/migrations/0089_remove_project_approval_form_refrences.py
+++ b/hypha/apply/funds/migrations/0089_remove_project_approval_form_refrences.py
@@ -4,22 +4,21 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0088_auto_20210423_1257'),
+        ("funds", "0088_auto_20210423_1257"),
     ]
 
     run_before = [
-        ('application_projects', '0043_remove_project_approval_form'),
+        ("application_projects", "0043_remove_project_approval_form"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='applicationbase',
-            name='approval_form',
+            model_name="applicationbase",
+            name="approval_form",
         ),
         migrations.RemoveField(
-            model_name='labbase',
-            name='approval_form',
+            model_name="labbase",
+            name="approval_form",
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0090_auto_20220111_1314.py b/hypha/apply/funds/migrations/0090_auto_20220111_1314.py
index 6fc3de56c3b4fdeaf6ebde74c72edbd8a3fda4ab..f433c279380aa698ecf70754e4600be53d181a96 100644
--- a/hypha/apply/funds/migrations/0090_auto_20220111_1314.py
+++ b/hypha/apply/funds/migrations/0090_auto_20220111_1314.py
@@ -5,20 +5,23 @@ import hypha.apply.stream_forms.files
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0089_remove_project_approval_form_refrences'),
+        ("funds", "0089_remove_project_approval_form_refrences"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationrevision',
-            name='form_data',
-            field=models.JSONField(encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder),
+            model_name="applicationrevision",
+            name="form_data",
+            field=models.JSONField(
+                encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_data',
-            field=models.JSONField(encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder),
+            model_name="applicationsubmission",
+            name="form_data",
+            field=models.JSONField(
+                encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0091_category_block_label.py b/hypha/apply/funds/migrations/0091_category_block_label.py
index 2af60c71e8ea13b59c7b959b8df443391ceebbb9..4b99259217babeae741ba4df2664104171afac9e 100644
--- a/hypha/apply/funds/migrations/0091_category_block_label.py
+++ b/hypha/apply/funds/migrations/0091_category_block_label.py
@@ -9,20 +9,1807 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0090_auto_20220111_1314'),
+        ("funds", "0090_auto_20220111_1314"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0092_auto_20220308_0827.py b/hypha/apply/funds/migrations/0092_auto_20220308_0827.py
index f8d15f1a5d577063f8d7210068b02d203fd76126..6ada7205129f7722129c0b03d6ab7033b54a9ad8 100644
--- a/hypha/apply/funds/migrations/0092_auto_20220308_0827.py
+++ b/hypha/apply/funds/migrations/0092_auto_20220308_0827.py
@@ -9,20 +9,1819 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0091_category_block_label'),
+        ("funds", "0091_category_block_label"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0093_set_duration_false.py b/hypha/apply/funds/migrations/0093_set_duration_false.py
index 64c23343f27c8beb8ee29c93d625d5f749ba1f8a..5cad22e7a6fd8caf22a79df668c6e983111162fd 100644
--- a/hypha/apply/funds/migrations/0093_set_duration_false.py
+++ b/hypha/apply/funds/migrations/0093_set_duration_false.py
@@ -4,21 +4,21 @@ from django.db import migrations
 
 
 def set_duration_required_false(apps, schema_editor):
-    ApplicationSubmission = apps.get_model('funds', 'ApplicationSubmission')
+    ApplicationSubmission = apps.get_model("funds", "ApplicationSubmission")
     for submission in ApplicationSubmission.objects.all():
         for id, struct_child in enumerate(submission.form_fields):
             struct_value = struct_child.value
-            if struct_child.block_type == 'duration' and struct_value['required'] is None:
-                submission.form_fields[id].value['required'] = False
+            if (
+                struct_child.block_type == "duration"
+                and struct_value["required"] is None
+            ):
+                submission.form_fields[id].value["required"] = False
                 submission.save()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0092_auto_20220308_0827'),
+        ("funds", "0092_auto_20220308_0827"),
     ]
 
-    operations = [
-        migrations.RunPython(set_duration_required_false)
-    ]
+    operations = [migrations.RunPython(set_duration_required_false)]
diff --git a/hypha/apply/funds/migrations/0094_auto_20220406_0800.py b/hypha/apply/funds/migrations/0094_auto_20220406_0800.py
index 24866274d2054a25690ccbdb0a68c7c5b83875aa..489402719dbdaf95f764444152d2fe9e1f280655 100644
--- a/hypha/apply/funds/migrations/0094_auto_20220406_0800.py
+++ b/hypha/apply/funds/migrations/0094_auto_20220406_0800.py
@@ -9,20 +9,1847 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0093_set_duration_false'),
+        ("funds", "0093_set_duration_false"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0095_only_external_review_option.py b/hypha/apply/funds/migrations/0095_only_external_review_option.py
index 04f995f420912d2ff131766d296db84e5becb276..c01cdd7f0d008c29621de6b98568320a4ee85f39 100644
--- a/hypha/apply/funds/migrations/0095_only_external_review_option.py
+++ b/hypha/apply/funds/migrations/0095_only_external_review_option.py
@@ -4,15 +4,23 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0094_auto_20220406_0800'),
+        ("funds", "0094_auto_20220406_0800"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='reviewersettings',
-            name='state',
-            field=models.CharField(choices=[('all', 'All States'), ('ext_state_or_higher', 'Only External review and higher'), ('ext_state_only', 'Only External review')], default='all', help_text='Submissions states for which reviewers should have access to', max_length=20),
+            model_name="reviewersettings",
+            name="state",
+            field=models.CharField(
+                choices=[
+                    ("all", "All States"),
+                    ("ext_state_or_higher", "Only External review and higher"),
+                    ("ext_state_only", "Only External review"),
+                ],
+                default="all",
+                help_text="Submissions states for which reviewers should have access to",
+                max_length=20,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0096_only_active_users.py b/hypha/apply/funds/migrations/0096_only_active_users.py
index 0f0f2267e77bb5e7a7020102385b3253c33abb73..c42cfcb928feca6eb3ca095123862c241620dbec 100644
--- a/hypha/apply/funds/migrations/0096_only_active_users.py
+++ b/hypha/apply/funds/migrations/0096_only_active_users.py
@@ -7,51 +7,92 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0095_only_external_review_option'),
+        ("funds", "0095_only_external_review_option"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer', 'is_active': True}, related_name='applicationbase_reviewers', to=settings.AUTH_USER_MODEL),
+            model_name="applicationbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer", "is_active": True},
+                related_name="applicationbase_reviewers",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff', 'is_active': True}, on_delete=django.db.models.deletion.PROTECT, related_name='submission_lead', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff", "is_active": True},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="submission_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='partners',
-            field=models.ManyToManyField(blank=True, limit_choices_to={'groups__name': 'Partner', 'is_active': True}, related_name='submissions_partner', to=settings.AUTH_USER_MODEL),
+            model_name="applicationsubmission",
+            name="partners",
+            field=models.ManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Partner", "is_active": True},
+                related_name="submissions_partner",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='assignedreviewers',
-            name='reviewer',
-            field=models.ForeignKey(limit_choices_to={'groups__name__in': ['Staff', 'Reviewer', 'Community reviewer'], 'is_active': True}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+            model_name="assignedreviewers",
+            name="reviewer",
+            field=models.ForeignKey(
+                limit_choices_to={
+                    "groups__name__in": ["Staff", "Reviewer", "Community reviewer"],
+                    "is_active": True,
+                },
+                on_delete=django.db.models.deletion.CASCADE,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='labbase',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff', 'is_active': True}, on_delete=django.db.models.deletion.PROTECT, related_name='lab_lead', to=settings.AUTH_USER_MODEL),
+            model_name="labbase",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff", "is_active": True},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="lab_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='labbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer', 'is_active': True}, related_name='labs_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="labbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer", "is_active": True},
+                related_name="labs_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff', 'is_active': True}, on_delete=django.db.models.deletion.PROTECT, related_name='roundbase_lead', to=settings.AUTH_USER_MODEL),
+            model_name="roundbase",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff", "is_active": True},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="roundbase_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer', 'is_active': True}, related_name='roundbase_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="roundbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer", "is_active": True},
+                related_name="roundbase_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0097_applicationbaseexternalreviewform_labbaseexternalreviewform_roundbaseexternalreviewform.py b/hypha/apply/funds/migrations/0097_applicationbaseexternalreviewform_labbaseexternalreviewform_roundbaseexternalreviewform.py
index c6b322bc24f30a12fbd7a2884ef72f042c6856c5..c3de8725d9efbd92f77a01dca8b9252ead910a74 100644
--- a/hypha/apply/funds/migrations/0097_applicationbaseexternalreviewform_labbaseexternalreviewform_roundbaseexternalreviewform.py
+++ b/hypha/apply/funds/migrations/0097_applicationbaseexternalreviewform_labbaseexternalreviewform_roundbaseexternalreviewform.py
@@ -6,50 +6,121 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0024_auto_20220111_1314'),
-        ('funds', '0096_only_active_users'),
+        ("review", "0024_auto_20220111_1314"),
+        ("funds", "0096_only_active_users"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='RoundBaseExternalReviewForm',
+            name="RoundBaseExternalReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.reviewform')),
-                ('round', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='external_review_forms', to='funds.roundbase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="review.reviewform",
+                    ),
+                ),
+                (
+                    "round",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="external_review_forms",
+                        to="funds.roundbase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='LabBaseExternalReviewForm',
+            name="LabBaseExternalReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.reviewform')),
-                ('lab', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='external_review_forms', to='funds.labbase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="review.reviewform",
+                    ),
+                ),
+                (
+                    "lab",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="external_review_forms",
+                        to="funds.labbase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='ApplicationBaseExternalReviewForm',
+            name="ApplicationBaseExternalReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('application', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='external_review_forms', to='funds.applicationbase')),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.reviewform')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "application",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="external_review_forms",
+                        to="funds.applicationbase",
+                    ),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="review.reviewform",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0098_alter_applicationsubmission_submit_time.py b/hypha/apply/funds/migrations/0098_alter_applicationsubmission_submit_time.py
index aecb8fc2219df930535307c414d955e36ec9c1dd..aeb8dbbe8a61a8f51e4b36d7dfab4d1382659f67 100644
--- a/hypha/apply/funds/migrations/0098_alter_applicationsubmission_submit_time.py
+++ b/hypha/apply/funds/migrations/0098_alter_applicationsubmission_submit_time.py
@@ -4,15 +4,17 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0097_applicationbaseexternalreviewform_labbaseexternalreviewform_roundbaseexternalreviewform'),
+        (
+            "funds",
+            "0097_applicationbaseexternalreviewform_labbaseexternalreviewform_roundbaseexternalreviewform",
+        ),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='submit_time',
-            field=models.DateTimeField(verbose_name='submit time'),
+            model_name="applicationsubmission",
+            name="submit_time",
+            field=models.DateTimeField(verbose_name="submit time"),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0099_auto_20220629_1339.py b/hypha/apply/funds/migrations/0099_auto_20220629_1339.py
index c2912a8a6f6407167b3daf97017b94e2679f2fa9..be505367c491b8bc39ec145789012277c7e1e658 100644
--- a/hypha/apply/funds/migrations/0099_auto_20220629_1339.py
+++ b/hypha/apply/funds/migrations/0099_auto_20220629_1339.py
@@ -9,20 +9,1847 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0098_alter_applicationsubmission_submit_time'),
+        ("funds", "0098_alter_applicationsubmission_submit_time"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))]),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0100_alter_applicationbase_labbase_approval_form.py b/hypha/apply/funds/migrations/0100_alter_applicationbase_labbase_approval_form.py
index dd958a461b0b8f9b9443efe656621f30a5d90274..c139efeb991d9b7778c3937210e2d99be13a679c 100644
--- a/hypha/apply/funds/migrations/0100_alter_applicationbase_labbase_approval_form.py
+++ b/hypha/apply/funds/migrations/0100_alter_applicationbase_labbase_approval_form.py
@@ -5,21 +5,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0053_projectapprovalform'),
-        ('funds', '0099_auto_20220629_1339'),
+        ("application_projects", "0053_projectapprovalform"),
+        ("funds", "0099_auto_20220629_1339"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='approval_form',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='funds', to='application_projects.projectapprovalform'),
+            model_name="applicationbase",
+            name="approval_form",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="funds",
+                to="application_projects.projectapprovalform",
+            ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='approval_form',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='labs', to='application_projects.projectapprovalform'),
+            model_name="labbase",
+            name="approval_form",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="labs",
+                to="application_projects.projectapprovalform",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0101_auto_20220722_0844.py b/hypha/apply/funds/migrations/0101_auto_20220722_0844.py
index 274774600d65c849b06b161eb4882285cdb80041..c84ce55df192bfb915f925028c9069ba7d338f19 100644
--- a/hypha/apply/funds/migrations/0101_auto_20220722_0844.py
+++ b/hypha/apply/funds/migrations/0101_auto_20220722_0844.py
@@ -10,40 +10,1885 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0100_alter_applicationbase_labbase_approval_form'),
+        ("funds", "0100_alter_applicationbase_labbase_approval_form"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationbase',
-            name='from_address',
-            field=models.EmailField(blank=True, max_length=255, verbose_name='from address'),
+            model_name="applicationbase",
+            name="from_address",
+            field=models.EmailField(
+                blank=True, max_length=255, verbose_name="from address"
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationbase',
-            name='to_address',
-            field=models.CharField(blank=True, help_text='Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.', max_length=255, validators=[wagtail.contrib.forms.models.validate_to_address], verbose_name='to address'),
+            model_name="applicationbase",
+            name="to_address",
+            field=models.CharField(
+                blank=True,
+                help_text="Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.",
+                max_length=255,
+                validators=[wagtail.contrib.forms.models.validate_to_address],
+                verbose_name="to address",
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))], use_json_field=True),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))], use_json_field=True),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='labbase',
-            name='from_address',
-            field=models.EmailField(blank=True, max_length=255, verbose_name='from address'),
+            model_name="labbase",
+            name="from_address",
+            field=models.EmailField(
+                blank=True, max_length=255, verbose_name="from address"
+            ),
         ),
         migrations.AlterField(
-            model_name='labbase',
-            name='to_address',
-            field=models.CharField(blank=True, help_text='Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.', max_length=255, validators=[wagtail.contrib.forms.models.validate_to_address], verbose_name='to address'),
+            model_name="labbase",
+            name="to_address",
+            field=models.CharField(
+                blank=True,
+                help_text="Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.",
+                max_length=255,
+                validators=[wagtail.contrib.forms.models.validate_to_address],
+                verbose_name="to address",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0102_add_projectapprovalform_to_fundbase_labbase.py b/hypha/apply/funds/migrations/0102_add_projectapprovalform_to_fundbase_labbase.py
index 882caed4c6e476984fe371711a1304045f239190..fc61d1b4d0815ecda76b02d9a9e09c99d7961b33 100644
--- a/hypha/apply/funds/migrations/0102_add_projectapprovalform_to_fundbase_labbase.py
+++ b/hypha/apply/funds/migrations/0102_add_projectapprovalform_to_fundbase_labbase.py
@@ -6,45 +6,92 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0055_alter_project_status_add_pafreviewersrole'),
-        ('funds', '0101_auto_20220722_0844'),
+        ("application_projects", "0055_alter_project_status_add_pafreviewersrole"),
+        ("funds", "0101_auto_20220722_0844"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='applicationbase',
-            name='approval_form',
+            model_name="applicationbase",
+            name="approval_form",
         ),
         migrations.RemoveField(
-            model_name='labbase',
-            name='approval_form',
+            model_name="labbase",
+            name="approval_form",
         ),
         migrations.CreateModel(
-            name='LabBaseProjectApprovalForm',
+            name="LabBaseProjectApprovalForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='application_projects.projectapprovalform')),
-                ('lab', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='approval_forms', to='funds.labbase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="application_projects.projectapprovalform",
+                    ),
+                ),
+                (
+                    "lab",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="approval_forms",
+                        to="funds.labbase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='ApplicationBaseProjectApprovalForm',
+            name="ApplicationBaseProjectApprovalForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('application', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='approval_forms', to='funds.applicationbase')),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='application_projects.projectapprovalform')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "application",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="approval_forms",
+                        to="funds.applicationbase",
+                    ),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="application_projects.projectapprovalform",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0103_alter_screeningstatus.py b/hypha/apply/funds/migrations/0103_alter_screeningstatus.py
index 342cc719c96f40e9a5e50b8e34ddbb33360d15b5..d1813e321054c245431fbb416707fc67c62752e1 100644
--- a/hypha/apply/funds/migrations/0103_alter_screeningstatus.py
+++ b/hypha/apply/funds/migrations/0103_alter_screeningstatus.py
@@ -4,19 +4,25 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0102_add_projectapprovalform_to_fundbase_labbase'),
+        ("funds", "0102_add_projectapprovalform_to_fundbase_labbase"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='screeningstatus',
-            options={'verbose_name': 'Screening Decision', 'verbose_name_plural': 'screening decisions'},
+            name="screeningstatus",
+            options={
+                "verbose_name": "Screening Decision",
+                "verbose_name_plural": "screening decisions",
+            },
         ),
         migrations.AlterField(
-            model_name='screeningstatus',
-            name='default',
-            field=models.BooleanField(default=False, help_text='Only one Yes and No screening decision can be set as default.', verbose_name='Default Yes/No'),
+            model_name="screeningstatus",
+            name="default",
+            field=models.BooleanField(
+                default=False,
+                help_text="Only one Yes and No screening decision can be set as default.",
+                verbose_name="Default Yes/No",
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0104_show_deadline.py b/hypha/apply/funds/migrations/0104_show_deadline.py
index 9806a74848b3d2590cfbc0706161b7cc80204e41..56bde79138840bf700616d6374bae53151c1251e 100644
--- a/hypha/apply/funds/migrations/0104_show_deadline.py
+++ b/hypha/apply/funds/migrations/0104_show_deadline.py
@@ -4,15 +4,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0103_alter_screeningstatus'),
+        ("funds", "0103_alter_screeningstatus"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='show_deadline',
-            field=models.BooleanField(default=True, help_text='Should the deadline date be visible for users.'),
+            model_name="applicationbase",
+            name="show_deadline",
+            field=models.BooleanField(
+                default=True, help_text="Should the deadline date be visible for users."
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0105_applicationbase_activity_digest_recipient_emails.py b/hypha/apply/funds/migrations/0105_applicationbase_activity_digest_recipient_emails.py
index 0ddd1e349f6efb3b9a624e36d91b54ae9180dce3..f94c7cf6c771551ff2655b4dcde13eac22e8d658 100644
--- a/hypha/apply/funds/migrations/0105_applicationbase_activity_digest_recipient_emails.py
+++ b/hypha/apply/funds/migrations/0105_applicationbase_activity_digest_recipient_emails.py
@@ -5,30 +5,29 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0104_show_deadline'),
+        ("funds", "0104_show_deadline"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='activity_digest_recipient_emails',
+            model_name="applicationbase",
+            name="activity_digest_recipient_emails",
             field=django.contrib.postgres.fields.ArrayField(
-                base_field=models.EmailField(default='', max_length=254),
+                base_field=models.EmailField(default="", max_length=254),
                 blank=True,
-                help_text='Comma separated list of emails where a summary of all the activities related to this fund will be sent.',
+                help_text="Comma separated list of emails where a summary of all the activities related to this fund will be sent.",
                 null=True,
                 size=None,
             ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='activity_digest_recipient_emails',
+            model_name="labbase",
+            name="activity_digest_recipient_emails",
             field=django.contrib.postgres.fields.ArrayField(
-                base_field=models.EmailField(default='', max_length=254),
+                base_field=models.EmailField(default="", max_length=254),
                 blank=True,
-                help_text='Comma separated list of emails where a summary of all the activities related to this lab will be sent.',
+                help_text="Comma separated list of emails where a summary of all the activities related to this lab will be sent.",
                 null=True,
                 size=None,
             ),
diff --git a/hypha/apply/funds/migrations/0106_applicationsubmission_is_archive.py b/hypha/apply/funds/migrations/0106_applicationsubmission_is_archive.py
index bc9d299bae6bbfa7e3cfa7ea3ce9729ee4cdc920..755dcd2c509c72b962b8cb77a8672a346c354127 100644
--- a/hypha/apply/funds/migrations/0106_applicationsubmission_is_archive.py
+++ b/hypha/apply/funds/migrations/0106_applicationsubmission_is_archive.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0105_applicationbase_activity_digest_recipient_emails'),
+        ("funds", "0105_applicationbase_activity_digest_recipient_emails"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='is_archive',
+            model_name="applicationsubmission",
+            name="is_archive",
             field=models.BooleanField(default=False),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0107_add_additional_fields_to_funds_labs.py b/hypha/apply/funds/migrations/0107_add_additional_fields_to_funds_labs.py
index 2e043c6d1c71313b2a8df22b189211fc05e2649b..229720beaf91aadf63f799a0935a51db7cc20601 100644
--- a/hypha/apply/funds/migrations/0107_add_additional_fields_to_funds_labs.py
+++ b/hypha/apply/funds/migrations/0107_add_additional_fields_to_funds_labs.py
@@ -6,41 +6,66 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0004_alter_customimage_file_hash'),
-        ('funds', '0106_applicationsubmission_is_archive'),
+        ("images", "0004_alter_customimage_file_hash"),
+        ("funds", "0106_applicationsubmission_is_archive"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationbase',
-            name='description',
+            model_name="applicationbase",
+            name="description",
             field=models.TextField(blank=True, null=True),
         ),
         migrations.AddField(
-            model_name='applicationbase',
-            name='image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.customimage'),
+            model_name="applicationbase",
+            name="image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.customimage",
+            ),
         ),
         migrations.AddField(
-            model_name='applicationbase',
-            name='weight',
-            field=models.PositiveIntegerField(blank=True, default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
+            model_name="applicationbase",
+            name="weight",
+            field=models.PositiveIntegerField(
+                blank=True,
+                default=1,
+                validators=[
+                    django.core.validators.MinValueValidator(1),
+                    django.core.validators.MaxValueValidator(100),
+                ],
+            ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='description',
+            model_name="labbase",
+            name="description",
             field=models.TextField(blank=True, null=True),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.customimage'),
+            model_name="labbase",
+            name="image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.customimage",
+            ),
         ),
         migrations.AddField(
-            model_name='labbase',
-            name='weight',
-            field=models.PositiveIntegerField(blank=True, default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
+            model_name="labbase",
+            name="weight",
+            field=models.PositiveIntegerField(
+                blank=True,
+                default=1,
+                validators=[
+                    django.core.validators.MinValueValidator(1),
+                    django.core.validators.MaxValueValidator(100),
+                ],
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0108_applicationbaseprojectsowform_labbaseprojectsowform.py b/hypha/apply/funds/migrations/0108_applicationbaseprojectsowform_labbaseprojectsowform.py
index 77d3c473102c169d37ea96dcefe5976883565292..c8630fe64122510803aac4e646a1904604eca9a1 100644
--- a/hypha/apply/funds/migrations/0108_applicationbaseprojectsowform_labbaseprojectsowform.py
+++ b/hypha/apply/funds/migrations/0108_applicationbaseprojectsowform_labbaseprojectsowform.py
@@ -6,37 +6,84 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0066_projectsowform'),
-        ('funds', '0107_add_additional_fields_to_funds_labs'),
+        ("application_projects", "0066_projectsowform"),
+        ("funds", "0107_add_additional_fields_to_funds_labs"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='LabBaseProjectSOWForm',
+            name="LabBaseProjectSOWForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='application_projects.projectsowform')),
-                ('lab', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='sow_forms', to='funds.labbase')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="application_projects.projectsowform",
+                    ),
+                ),
+                (
+                    "lab",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="sow_forms",
+                        to="funds.labbase",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='ApplicationBaseProjectSOWForm',
+            name="ApplicationBaseProjectSOWForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('application', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='sow_forms', to='funds.applicationbase')),
-                ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='application_projects.projectsowform')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "application",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="sow_forms",
+                        to="funds.applicationbase",
+                    ),
+                ),
+                (
+                    "form",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="application_projects.projectsowform",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0109_rename_section_text_field.py b/hypha/apply/funds/migrations/0109_rename_section_text_field.py
index 4ab07795d0130f04a7a44afdbb6a757de44ac13b..17c81626c97d98667150910346c64b9691a22223 100644
--- a/hypha/apply/funds/migrations/0109_rename_section_text_field.py
+++ b/hypha/apply/funds/migrations/0109_rename_section_text_field.py
@@ -9,20 +9,1845 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0108_applicationbaseprojectsowform_labbaseprojectsowform'),
+        ("funds", "0108_applicationbaseprojectsowform_labbaseprojectsowform"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))], use_json_field=True),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', hypha.apply.categories.blocks.ModelChooserBlock('categories.Category')), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))], use_json_field=True),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    hypha.apply.categories.blocks.ModelChooserBlock(
+                                        "categories.Category"
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0110_auto_20230418_0644.py b/hypha/apply/funds/migrations/0110_auto_20230418_0644.py
index 802fee46705a0ab33ce4bad3fade171b9265726f..7383a9d15c6070aa958d80cc366df7bfd9cab94a 100644
--- a/hypha/apply/funds/migrations/0110_auto_20230418_0644.py
+++ b/hypha/apply/funds/migrations/0110_auto_20230418_0644.py
@@ -9,20 +9,1845 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0109_rename_section_text_field'),
+        ("funds", "0109_rename_section_text_field"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='applicationform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', wagtail.blocks.ChoiceBlock(choices=hypha.apply.categories.blocks.get_categories_as_choices)), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))], use_json_field=True),
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=hypha.apply.categories.blocks.get_categories_as_choices
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='applicationsubmission',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('category', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(help_text='Leave blank to use the default Category label', label='Label', required=False)), ('help_text', wagtail.blocks.TextBlock(help_text='Leave blank to use the default Category help text', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('category', wagtail.blocks.ChoiceBlock(choices=hypha.apply.categories.blocks.get_categories_as_choices)), ('multi', wagtail.blocks.BooleanBlock(label='Multi select', required=False))], group='Custom')), ('title', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is the title of your application?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='This project name can be changed if a full proposal is requested.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('email', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What email address should we use to contact you?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this email address to communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('full_name', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(default='What is your name?', label='Label')), ('help_text', wagtail.blocks.TextBlock(default='We will use this name when we communicate with you about your proposal.', label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('value', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('address', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom')), ('duration', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('duration_type', wagtail.blocks.ChoiceBlock(choices=[('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], help_text='Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.')), ('info', wagtail.blocks.static_block.StaticBlock())], group='Custom'))], use_json_field=True),
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=hypha.apply.categories.blocks.get_categories_as_choices
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0111_applicationsubmission_search_document_and_more.py b/hypha/apply/funds/migrations/0111_applicationsubmission_search_document_and_more.py
index 285d295c443936ea815fc080d3cec53673942391..48112994d09bc2b68023651b14e6296467003c23 100644
--- a/hypha/apply/funds/migrations/0111_applicationsubmission_search_document_and_more.py
+++ b/hypha/apply/funds/migrations/0111_applicationsubmission_search_document_and_more.py
@@ -9,35 +9,51 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0110_auto_20230418_0644'),
+        ("funds", "0110_auto_20230418_0644"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='applicationsubmission',
-            name='search_document',
+            model_name="applicationsubmission",
+            name="search_document",
             field=django.contrib.postgres.search.SearchVectorField(null=True),
         ),
         migrations.AlterField(
-            model_name='applicationbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer', 'is_active': True}, related_name='%(class)s_reviewers', to=settings.AUTH_USER_MODEL),
+            model_name="applicationbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer", "is_active": True},
+                related_name="%(class)s_reviewers",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='lead',
-            field=models.ForeignKey(limit_choices_to={'groups__name': 'Staff', 'is_active': True}, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)s_lead', to=settings.AUTH_USER_MODEL),
+            model_name="roundbase",
+            name="lead",
+            field=models.ForeignKey(
+                limit_choices_to={"groups__name": "Staff", "is_active": True},
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="%(class)s_lead",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='roundbase',
-            name='reviewers',
-            field=modelcluster.fields.ParentalManyToManyField(blank=True, limit_choices_to={'groups__name': 'Reviewer', 'is_active': True}, related_name='%(class)s_reviewer', to=settings.AUTH_USER_MODEL),
+            model_name="roundbase",
+            name="reviewers",
+            field=modelcluster.fields.ParentalManyToManyField(
+                blank=True,
+                limit_choices_to={"groups__name": "Reviewer", "is_active": True},
+                related_name="%(class)s_reviewer",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AddIndex(
-            model_name='applicationsubmission',
-            index=django.contrib.postgres.indexes.GinIndex(fields=['search_document'], name='funds_appli_search__43a072_gin'),
+            model_name="applicationsubmission",
+            index=django.contrib.postgres.indexes.GinIndex(
+                fields=["search_document"], name="funds_appli_search__43a072_gin"
+            ),
         ),
     ]
diff --git a/hypha/apply/funds/migrations/0112_add_organization_name.py b/hypha/apply/funds/migrations/0112_add_organization_name.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6d6f406fdc4066242117bd587919212b9cfb3fd
--- /dev/null
+++ b/hypha/apply/funds/migrations/0112_add_organization_name.py
@@ -0,0 +1,1915 @@
+# Generated by Django 3.2.20 on 2023-07-26 07:18
+
+from django.db import migrations
+import hypha.apply.categories.blocks
+import hypha.apply.stream_forms.blocks
+import wagtail.blocks
+import wagtail.blocks.static_block
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("funds", "0111_applicationsubmission_search_document_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="applicationform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=hypha.apply.categories.blocks.get_categories_as_choices
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "organization_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
+        ),
+        migrations.AlterField(
+            model_name="applicationsubmission",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "category",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the default Category label",
+                                        label="Label",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="Leave blank to use the default Category help text",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "category",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=hypha.apply.categories.blocks.get_categories_as_choices
+                                    ),
+                                ),
+                                (
+                                    "multi",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Multi select", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "title",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is the title of your application?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="This project name can be changed if a full proposal is requested.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "email",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What email address should we use to contact you?",
+                                        label="Label",
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this email address to communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "full_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(
+                                        default="What is your name?", label="Label"
+                                    ),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        default="We will use this name when we communicate with you about your proposal.",
+                                        label="Help text",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "value",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "organization_name",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "address",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "duration",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "duration_type",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("days", "Days"),
+                                            ("weeks", "Weeks"),
+                                            ("months", "Months"),
+                                        ],
+                                        help_text="Duration type is used to display duration choices in Days, Weeks or Months in application forms. Be careful, changing the duration type in the active round can result in data inconsistency.",
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
+        ),
+    ]
diff --git a/hypha/apply/funds/models/__init__.py b/hypha/apply/funds/models/__init__.py
index 596371197229ee31ea9e4cb3ddcec2a7abf15322..09afb0d64393dea32ea71936fba09eb53d7caaa7 100644
--- a/hypha/apply/funds/models/__init__.py
+++ b/hypha/apply/funds/models/__init__.py
@@ -16,39 +16,39 @@ from .screening import ScreeningStatus
 from .submissions import ApplicationSubmission
 
 __all__ = [
-    'ApplicationForm',
-    'ApplicationRevision',
-    'ApplicationSettings',
-    'ApplicationSubmission',
-    'AssignedReviewers',
-    'Reminder',
-    'ReviewerRole',
-    'ReviewerSettings',
-    'RoundsAndLabs',
-    'ScreeningStatus',
+    "ApplicationForm",
+    "ApplicationRevision",
+    "ApplicationSettings",
+    "ApplicationSubmission",
+    "AssignedReviewers",
+    "Reminder",
+    "ReviewerRole",
+    "ReviewerSettings",
+    "RoundsAndLabs",
+    "ScreeningStatus",
 ]
 
 
 class FundType(ApplicationBase):
-    subpage_types = ['funds.Round']
+    subpage_types = ["funds.Round"]
 
     class Meta:
         verbose_name = _("Fund")
 
 
 class RequestForPartners(ApplicationBase):
-    subpage_types = ['funds.Round', 'funds.SealedRound']
+    subpage_types = ["funds.Round", "funds.SealedRound"]
 
     class Meta:
         verbose_name = _("RFP")
 
 
 class Round(RoundBase):
-    parent_page_types = ['funds.FundType', 'funds.RequestForPartners']
+    parent_page_types = ["funds.FundType", "funds.RequestForPartners"]
 
 
 class SealedRound(RoundBase):
-    parent_page_types = ['funds.RequestForPartners']
+    parent_page_types = ["funds.RequestForPartners"]
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
diff --git a/hypha/apply/funds/models/application_revisions.py b/hypha/apply/funds/models/application_revisions.py
index 803e6f4fa1d196b3bcb46eeefa2b00538580cb30..14508d6f6d42ad6641521f748febd7c36e3a2201 100644
--- a/hypha/apply/funds/models/application_revisions.py
+++ b/hypha/apply/funds/models/application_revisions.py
@@ -11,34 +11,45 @@ from .mixins import AccessFormData
 class ApplicationRevision(BaseStreamForm, AccessFormData, models.Model):
     wagtail_reference_index_ignore = True
 
-    submission = models.ForeignKey('funds.ApplicationSubmission', related_name='revisions', on_delete=models.CASCADE)
+    submission = models.ForeignKey(
+        "funds.ApplicationSubmission",
+        related_name="revisions",
+        on_delete=models.CASCADE,
+    )
     form_data = models.JSONField(encoder=StreamFieldDataEncoder)
     timestamp = models.DateTimeField(auto_now=True)
-    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)
+    author = models.ForeignKey(
+        settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True
+    )
 
     class Meta:
-        ordering = ['-timestamp']
+        ordering = ["-timestamp"]
 
     def __str__(self):
-        return f'Revision for {self.submission.title} by {self.author} '
+        return f"Revision for {self.submission.title} by {self.author} "
 
     @property
     def form_fields(self):
         return self.submission.form_fields
 
     def get_compare_url_to_latest(self):
-        return reverse("funds:submissions:revisions:compare", kwargs={
-            'submission_pk': self.submission.id,
-            'to': self.submission.live_revision.id,
-            'from': self.id,
-        })
+        return reverse(
+            "funds:submissions:revisions:compare",
+            kwargs={
+                "submission_pk": self.submission.id,
+                "to": self.submission.live_revision.id,
+                "from": self.id,
+            },
+        )
 
     def get_absolute_url(self):
         # Compares against the previous revision
         previous_revision = self.submission.revisions.filter(id__lt=self.id).first()
-        return reverse("funds:submissions:revisions:compare", kwargs={
-            'submission_pk': self.submission.id,
-            'to': self.id,
-            'from': previous_revision.id,
-        })
-
+        return reverse(
+            "funds:submissions:revisions:compare",
+            kwargs={
+                "submission_pk": self.submission.id,
+                "to": self.id,
+                "from": previous_revision.id,
+            },
+        )
diff --git a/hypha/apply/funds/models/applications.py b/hypha/apply/funds/models/applications.py
index f4f745a3b0ec1f916b8c8cc8433f0b7197a75f81..b3ac973ab478080218d404783ab991db8743c042 100644
--- a/hypha/apply/funds/models/applications.py
+++ b/hypha/apply/funds/models/applications.py
@@ -58,9 +58,13 @@ class ApplicationBaseManager(PageQuerySet):
     def order_by_end_date(self):
         # OutRef path__startswith with find all descendants of the parent
         # We only have children, so no issues at this time
-        rounds = RoundBase.objects.open().filter(path__startswith=OuterRef('path'))
-        qs = self.public().live().annotate(end_date=Subquery(rounds.values('end_date')[:1]))
-        return qs.order_by('end_date')
+        rounds = RoundBase.objects.open().filter(path__startswith=OuterRef("path"))
+        qs = (
+            self.public()
+            .live()
+            .annotate(end_date=Subquery(rounds.values("end_date")[:1]))
+        )
+        return qs.order_by("end_date")
 
 
 class ApplicationBase(EmailForm, WorkflowStreamForm):  # type: ignore
@@ -71,38 +75,58 @@ class ApplicationBase(EmailForm, WorkflowStreamForm):  # type: ignore
 
     reviewers = ParentalManyToManyField(
         settings.AUTH_USER_MODEL,
-        related_name='%(class)s_reviewers',
+        related_name="%(class)s_reviewers",
         limit_choices_to=LIMIT_TO_REVIEWERS,
         blank=True,
     )
 
-    image = models.ForeignKey('images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
+    image = models.ForeignKey(
+        "images.CustomImage",
+        null=True,
+        blank=True,
+        on_delete=models.SET_NULL,
+        related_name="+",
+    )
 
     description = models.TextField(null=True, blank=True)
 
     # higher the weight means top priority, 100th will be on top.
-    weight = models.PositiveIntegerField(default=1, blank=True, validators=[MinValueValidator(1), MaxValueValidator(100)])
+    weight = models.PositiveIntegerField(
+        default=1, blank=True, validators=[MinValueValidator(1), MaxValueValidator(100)]
+    )
 
-    guide_link = models.URLField(blank=True, max_length=255, help_text=_('Link to the apply guide.'))
+    guide_link = models.URLField(
+        blank=True, max_length=255, help_text=_("Link to the apply guide.")
+    )
 
-    slack_channel = models.CharField(blank=True, max_length=128, help_text=_('The slack #channel for notifications. If left empty, notifications will go to the default channel.'))
+    slack_channel = models.CharField(
+        blank=True,
+        max_length=128,
+        help_text=_(
+            "The slack #channel for notifications. If left empty, notifications will go to the default channel."
+        ),
+    )
     activity_digest_recipient_emails = ArrayField(
-        models.EmailField(default=''),
+        models.EmailField(default=""),
         blank=True,
         null=True,
-        help_text=_('Comma separated list of emails where a summary of all the activities related to this fund will be sent.')
+        help_text=_(
+            "Comma separated list of emails where a summary of all the activities related to this fund will be sent."
+        ),
     )
 
-    show_deadline = models.BooleanField(default=True, help_text=_('Should the deadline date be visible for users.'))
+    show_deadline = models.BooleanField(
+        default=True, help_text=_("Should the deadline date be visible for users.")
+    )
 
     objects = PageManager.from_queryset(ApplicationBaseManager)()
 
-    parent_page_types = ['apply_home.ApplyHomePage']
+    parent_page_types = ["apply_home.ApplyHomePage"]
 
     def get_template(self, request, *args, **kwargs):
         # We want to force children to use our base template
         # template attribute is ignored by children
-        return 'funds/application_base.html'
+        return "funds/application_base.html"
 
     def detail(self):
         # The location to find out more information
@@ -122,9 +146,11 @@ class ApplicationBase(EmailForm, WorkflowStreamForm):  # type: ignore
     def serve(self, request):
         # Manually do what the login_required decorator does so that we can check settings
         if not request.user.is_authenticated and settings.FORCE_LOGIN_FOR_APPLICATION:
-            return redirect('%s?next=%s' % (settings.WAGTAIL_FRONTEND_LOGIN_URL, request.path))
+            return redirect(
+                "%s?next=%s" % (settings.WAGTAIL_FRONTEND_LOGIN_URL, request.path)
+            )
 
-        if hasattr(request, 'is_preview') or not self.open_round:
+        if hasattr(request, "is_preview") or not self.open_round:
             return super().serve(request)
 
         # delegate to the open_round to use the latest form instances
@@ -132,29 +158,31 @@ class ApplicationBase(EmailForm, WorkflowStreamForm):  # type: ignore
         return self.open_round.serve(request)
 
     content_panels = WorkflowStreamForm.content_panels + [
-        FieldPanel('reviewers', widget=forms.CheckboxSelectMultiple),
-        FieldPanel('guide_link'),
-        FieldPanel('description'),
-        FieldPanel('image'),
-        FieldPanel('weight'),
-        FieldPanel('slack_channel'),
-        FieldPanel('activity_digest_recipient_emails'),
-        FieldPanel('show_deadline'),
+        FieldPanel("reviewers", widget=forms.CheckboxSelectMultiple),
+        FieldPanel("guide_link"),
+        FieldPanel("description"),
+        FieldPanel("image"),
+        FieldPanel("weight"),
+        FieldPanel("slack_channel"),
+        FieldPanel("activity_digest_recipient_emails"),
+        FieldPanel("show_deadline"),
     ]
 
-    edit_handler = TabbedInterface([
-        ObjectList(content_panels, heading=_('Content')),
-        EmailForm.email_tab,
-        ObjectList(WorkflowStreamForm.promote_panels, heading=_('Promote')),
-    ])
+    edit_handler = TabbedInterface(
+        [
+            ObjectList(content_panels, heading=_("Content")),
+            EmailForm.email_tab,
+            ObjectList(WorkflowStreamForm.promote_panels, heading=_("Promote")),
+        ]
+    )
 
 
 class RoundBaseManager(PageQuerySet):
     def open(self):
         rounds = self.live().public().specific()
         rounds = rounds.filter(
-            Q(start_date__lte=date.today()) &
-            Q(Q(end_date__isnull=True) | Q(end_date__gte=date.today()))
+            Q(start_date__lte=date.today())
+            & Q(Q(end_date__isnull=True) | Q(end_date__gte=date.today()))
         )
         return rounds
 
@@ -178,12 +206,12 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
     lead = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         limit_choices_to=LIMIT_TO_STAFF,
-        related_name='%(class)s_lead',
+        related_name="%(class)s_lead",
         on_delete=models.PROTECT,
     )
     reviewers = ParentalManyToManyField(
         settings.AUTH_USER_MODEL,
-        related_name='%(class)s_reviewer',
+        related_name="%(class)s_reviewer",
         limit_choices_to=LIMIT_TO_REVIEWERS,
         blank=True,
     )
@@ -192,63 +220,72 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
         blank=True,
         null=True,
         default=date.today,
-        help_text=_('When no end date is provided the round will remain open indefinitely.')
+        help_text=_(
+            "When no end date is provided the round will remain open indefinitely."
+        ),
     )
     sealed = models.BooleanField(default=False)
 
     content_panels = SubmittableStreamForm.content_panels + [
-        FieldPanel('lead'),
-        MultiFieldPanel([
-            FieldRowPanel([
-                FieldPanel('start_date'),
-                FieldPanel('end_date'),
-            ]),
-        ], heading=_('Dates')),
-        FieldPanel('reviewers', widget=forms.CheckboxSelectMultiple),
+        FieldPanel("lead"),
+        MultiFieldPanel(
+            [
+                FieldRowPanel(
+                    [
+                        FieldPanel("start_date"),
+                        FieldPanel("end_date"),
+                    ]
+                ),
+            ],
+            heading=_("Dates"),
+        ),
+        FieldPanel("reviewers", widget=forms.CheckboxSelectMultiple),
         ReadOnlyPanel(
-            'get_workflow_name_display',
-            heading=_('Workflow'),
-            help_text=_('Copied from the fund.'),
+            "get_workflow_name_display",
+            heading=_("Workflow"),
+            help_text=_("Copied from the fund."),
         ),
         # Forms comes from parental key in models/forms.py
         ReadOnlyInlinePanel(
-            'forms',
+            "forms",
             panels=[ReadOnlyPanel("name")],
-            heading=_('Application forms'),
-            help_text=_('Copied from the fund.'),
+            heading=_("Application forms"),
+            help_text=_("Copied from the fund."),
         ),
         ReadOnlyInlinePanel(
-            'review_forms',
+            "review_forms",
             panels=[ReadOnlyPanel("name")],
-            heading=_('Internal Review Form'),
-            help_text=_('Copied from the fund.'),
+            heading=_("Internal Review Form"),
+            help_text=_("Copied from the fund."),
         ),
         ReadOnlyInlinePanel(
-            'external_review_forms',
+            "external_review_forms",
             panels=[ReadOnlyPanel("name")],
-            help_text=_('Copied from the fund.'),
-            heading=_('External Review Form'),
+            help_text=_("Copied from the fund."),
+            heading=_("External Review Form"),
         ),
         ReadOnlyInlinePanel(
-            'determination_forms',
+            "determination_forms",
             panels=[ReadOnlyPanel("name")],
-            help_text=_('Copied from the fund.'),
-            heading=_('Determination Form'),
+            help_text=_("Copied from the fund."),
+            heading=_("Determination Form"),
         ),
     ]
 
-    edit_handler = TabbedInterface([
-        ObjectList(content_panels, heading=_('Content')),
-        ObjectList(SubmittableStreamForm.promote_panels, heading=_('Promote')),
-    ])
+    edit_handler = TabbedInterface(
+        [
+            ObjectList(content_panels, heading=_("Content")),
+            ObjectList(SubmittableStreamForm.promote_panels, heading=_("Promote")),
+        ]
+    )
 
     def get_template(self, request, *args, **kwargs):
         # Make sure all children use the shared template
-        return 'funds/round.html'
+        return "funds/round.html"
 
     def get_landing_page_template(self, request, *args, **kwargs):
         # Make sure all children use the shared template
-        return 'funds/round_landing.html'
+        return "funds/round_landing.html"
 
     @cached_property
     def fund(self):
@@ -264,19 +301,19 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
 
     def save(self, *args, **kwargs):
         is_new = not self.id
-        if is_new and hasattr(self, 'parent_page'):
+        if is_new and hasattr(self, "parent_page"):
             parent_page = self.parent_page[self.__class__][self.title]
             self.workflow_name = parent_page.workflow_name
             self.reviewers = parent_page.reviewers.all()
 
         super().save(*args, **kwargs)
 
-        if is_new and hasattr(self, 'parent_page'):
+        if is_new and hasattr(self, "parent_page"):
             # Would be nice to do this using model clusters as part of the __init__
-            self._copy_forms('forms')
-            self._copy_forms('review_forms')
-            self._copy_forms('external_review_forms')
-            self._copy_forms('determination_forms')
+            self._copy_forms("forms")
+            self._copy_forms("review_forms")
+            self._copy_forms("external_review_forms")
+            self._copy_forms("determination_forms")
 
     def _copy_forms(self, field):
         for form in getattr(self.get_parent().specific, field).all():
@@ -287,9 +324,11 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
         # Create a copy of the existing form object
         new_form = form.form
         new_form.id = None
-        new_form.name = '{} for {} ({})'.format(new_form.name, self.title, self.get_parent().title)
+        new_form.name = "{} for {} ({})".format(
+            new_form.name, self.title, self.get_parent().title
+        )
         new_form.save()
-        if hasattr(form, 'stage'):
+        if hasattr(form, "stage"):
             new_class.objects.create(round=self, form=new_form, stage=form.stage)
         else:
             new_class.objects.create(round=self, form=new_form)
@@ -307,47 +346,52 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
         conflict_query = ()
 
         if self.start_date and self.end_date and self.start_date > self.end_date:
-            raise ValidationError({
-                'end_date': 'End date must come after the start date',
-            })
+            raise ValidationError(
+                {
+                    "end_date": "End date must come after the start date",
+                }
+            )
 
         if self.start_date and self.end_date:
             conflict_query = (
-                Q(start_date__range=[self.start_date, self.end_date]) |
-                Q(end_date__range=[self.start_date, self.end_date]) |
-                Q(start_date__lte=self.start_date, end_date__gte=self.end_date)
+                Q(start_date__range=[self.start_date, self.end_date])
+                | Q(end_date__range=[self.start_date, self.end_date])
+                | Q(start_date__lte=self.start_date, end_date__gte=self.end_date)
             )
         elif self.start_date:
-            conflict_query = (
-                Q(start_date__lte=self.start_date, end_date__isnull=True) |
-                Q(end_date__gte=self.start_date)
-            )
+            conflict_query = Q(
+                start_date__lte=self.start_date, end_date__isnull=True
+            ) | Q(end_date__gte=self.start_date)
 
-        if not self.id and hasattr(self, 'parent_page'):
+        if not self.id and hasattr(self, "parent_page"):
             # Check if the create hook has added the parent page, we aren't an object yet.
             # Ensures we can access related objects during the clean phase instead of save.
-            base_query = RoundBase.objects.child_of(self.parent_page[self.__class__][self.title])
+            base_query = RoundBase.objects.child_of(
+                self.parent_page[self.__class__][self.title]
+            )
         else:
             # don't need parent page, we are an actual object now.
             base_query = RoundBase.objects.sibling_of(self)
 
         if conflict_query:
-            conflicting_rounds = base_query.filter(
-                conflict_query
-            ).exclude(id=self.id)
+            conflicting_rounds = base_query.filter(conflict_query).exclude(id=self.id)
 
             if conflicting_rounds.exists():
-                error_message = mark_safe('Overlaps with the following rounds:<br> {}'.format(
-                    '<br>'.join([
-                        f'<a href="{admin_url(round)}">{round.title}</a>: {round.start_date} - {round.end_date}'
-                        for round in conflicting_rounds]
+                error_message = mark_safe(
+                    "Overlaps with the following rounds:<br> {}".format(
+                        "<br>".join(
+                            [
+                                f'<a href="{admin_url(round)}">{round.title}</a>: {round.start_date} - {round.end_date}'
+                                for round in conflicting_rounds
+                            ]
+                        )
                     )
-                ))
+                )
                 error = {
-                    'start_date': error_message,
+                    "start_date": error_message,
                 }
                 if self.end_date:
-                    error['end_date'] = error_message
+                    error["end_date"] = error_message
 
                 raise ValidationError(error)
 
@@ -357,11 +401,14 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
         try:
             submission_class = self.get_submission_class()
             submission = submission_class.objects.get(id=submission_id)
-            if submission.status in OPEN_CALL_PHASES and self.get_parent() == submission.page:
-                title_block_id = submission.named_blocks.get('title')
+            if (
+                submission.status in OPEN_CALL_PHASES
+                and self.get_parent() == submission.page
+            ):
+                title_block_id = submission.named_blocks.get("title")
                 if title_block_id:
                     field_data = submission.data(title_block_id)
-                    initial_values[title_block_id] = field_data + ' (please edit)'
+                    initial_values[title_block_id] = field_data + " (please edit)"
 
                 for field_id in submission.first_group_normal_text_blocks:
                     field_data = submission.data(field_id)
@@ -370,9 +417,11 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
                 # Select first item in the Group toggle blocks
                 for toggle_block_id, toggle_field in submission.group_toggle_blocks:
                     try:
-                        initial_values[toggle_block_id] = toggle_field.value['choices'][0]
+                        initial_values[toggle_block_id] = toggle_field.value["choices"][
+                            0
+                        ]
                     except IndexError:
-                        initial_values[toggle_block_id] = 'yes'
+                        initial_values[toggle_block_id] = "yes"
                     except KeyError:
                         pass
 
@@ -387,47 +436,53 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
         if submission_id:
             initial_values = self.get_initial_data_open_call_submission(submission_id)
             if initial_values:
-                form_parameters['initial'] = initial_values
+                form_parameters["initial"] = initial_values
 
         return form_parameters
 
     def get_form(self, *args, **kwargs):
-        draft = kwargs.pop('draft', False)
-        user = kwargs.get('user')
+        draft = kwargs.pop("draft", False)
+        user = kwargs.get("user")
         try:
             form_class = self.get_form_class(draft, args[0], user=user)
         except IndexError:
             form_class = self.get_form_class(draft, user=user)
-        submission_id = kwargs.pop('submission_id', None)
+        submission_id = kwargs.pop("submission_id", None)
         form_params = self.get_form_parameters(submission_id=submission_id)
         form_params.update(kwargs)
         return form_class(*args, **form_params)
 
     def serve(self, request, *args, **kwargs):
-        if hasattr(request, 'is_preview') or hasattr(request, 'show_round'):
+        if hasattr(request, "is_preview") or hasattr(request, "show_round"):
             # Overriding serve method to pass submission id to get_form method
-            copy_open_submission = request.GET.get('open_call_submission')
-            if request.method == 'POST':
-                draft = request.POST.get('draft', False)
-                form = self.get_form(request.POST, request.FILES, page=self, user=request.user, draft=draft)
+            copy_open_submission = request.GET.get("open_call_submission")
+            if request.method == "POST":
+                draft = request.POST.get("draft", False)
+                form = self.get_form(
+                    request.POST,
+                    request.FILES,
+                    page=self,
+                    user=request.user,
+                    draft=draft,
+                )
 
                 if form.is_valid():
                     form_submission = self.process_form_submission(form, draft=draft)
                     # Required for django-file-form: delete temporary files for the new files
                     # that are uploaded.
                     form.delete_temporary_files()
-                    return self.render_landing_page(request, form_submission, *args, **kwargs)
+                    return self.render_landing_page(
+                        request, form_submission, *args, **kwargs
+                    )
             else:
-                form = self.get_form(page=self, user=request.user, submission_id=copy_open_submission)
+                form = self.get_form(
+                    page=self, user=request.user, submission_id=copy_open_submission
+                )
 
             context = self.get_context(request)
-            context['form'] = form
-            context['show_all_group_fields'] = True if copy_open_submission else False
-            return render(
-                request,
-                self.get_template(request),
-                context
-            )
+            context["form"] = form
+            context["show_all_group_fields"] = True if copy_open_submission else False
+            return render(request, self.get_template(request), context)
 
         # We hide the round as only the open round is used which is displayed through the
         # fund page
@@ -444,51 +499,67 @@ class LabBase(EmailForm, WorkflowStreamForm, SubmittableStreamForm):  # type: ig
     lead = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         limit_choices_to=LIMIT_TO_STAFF,
-        related_name='lab_lead',
+        related_name="lab_lead",
         on_delete=models.PROTECT,
     )
     reviewers = ParentalManyToManyField(
         settings.AUTH_USER_MODEL,
-        related_name='labs_reviewer',
+        related_name="labs_reviewer",
         limit_choices_to=LIMIT_TO_REVIEWERS,
         blank=True,
     )
 
-    image = models.ForeignKey('images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
+    image = models.ForeignKey(
+        "images.CustomImage",
+        null=True,
+        blank=True,
+        on_delete=models.SET_NULL,
+        related_name="+",
+    )
 
     description = models.TextField(null=True, blank=True)
 
     # higher the weight means top priority, 100th will be on top.
-    weight = models.PositiveIntegerField(default=1, blank=True, validators=[MinValueValidator(1), MaxValueValidator(100)])
+    weight = models.PositiveIntegerField(
+        default=1, blank=True, validators=[MinValueValidator(1), MaxValueValidator(100)]
+    )
 
-    guide_link = models.URLField(blank=True, max_length=255, help_text=_('Link to the apply guide.'))
+    guide_link = models.URLField(
+        blank=True, max_length=255, help_text=_("Link to the apply guide.")
+    )
 
-    slack_channel = models.CharField(blank=True, max_length=128, help_text=_('The slack #channel for notifications.'))
+    slack_channel = models.CharField(
+        blank=True, max_length=128, help_text=_("The slack #channel for notifications.")
+    )
     activity_digest_recipient_emails = ArrayField(
-        models.EmailField(default=''),
+        models.EmailField(default=""),
         blank=True,
         null=True,
-        help_text=_('Comma separated list of emails where a summary of all the activities related to this lab will be sent.')
+        help_text=_(
+            "Comma separated list of emails where a summary of all the activities related to this lab will be sent."
+        ),
     )
-    parent_page_types = ['apply_home.ApplyHomePage']
+    parent_page_types = ["apply_home.ApplyHomePage"]
     subpage_types = []  # type: ignore
 
     content_panels = WorkflowStreamForm.content_panels + [
-        FieldPanel('lead'),
-        FieldPanel('reviewers', widget=forms.CheckboxSelectMultiple),
-        FieldPanel('guide_link'),
-        FieldPanel('description'),
-        FieldPanel('image'),
-        FieldPanel('weight'),
-        FieldPanel('slack_channel'),
-        FieldPanel('activity_digest_recipient_emails'),
+        FieldPanel("lead"),
+        FieldPanel("reviewers", widget=forms.CheckboxSelectMultiple),
+        FieldPanel("guide_link"),
+        FieldPanel("description"),
+        FieldPanel("image"),
+        FieldPanel("weight"),
+        FieldPanel("slack_channel"),
+        FieldPanel("activity_digest_recipient_emails"),
     ]
 
-    edit_handler = TabbedInterface([
-        ObjectList(content_panels, heading=_('Content')),
-        EmailForm.email_tab,
-        ObjectList(WorkflowStreamForm.promote_panels, heading=_('Promote')),
-    ])
+    edit_handler = TabbedInterface(
+        [
+            ObjectList(content_panels, heading=_("Content")),
+            EmailForm.email_tab,
+            ObjectList(WorkflowStreamForm.promote_panels, heading=_("Promote")),
+        ]
+    )
 
     def detail(self):
         # The location to find out more information
@@ -505,7 +576,7 @@ class LabBase(EmailForm, WorkflowStreamForm, SubmittableStreamForm):  # type: ig
         return self.live
 
     def get_form(self, *args, **kwargs):
-        user = kwargs.get('user')
+        user = kwargs.get("user")
         form_class = self.get_form_class(user=user)
         form_params = self.get_form_parameters()
         form_params.update(kwargs)
@@ -515,24 +586,28 @@ class LabBase(EmailForm, WorkflowStreamForm, SubmittableStreamForm):  # type: ig
     def serve(self, request, *args, **kwargs):
         # Manually do what the login_required decorator does so that we can check settings
         if not request.user.is_authenticated and settings.FORCE_LOGIN_FOR_APPLICATION:
-            return redirect('%s?next=%s' % (settings.WAGTAIL_FRONTEND_LOGIN_URL, request.path))
+            return redirect(
+                "%s?next=%s" % (settings.WAGTAIL_FRONTEND_LOGIN_URL, request.path)
+            )
 
-        if request.method == 'POST':
-            form = self.get_form(request.POST, request.FILES, page=self, user=request.user)
-            draft = request.POST.get('draft', False)
+        if request.method == "POST":
+            form = self.get_form(
+                request.POST, request.FILES, page=self, user=request.user
+            )
+            draft = request.POST.get("draft", False)
             if form.is_valid():
-                form_submission = SubmittableStreamForm.process_form_submission(self, form, draft=draft)
-                return self.render_landing_page(request, form_submission, *args, **kwargs)
+                form_submission = SubmittableStreamForm.process_form_submission(
+                    self, form, draft=draft
+                )
+                return self.render_landing_page(
+                    request, form_submission, *args, **kwargs
+                )
         else:
             form = self.get_form(page=self, user=request.user)
 
         context = self.get_context(request)
-        context['form'] = form
-        return TemplateResponse(
-            request,
-            self.get_template(request),
-            context
-        )
+        context["form"] = form
+        return TemplateResponse(request, self.get_template(request), context)
 
 
 class RoundsAndLabsQueryset(PageQuerySet):
@@ -540,7 +615,10 @@ class RoundsAndLabsQueryset(PageQuerySet):
         return self.filter(start_date__gt=date.today())
 
     def open(self):
-        return self.filter(Q(end_date__gte=date.today(), start_date__lte=date.today()) | Q(end_date__isnull=True))
+        return self.filter(
+            Q(end_date__gte=date.today(), start_date__lte=date.today())
+            | Q(end_date__isnull=True)
+        )
 
     def closed(self):
         return self.filter(end_date__lt=date.today())
@@ -559,49 +637,68 @@ class RoundsAndLabsProgressQueryset(RoundsAndLabsQueryset):
 
 class RoundsAndLabsManager(PageManager):
     def get_queryset(self, base_queryset=RoundsAndLabsQueryset):
-        funds = ApplicationBase.objects.filter(path=OuterRef('parent_path'))
-
-        return base_queryset(self.model, using=self._db).type(SubmittableStreamForm).annotate(
-            lead=Coalesce(
-                F('roundbase__lead__full_name'),
-                F('labbase__lead__full_name'),
-            ),
-            start_date=F('roundbase__start_date'),
-            end_date=F('roundbase__end_date'),
-            parent_path=Left(F('path'), Length('path') - ApplicationBase.steplen, output_field=CharField()),
-            fund=Subquery(funds.values('title')[:1]),
-            lead_pk=Coalesce(
-                F('roundbase__lead__pk'),
-                F('labbase__lead__pk'),
-            ),
+        funds = ApplicationBase.objects.filter(path=OuterRef("parent_path"))
+
+        return (
+            base_queryset(self.model, using=self._db)
+            .type(SubmittableStreamForm)
+            .annotate(
+                lead=Coalesce(
+                    F("roundbase__lead__full_name"),
+                    F("labbase__lead__full_name"),
+                ),
+                start_date=F("roundbase__start_date"),
+                end_date=F("roundbase__end_date"),
+                parent_path=Left(
+                    F("path"),
+                    Length("path") - ApplicationBase.steplen,
+                    output_field=CharField(),
+                ),
+                fund=Subquery(funds.values("title")[:1]),
+                lead_pk=Coalesce(
+                    F("roundbase__lead__pk"),
+                    F("labbase__lead__pk"),
+                ),
+            )
         )
 
     def with_progress(self):
-        submissions = ApplicationSubmission.objects.filter(Q(round=OuterRef('pk')) | Q(page=OuterRef('pk'))).current()
+        submissions = ApplicationSubmission.objects.filter(
+            Q(round=OuterRef("pk")) | Q(page=OuterRef("pk"))
+        ).current()
         closed_submissions = submissions.inactive()
 
-        return self.get_queryset(RoundsAndLabsProgressQueryset).annotate(
-            total_submissions=Coalesce(
-                Subquery(
-                    submissions.exclude_draft().values('round').annotate(count=Count('pk')).values('count'),
-                    output_field=IntegerField(),
+        return (
+            self.get_queryset(RoundsAndLabsProgressQueryset)
+            .annotate(
+                total_submissions=Coalesce(
+                    Subquery(
+                        submissions.exclude_draft()
+                        .values("round")
+                        .annotate(count=Count("pk"))
+                        .values("count"),
+                        output_field=IntegerField(),
+                    ),
+                    0,
                 ),
-                0,
-            ),
-            closed_submissions=Coalesce(
-                Subquery(
-                    closed_submissions.exclude_draft().values('round').annotate(count=Count('pk')).values('count'),
-                    output_field=IntegerField(),
+                closed_submissions=Coalesce(
+                    Subquery(
+                        closed_submissions.exclude_draft()
+                        .values("round")
+                        .annotate(count=Count("pk"))
+                        .values("count"),
+                        output_field=IntegerField(),
+                    ),
+                    0,
                 ),
-                0,
-            ),
-        ).annotate(
-            progress=Case(
-                When(total_submissions=0, then=None),
-                default=(F('closed_submissions') * 100) / F('total_submissions'),
-                output_fields=FloatField(),
             )
-
+            .annotate(
+                progress=Case(
+                    When(total_submissions=0, then=None),
+                    default=(F("closed_submissions") * 100) / F("total_submissions"),
+                    output_fields=FloatField(),
+                )
+            )
         )
 
     def open(self):
@@ -622,6 +719,7 @@ class RoundsAndLabs(Page):
     This behaves as a useful way to get all the rounds and labs that are defined
     in the project regardless of how they are implemented (lab/round/sealed_round)
     """
+
     class Meta:
         proxy = True
 
@@ -641,23 +739,25 @@ class RoundsAndLabs(Page):
     objects = RoundsAndLabsManager()
 
     def save(self, *args, **kwargs):
-        raise NotImplementedError('Do not save through this model')
+        raise NotImplementedError("Do not save through this model")
 
 
 @register_setting
 class ApplicationSettings(BaseSiteSetting):
-
     wagtail_reference_index_ignore = True
 
     class Meta:
-        verbose_name = 'application settings'
+        verbose_name = "application settings"
 
     extra_text_round = RichTextField(blank=True)
     extra_text_lab = RichTextField(blank=True)
 
     panels = [
-        MultiFieldPanel([
-            FieldPanel('extra_text_round'),
-            FieldPanel('extra_text_lab'),
-        ], 'extra text on application landing page'),
+        MultiFieldPanel(
+            [
+                FieldPanel("extra_text_round"),
+                FieldPanel("extra_text_lab"),
+            ],
+            "extra text on application landing page",
+        ),
     ]
diff --git a/hypha/apply/funds/models/assigned_reviewers.py b/hypha/apply/funds/models/assigned_reviewers.py
index 21e9cfac0b2ab82589bfca086ed250a6f5a5348d..8dd0900d86ec0194b5448e2f9a9d5572799158a6 100644
--- a/hypha/apply/funds/models/assigned_reviewers.py
+++ b/hypha/apply/funds/models/assigned_reviewers.py
@@ -26,29 +26,34 @@ class AssignedReviewersQuerySet(models.QuerySet):
             models.When(type__name=review_type, then=models.Value(i))
             for i, review_type in enumerate(review_order)
         ]
-        return self.exclude(
-            # Remove people from the list who are opinionated but
-            # didn't submit a review, they appear elsewhere
-            Q(opinions__isnull=False) &
-            Q(Q(review__isnull=True) | Q(review__is_draft=True))
-        ).annotate(
-            type_order=models.Case(
-                *ordering,
-                output_field=models.IntegerField(),
-            ),
-            has_review=models.Case(
-                models.When(review__isnull=True, then=models.Value(1)),
-                models.When(review__is_draft=True, then=models.Value(1)),
-                default=models.Value(0),
-                output_field=models.IntegerField(),
+        return (
+            self.exclude(
+                # Remove people from the list who are opinionated but
+                # didn't submit a review, they appear elsewhere
+                Q(opinions__isnull=False)
+                & Q(Q(review__isnull=True) | Q(review__is_draft=True))
+            )
+            .annotate(
+                type_order=models.Case(
+                    *ordering,
+                    output_field=models.IntegerField(),
+                ),
+                has_review=models.Case(
+                    models.When(review__isnull=True, then=models.Value(1)),
+                    models.When(review__is_draft=True, then=models.Value(1)),
+                    default=models.Value(0),
+                    output_field=models.IntegerField(),
+                ),
+            )
+            .order_by(
+                "type_order",
+                "has_review",
+                F("role__order").asc(nulls_last=True),
+            )
+            .select_related(
+                "reviewer",
+                "role",
             )
-        ).order_by(
-            'type_order',
-            'has_review',
-            F('role__order').asc(nulls_last=True),
-        ).select_related(
-            'reviewer',
-            'role',
         )
 
     def with_roles(self):
@@ -59,8 +64,8 @@ class AssignedReviewersQuerySet(models.QuerySet):
 
     def reviewed(self):
         return self.filter(
-            Q(opinions__opinion=AGREE) |
-            Q(Q(review__isnull=False) & Q(review__is_draft=False))
+            Q(opinions__opinion=AGREE)
+            | Q(Q(review__isnull=False) & Q(review__is_draft=False))
         ).distinct()
 
     def draft_reviewed(self):
@@ -85,7 +90,9 @@ class AssignedReviewersQuerySet(models.QuerySet):
         return self.filter(type__name=STAFF_GROUP_NAME)
 
     def get_or_create_for_user(self, submission, reviewer):
-        groups = set(reviewer.groups.values_list('name', flat=True)) & set(REVIEW_GROUPS)
+        groups = set(reviewer.groups.values_list("name", flat=True)) & set(
+            REVIEW_GROUPS
+        )
         if len(groups) > 1:
             if COMMUNITY_REVIEWER_GROUP_NAME in groups:
                 groups = {COMMUNITY_REVIEWER_GROUP_NAME}
@@ -104,7 +111,7 @@ class AssignedReviewersQuerySet(models.QuerySet):
         return self.get_or_create(
             submission=submission,
             reviewer=reviewer,
-            defaults={'type': group},
+            defaults={"type": group},
         )
 
     def get_or_create_staff(self, submission, reviewer):
@@ -123,14 +130,17 @@ class AssignedReviewersQuerySet(models.QuerySet):
                     role=None,
                     reviewer=reviewer,
                     type=group,
-                ) for reviewer in reviewers
+                )
+                for reviewer in reviewers
             ],
-            ignore_conflicts=True
+            ignore_conflicts=True,
         )
 
     def update_role(self, role, reviewer, *submissions):
         # Remove role who didn't review
-        self.filter(submission__in=submissions, role=role).never_tried_to_review().delete()
+        self.filter(
+            submission__in=submissions, role=role
+        ).never_tried_to_review().delete()
         # Anyone else we remove their role
         self.filter(submission__in=submissions, role=role).update(role=None)
         # Create/update the new role reviewers
@@ -139,12 +149,11 @@ class AssignedReviewersQuerySet(models.QuerySet):
             self.update_or_create(
                 submission=submission,
                 reviewer=reviewer,
-                defaults={'role': role, 'type': group},
+                defaults={"role": role, "type": group},
             )
 
 
 class AssignedReviewers(models.Model):
-
     wagtail_reference_index_ignore = True
 
     reviewer = models.ForeignKey(
@@ -153,17 +162,15 @@ class AssignedReviewers(models.Model):
         limit_choices_to=LIMIT_TO_REVIEWER_GROUPS,
     )
     type = models.ForeignKey(
-        'auth.Group',
+        "auth.Group",
         on_delete=models.PROTECT,
     )
     submission = models.ForeignKey(
-        'funds.ApplicationSubmission',
-        related_name='assigned',
-        on_delete=models.CASCADE
+        "funds.ApplicationSubmission", related_name="assigned", on_delete=models.CASCADE
     )
     role = models.ForeignKey(
-        'funds.ReviewerRole',
-        related_name='+',
+        "funds.ReviewerRole",
+        related_name="+",
         on_delete=models.SET_NULL,
         null=True,
     )
@@ -171,13 +178,13 @@ class AssignedReviewers(models.Model):
     objects = AssignedReviewersQuerySet.as_manager()
 
     class Meta:
-        unique_together = (('submission', 'role'), ('submission', 'reviewer'))
+        unique_together = (("submission", "role"), ("submission", "reviewer"))
 
     def __hash__(self):
         return hash(self.pk)
 
     def __str__(self):
-        return f'{self.reviewer}'
+        return f"{self.reviewer}"
 
     def __eq__(self, other):
         if not isinstance(other, models.Model):
@@ -187,7 +194,9 @@ class AssignedReviewers(models.Model):
         my_pk = self.pk
         if my_pk is None:
             return self is other
-        return all([
-            self.reviewer_id == other.reviewer_id,
-            self.role_id == other.role_id,
-        ])
+        return all(
+            [
+                self.reviewer_id == other.reviewer_id,
+                self.role_id == other.role_id,
+            ]
+        )
diff --git a/hypha/apply/funds/models/forms.py b/hypha/apply/funds/models/forms.py
index 9952020c2a9b750c88b199204755c6ba9d62e284..39ad01c0d69bd4dcb30c1649900eac426326e676 100644
--- a/hypha/apply/funds/models/forms.py
+++ b/hypha/apply/funds/models/forms.py
@@ -15,8 +15,8 @@ class ApplicationForm(models.Model):
     form_fields = StreamField(ApplicationCustomFormFieldsBlock(), use_json_field=True)
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('form_fields'),
+        FieldPanel("name"),
+        FieldPanel("form_fields"),
     ]
 
     def __str__(self):
@@ -27,15 +27,15 @@ class AbstractRelatedForm(Orderable):
     FIRST_STAGE = 1
     SECOND_STAGE = 2
     STAGE_CHOICES = [
-        (FIRST_STAGE, '1st Stage'),
-        (SECOND_STAGE, '2nd Stage'),
+        (FIRST_STAGE, "1st Stage"),
+        (SECOND_STAGE, "2nd Stage"),
     ]
-    form = models.ForeignKey('ApplicationForm', on_delete=models.PROTECT)
+    form = models.ForeignKey("ApplicationForm", on_delete=models.PROTECT)
     stage = models.PositiveSmallIntegerField(choices=STAGE_CHOICES)
 
     panels = [
-        FilteredFieldPanel('form', filter_query={'roundbaseform__isnull': True}),
-        FieldPanel('stage'),
+        FilteredFieldPanel("form", filter_query={"roundbaseform__isnull": True}),
+        FieldPanel("stage"),
     ]
 
     @property
@@ -49,7 +49,7 @@ class AbstractRelatedForm(Orderable):
         try:
             if self.fields == other.fields and self.sort_order == other.sort_order:
                 # If the objects are saved to db. pk should also be compared
-                if hasattr(other, 'pk') and hasattr(self, 'pk'):
+                if hasattr(other, "pk") and hasattr(self, "pk"):
                     return self.pk == other.pk
                 return True
             return False
@@ -65,15 +65,15 @@ class AbstractRelatedForm(Orderable):
 
 
 class ApplicationBaseForm(AbstractRelatedForm):
-    application = ParentalKey('ApplicationBase', related_name='forms')
+    application = ParentalKey("ApplicationBase", related_name="forms")
 
 
 class RoundBaseForm(AbstractRelatedForm):
-    round = ParentalKey('RoundBase', related_name='forms')
+    round = ParentalKey("RoundBase", related_name="forms")
 
 
 class LabBaseForm(AbstractRelatedForm):
-    lab = ParentalKey('LabBase', related_name='forms')
+    lab = ParentalKey("LabBase", related_name="forms")
 
 
 class AbstractRelatedDeterminationForm(Orderable):
@@ -81,13 +81,16 @@ class AbstractRelatedDeterminationForm(Orderable):
         abstract = True
 
     form = models.ForeignKey(
-        'determinations.DeterminationForm', on_delete=models.PROTECT
+        "determinations.DeterminationForm", on_delete=models.PROTECT
     )
 
     panels = [
-        FilteredFieldPanel('form', filter_query={
-            'roundbasedeterminationform__isnull': True,
-        })
+        FilteredFieldPanel(
+            "form",
+            filter_query={
+                "roundbasedeterminationform__isnull": True,
+            },
+        )
     ]
 
     @property
@@ -98,7 +101,7 @@ class AbstractRelatedDeterminationForm(Orderable):
         try:
             if self.fields == other.fields and self.sort_order == other.sort_order:
                 # If the objects are saved to db. pk should also be compared
-                if hasattr(other, 'pk') and hasattr(self, 'pk'):
+                if hasattr(other, "pk") and hasattr(self, "pk"):
                     return self.pk == other.pk
                 return True
             return False
@@ -117,12 +120,15 @@ class AbstractRelatedReviewForm(Orderable):
     class Meta(Orderable.Meta):
         abstract = True
 
-    form = models.ForeignKey('review.ReviewForm', on_delete=models.PROTECT)
+    form = models.ForeignKey("review.ReviewForm", on_delete=models.PROTECT)
 
     panels = [
-        FilteredFieldPanel('form', filter_query={
-            'roundbasereviewform__isnull': True,
-        })
+        FilteredFieldPanel(
+            "form",
+            filter_query={
+                "roundbasereviewform__isnull": True,
+            },
+        )
     ]
 
     @property
@@ -133,7 +139,7 @@ class AbstractRelatedReviewForm(Orderable):
         try:
             if self.fields == other.fields and self.sort_order == other.sort_order:
                 # If the objects are saved to db. pk should also be compared
-                if hasattr(other, 'pk') and hasattr(self, 'pk'):
+                if hasattr(other, "pk") and hasattr(self, "pk"):
                     return self.pk == other.pk
                 return True
             return False
@@ -149,46 +155,48 @@ class AbstractRelatedReviewForm(Orderable):
 
 
 class ApplicationBaseReviewForm(AbstractRelatedReviewForm):
-    application = ParentalKey('ApplicationBase', related_name='review_forms')
+    application = ParentalKey("ApplicationBase", related_name="review_forms")
 
 
 class ApplicationBaseExternalReviewForm(AbstractRelatedReviewForm):
-    application = ParentalKey('ApplicationBase', related_name='external_review_forms')
+    application = ParentalKey("ApplicationBase", related_name="external_review_forms")
 
 
 class RoundBaseReviewForm(AbstractRelatedReviewForm):
-    round = ParentalKey('RoundBase', related_name='review_forms')
+    round = ParentalKey("RoundBase", related_name="review_forms")
 
 
 class RoundBaseExternalReviewForm(AbstractRelatedReviewForm):
-    round = ParentalKey('RoundBase', related_name='external_review_forms')
+    round = ParentalKey("RoundBase", related_name="external_review_forms")
 
 
 class LabBaseReviewForm(AbstractRelatedReviewForm):
-    lab = ParentalKey('LabBase', related_name='review_forms')
+    lab = ParentalKey("LabBase", related_name="review_forms")
 
 
 class LabBaseExternalReviewForm(AbstractRelatedReviewForm):
-    lab = ParentalKey('LabBase', related_name='external_review_forms')
+    lab = ParentalKey("LabBase", related_name="external_review_forms")
 
 
 class ApplicationBaseDeterminationForm(AbstractRelatedDeterminationForm):
-    application = ParentalKey('ApplicationBase', related_name='determination_forms')
+    application = ParentalKey("ApplicationBase", related_name="determination_forms")
 
 
 class RoundBaseDeterminationForm(AbstractRelatedDeterminationForm):
-    round = ParentalKey('RoundBase', related_name='determination_forms')
+    round = ParentalKey("RoundBase", related_name="determination_forms")
 
 
 class LabBaseDeterminationForm(AbstractRelatedDeterminationForm):
-    lab = ParentalKey('LabBase', related_name='determination_forms')
+    lab = ParentalKey("LabBase", related_name="determination_forms")
 
 
 class AbstractRelatedProjectApprovalForm(Orderable):
     class Meta(Orderable.Meta):
         abstract = True
 
-    form = models.ForeignKey('application_projects.ProjectApprovalForm', on_delete=models.PROTECT)
+    form = models.ForeignKey(
+        "application_projects.ProjectApprovalForm", on_delete=models.PROTECT
+    )
 
     @property
     def fields(self):
@@ -198,7 +206,7 @@ class AbstractRelatedProjectApprovalForm(Orderable):
         try:
             if self.fields == other.fields and self.sort_order == other.sort_order:
                 # If the objects are saved to db. pk should also be compared
-                if hasattr(other, 'pk') and hasattr(self, 'pk'):
+                if hasattr(other, "pk") and hasattr(self, "pk"):
                     return self.pk == other.pk
                 return True
             return False
@@ -214,11 +222,14 @@ class AbstractRelatedProjectApprovalForm(Orderable):
 
 
 class AbstractRelatedProjectSOWForm(Orderable):
-    """ Abstract class for SOW Form to use it in Funds and Labs, similar to the other forms liks ReviewForms etc """
+    """Abstract class for SOW Form to use it in Funds and Labs, similar to the other forms liks ReviewForms etc"""
+
     class Meta(Orderable.Meta):
         abstract = True
 
-    form = models.ForeignKey('application_projects.ProjectSOWForm', on_delete=models.PROTECT)
+    form = models.ForeignKey(
+        "application_projects.ProjectSOWForm", on_delete=models.PROTECT
+    )
 
     @property
     def fields(self):
@@ -228,7 +239,7 @@ class AbstractRelatedProjectSOWForm(Orderable):
         try:
             if self.fields == other.fields and self.sort_order == other.sort_order:
                 # If the objects are saved to db. pk should also be compared
-                if hasattr(other, 'pk') and hasattr(self, 'pk'):
+                if hasattr(other, "pk") and hasattr(self, "pk"):
                     return self.pk == other.pk
                 return True
             return False
@@ -244,16 +255,16 @@ class AbstractRelatedProjectSOWForm(Orderable):
 
 
 class ApplicationBaseProjectApprovalForm(AbstractRelatedProjectApprovalForm):
-    application = ParentalKey('ApplicationBase', related_name='approval_forms')
+    application = ParentalKey("ApplicationBase", related_name="approval_forms")
 
 
 class ApplicationBaseProjectSOWForm(AbstractRelatedProjectSOWForm):
-    application = ParentalKey('ApplicationBase', related_name='sow_forms')
+    application = ParentalKey("ApplicationBase", related_name="sow_forms")
 
 
 class LabBaseProjectApprovalForm(AbstractRelatedProjectApprovalForm):
-    lab = ParentalKey('LabBase', related_name='approval_forms')
+    lab = ParentalKey("LabBase", related_name="approval_forms")
 
 
 class LabBaseProjectSOWForm(AbstractRelatedProjectSOWForm):
-    lab = ParentalKey('LabBase', related_name='sow_forms')
+    lab = ParentalKey("LabBase", related_name="sow_forms")
diff --git a/hypha/apply/funds/models/mixins.py b/hypha/apply/funds/models/mixins.py
index 64ea1bc7239b233ec5ba0619dcad039352d34ef5..1d7aae6feeaba73b79252a18a71d8df39ae4a900 100644
--- a/hypha/apply/funds/models/mixins.py
+++ b/hypha/apply/funds/models/mixins.py
@@ -16,7 +16,7 @@ from hypha.apply.utils.storage import PrivateStorage
 
 from ..files import SubmissionStreamFieldFile
 
-__all__ = ['AccessFormData']
+__all__ = ["AccessFormData"]
 
 
 class UnusedFieldException(Exception):
@@ -30,6 +30,7 @@ class AccessFormData:
          - form_data > jsonfield containing the submitted data
          - form_fields > streamfield containing the original form fields
     """
+
     stream_file_class = SubmissionStreamFieldFile
     storage_class = PrivateStorage
 
@@ -56,17 +57,33 @@ class AccessFormData:
         if isinstance(file, cls.stream_file_class):
             return file
         if isinstance(file, File):
-            return cls.stream_file_class(instance, field, file, name=file.name, storage=cls.storage_class())
+            return cls.stream_file_class(
+                instance, field, file, name=file.name, storage=cls.storage_class()
+            )
 
         if isinstance(file, PlaceholderUploadedFile):
-            return cls.stream_file_class(instance, field, None, name=file.file_id, filename=file.name, storage=cls.storage_class())
+            return cls.stream_file_class(
+                instance,
+                field,
+                None,
+                name=file.file_id,
+                filename=file.name,
+                storage=cls.storage_class(),
+            )
 
         # This fixes a backwards compatibility issue with #507
         # Once every application has been re-saved it should be possible to remove it
-        if 'path' in file:
-            file['filename'] = file['name']
-            file['name'] = file['path']
-        return cls.stream_file_class(instance, field, None, name=file['name'], filename=file.get('filename'), storage=cls.storage_class())
+        if "path" in file:
+            file["filename"] = file["name"]
+            file["name"] = file["path"]
+        return cls.stream_file_class(
+            instance,
+            field,
+            None,
+            name=file["name"],
+            filename=file.get("filename"),
+            storage=cls.storage_class(),
+        )
 
     @classmethod
     def process_file(cls, instance, field, file):
@@ -100,9 +117,11 @@ class AccessFormData:
     @classmethod
     def from_db(cls, db, field_names, values):
         instance = super().from_db(db, field_names, values)
-        if 'form_data' in field_names:
+        if "form_data" in field_names:
             # When the form_data is loaded from the DB deserialise it
-            instance.form_data = cls.deserialised_data(instance, instance.form_data, instance.form_fields)
+            instance.form_data = cls.deserialised_data(
+                instance, instance.form_data, instance.form_fields
+            )
         return instance
 
     @classmethod
@@ -113,9 +132,9 @@ class AccessFormData:
         # Do not attempt to iterate over form_fields - that will fully instantiate the form_fields
         # including any sub queries that they do
         for i, field_data in enumerate(form_fields.raw_data):
-            block = form_fields.stream_block.child_blocks[field_data['type']]
+            block = form_fields.stream_block.child_blocks[field_data["type"]]
             if isinstance(block, UploadableMediaBlock):
-                field_id = field_data.get('id')
+                field_id = field_data.get("id")
                 if field_id:
                     field = form_fields[i]
                     file = data.get(field_id, [])
@@ -151,7 +170,9 @@ class AccessFormData:
     @property
     def file_field_ids(self):
         for field_id, field in self.fields.items():
-            if isinstance(field.block, (FileFieldBlock, ImageFieldBlock, MultiFileFieldBlock)):
+            if isinstance(
+                field.block, (FileFieldBlock, ImageFieldBlock, MultiFileFieldBlock)
+            ):
                 yield field_id
 
     @property
@@ -177,10 +198,7 @@ class AccessFormData:
     @property
     def raw_fields(self):
         # Field ids to field class mapping - similar to raw_data
-        return {
-            field.id: field
-            for field in self.form_fields
-        }
+        return {field.id: field for field in self.form_fields}
 
     @property
     def fields(self):
@@ -222,12 +240,9 @@ class AccessFormData:
         ]
 
     def get_serialize_multi_inputs_answer(self, field):
-        number_of_inputs = field.value.get('number_of_inputs')
-        answers = [
-            self.data(field.id + '_' + str(i))
-            for i in range(number_of_inputs)
-        ]
-        data = ', '.join(filter(None, answers))
+        number_of_inputs = field.value.get("number_of_inputs")
+        answers = [self.data(field.id + "_" + str(i)) for i in range(number_of_inputs)]
+        data = ", ".join(filter(None, answers))
         return data
 
     def serialize(self, field_id):
@@ -236,33 +251,33 @@ class AccessFormData:
             data = self.get_serialize_multi_inputs_answer(field)
         else:
             data = self.data(field_id)
-        return field.render(context={
-            'serialize': True,
-            'data': data,
-        })
+        return field.render(
+            context={
+                "serialize": True,
+                "data": data,
+            }
+        )
 
     def get_multi_inputs_answer(self, field, include_question=False):
-        number_of_inputs = field.value.get('number_of_inputs')
-        answers = [
-            self.data(field.id + '_' + str(i))
-            for i in range(number_of_inputs)
-        ]
+        number_of_inputs = field.value.get("number_of_inputs")
+        answers = [self.data(field.id + "_" + str(i)) for i in range(number_of_inputs)]
 
         render_data = [
             field.render(
                 context={
-                    'data': answer,
-                    'include_question': include_question if i == 0 else False
-                })
+                    "data": answer,
+                    "include_question": include_question if i == 0 else False,
+                }
+            )
             for i, answer in enumerate(filter(None, answers))
         ]
-        return ''.join(render_data).replace('</section>', '') + '</section>'
+        return "".join(render_data).replace("</section>", "") + "</section>"
 
     def render_answer(self, field_id, include_question=False):
         try:
             field = self.field(field_id)
         except UnusedFieldException:
-            return '-'
+            return "-"
         if isinstance(field.block, MultiInputCharFieldBlock):
             render_data = self.get_multi_inputs_answer(field, include_question)
             return render_data
@@ -270,8 +285,12 @@ class AccessFormData:
             data = self.data(field_id)
         # Some migrated content have empty address.
         if not data:
-            return field.render(context={'data': '', 'include_question': include_question})
-        return field.render(context={'data': data, 'include_question': include_question})
+            return field.render(
+                context={"data": "", "include_question": include_question}
+            )
+        return field.render(
+            context={"data": data, "include_question": include_question}
+        )
 
     def render_answers(self):
         # Returns a list of the rendered answers
@@ -296,23 +315,23 @@ class AccessFormData:
 
     def output_answers(self):
         # Returns a safe string of the rendered answers
-        return mark_safe(''.join(self.render_answers()))
+        return mark_safe("".join(self.render_answers()))
 
     def output_text_answers(self):
-        return mark_safe(''.join(self.render_text_blocks_answers()))
+        return mark_safe("".join(self.render_text_blocks_answers()))
 
     def output_first_group_text_answers(self):
-        return mark_safe(''.join(self.render_first_group_text_answers()))
+        return mark_safe("".join(self.render_first_group_text_answers()))
 
     def get_answer_from_label(self, label):
         for field_id in self.question_text_field_ids:
             if field_id not in self.named_blocks:
                 question_field = self.serialize(field_id)
-                if label.lower() in question_field['question'].lower():
-                    if isinstance(question_field['answer'], str):
-                        answer = question_field['answer']
+                if label.lower() in question_field["question"].lower():
+                    if isinstance(question_field["answer"], str):
+                        answer = question_field["answer"]
                     else:
-                        answer = ','.join(question_field['answer'])
-                    if answer and not answer == 'N':
+                        answer = ",".join(question_field["answer"])
+                    if answer and not answer == "N":
                         return answer
         return None
diff --git a/hypha/apply/funds/models/reminders.py b/hypha/apply/funds/models/reminders.py
index 0fc1515ecb79d4a0a2471880037b6b490c0bac4d..44057f9802ebddd10e2cc05365a07feff231d2e2 100644
--- a/hypha/apply/funds/models/reminders.py
+++ b/hypha/apply/funds/models/reminders.py
@@ -7,21 +7,19 @@ from hypha.apply.activity.messaging import MESSAGES
 
 
 class Reminder(models.Model):
-    REVIEW = 'reviewers_review'
+    REVIEW = "reviewers_review"
     ACTIONS = {
-        REVIEW: 'Remind reviewers to Review',
-    }
-    EMAIL = 'email'
-    MEDIUM = {
-        REVIEW: EMAIL
+        REVIEW: "Remind reviewers to Review",
     }
+    EMAIL = "email"
+    MEDIUM = {REVIEW: EMAIL}
     ACTION_MESSAGE = {
-        f'{REVIEW}-{EMAIL}': MESSAGES.REVIEW_REMINDER,
+        f"{REVIEW}-{EMAIL}": MESSAGES.REVIEW_REMINDER,
     }
     submission = models.ForeignKey(
-        'funds.ApplicationSubmission',
+        "funds.ApplicationSubmission",
         on_delete=models.CASCADE,
-        related_name='reminders'
+        related_name="reminders",
     )
     user = models.ForeignKey(
         settings.AUTH_USER_MODEL,
@@ -34,21 +32,20 @@ class Reminder(models.Model):
         max_length=50,
     )
     sent = models.BooleanField(default=False)
-    title = models.CharField(max_length=60, blank=False, default='')
+    title = models.CharField(max_length=60, blank=False, default="")
     description = models.TextField(blank=True)
 
     def __str__(self):
-        return '{} at {}'.format(
-            self.ACTIONS[self.action],
-            self.time.strftime('%Y-%m-%d  %I:%M %p')
+        return "{} at {}".format(
+            self.ACTIONS[self.action], self.time.strftime("%Y-%m-%d  %I:%M %p")
         )
 
     class Meta:
-        ordering = ['-time']
+        ordering = ["-time"]
 
     def clean(self):
-        if self.title == '':
-            raise ValidationError('Title is Empty')
+        if self.title == "":
+            raise ValidationError("Title is Empty")
 
     @property
     def is_expired(self):
@@ -56,7 +53,7 @@ class Reminder(models.Model):
 
     @property
     def action_message(self):
-        return self.ACTION_MESSAGE[f'{self.action}-{self.medium}']
+        return self.ACTION_MESSAGE[f"{self.action}-{self.medium}"]
 
     @property
     def action_type(self):
diff --git a/hypha/apply/funds/models/reviewer_role.py b/hypha/apply/funds/models/reviewer_role.py
index 6ce08e3066c3ee40995ca061ef8701c4c3b6989b..6cddf51e55930ee76d7a76d051c26c88ae1203a5 100644
--- a/hypha/apply/funds/models/reviewer_role.py
+++ b/hypha/apply/funds/models/reviewer_role.py
@@ -9,22 +9,22 @@ from hypha.apply.utils.image import generate_image_url
 class ReviewerRole(models.Model):
     name = models.CharField(max_length=128)
     icon = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
-        related_name='+',
-        on_delete=models.SET_NULL
+        related_name="+",
+        on_delete=models.SET_NULL,
     )
     order = models.IntegerField(
-        help_text=_('The order this role should appear in the Update Reviewers form.'),
+        help_text=_("The order this role should appear in the Update Reviewers form."),
         null=True,
         blank=True,
     )
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('icon'),
-        FieldPanel('order'),
+        FieldPanel("name"),
+        FieldPanel("icon"),
+        FieldPanel("order"),
     ]
 
     def icon_url(self, filter_spec):
@@ -39,56 +39,55 @@ class ReviewerRole(models.Model):
 @register_setting
 class ReviewerSettings(BaseSiteSetting):
     SUBMISSIONS = [
-        ('all', 'All Submissions'),
-        ('reviewed', 'Only reviewed Submissions'),
+        ("all", "All Submissions"),
+        ("reviewed", "Only reviewed Submissions"),
     ]
 
     STATES = [
-        ('all', 'All States'),
-        ('ext_state_or_higher', 'Only External review and higher'),
-        ('ext_state_only', 'Only External review')
+        ("all", "All States"),
+        ("ext_state_or_higher", "Only External review and higher"),
+        ("ext_state_only", "Only External review"),
     ]
 
     OUTCOMES = [
-        ('all', 'All Outcomes'),
-        ('all_except_dismissed', 'All Outcomes Except Dismissed'),
-        ('accepted', 'Only Accepted')
+        ("all", "All Outcomes"),
+        ("all_except_dismissed", "All Outcomes Except Dismissed"),
+        ("accepted", "Only Accepted"),
     ]
 
     class Meta:
-        verbose_name = 'Reviewer Settings'
+        verbose_name = "Reviewer Settings"
 
     submission = models.CharField(
         choices=SUBMISSIONS,
-        default='all',
+        default="all",
         max_length=10,
-        help_text=_('Submissions for which reviewers should have access to')
+        help_text=_("Submissions for which reviewers should have access to"),
     )
     state = models.CharField(
         choices=STATES,
-        default='all',
+        default="all",
         max_length=20,
-        help_text=_('Submissions states for which reviewers should have access to')
+        help_text=_("Submissions states for which reviewers should have access to"),
     )
     outcome = models.CharField(
         choices=OUTCOMES,
-        default='all',
+        default="all",
         max_length=20,
-        help_text=_('Submissions outcomes for which reviewers should have access to')
+        help_text=_("Submissions outcomes for which reviewers should have access to"),
     )
     assigned = models.BooleanField(
-        default=False,
-        help_text=_('Submissions for which reviewer is assigned to')
+        default=False, help_text=_("Submissions for which reviewer is assigned to")
     )
     use_settings = models.BooleanField(
         default=False,
-        help_text=_('Use the above configured variables to filter out submissions')
+        help_text=_("Use the above configured variables to filter out submissions"),
     )
 
     panels = [
-        FieldPanel('submission'),
-        FieldPanel('state'),
-        FieldPanel('outcome'),
-        FieldPanel('assigned'),
-        FieldPanel('use_settings'),
+        FieldPanel("submission"),
+        FieldPanel("state"),
+        FieldPanel("outcome"),
+        FieldPanel("assigned"),
+        FieldPanel("use_settings"),
     ]
diff --git a/hypha/apply/funds/models/screening.py b/hypha/apply/funds/models/screening.py
index 8f3b60677180a5197dfdb8189894538be7ea8a01..0abc0318e5f8b1b438a421a58f075f536eb9b92e 100644
--- a/hypha/apply/funds/models/screening.py
+++ b/hypha/apply/funds/models/screening.py
@@ -7,12 +7,14 @@ from ..admin_forms import ScreeningStatusAdminForm
 class ScreeningStatus(models.Model):
     title = models.CharField(max_length=128)
     yes = models.BooleanField(
-        default=False, verbose_name=_('Yes/No'),
-        help_text=_('Tick mark for Yes otherwise No.')
+        default=False,
+        verbose_name=_("Yes/No"),
+        help_text=_("Tick mark for Yes otherwise No."),
     )
     default = models.BooleanField(
-        default=False, verbose_name=_('Default Yes/No'),
-        help_text=_('Only one Yes and No screening decision can be set as default.')
+        default=False,
+        verbose_name=_("Default Yes/No"),
+        help_text=_("Only one Yes and No screening decision can be set as default."),
     )
 
     base_form_class = ScreeningStatusAdminForm
diff --git a/hypha/apply/funds/models/submissions.py b/hypha/apply/funds/models/submissions.py
index 58d81455223b406e4178bf79a4c1916dc3ab652e..ae0a1f8a573db084fe74783e7cd0c9b3d447713c 100644
--- a/hypha/apply/funds/models/submissions.py
+++ b/hypha/apply/funds/models/submissions.py
@@ -5,6 +5,7 @@ from functools import partialmethod, reduce
 from django.apps import apps
 from django.conf import settings
 from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group
 from django.contrib.contenttypes.fields import GenericRelation
 from django.contrib.postgres.indexes import GinIndex
 from django.contrib.postgres.search import SearchVector, SearchVectorField
@@ -44,6 +45,7 @@ from hypha.apply.funds.services import (
 from hypha.apply.review.options import AGREE
 from hypha.apply.stream_forms.files import StreamFieldDataEncoder
 from hypha.apply.stream_forms.models import BaseStreamForm
+from hypha.apply.users.groups import APPLICANT_GROUP_NAME
 
 from ..blocks import NAMED_BLOCKS, ApplicationCustomFormFieldsBlock
 from ..workflow import (
@@ -74,35 +76,39 @@ from .utils import (
 
 
 class JSONOrderable(models.QuerySet):
-    json_field = ''
+    json_field = ""
 
     def order_by(self, *field_names):
         if not self.json_field:
             raise ValueError(
-                'json_field cannot be blank, please provide a field on which to perform the ordering'
+                "json_field cannot be blank, please provide a field on which to perform the ordering"
             )
 
         def build_json_order_by(field):
             try:
-                if field.replace('-', '') not in NAMED_BLOCKS:
+                if field.replace("-", "") not in NAMED_BLOCKS:
                     return field
             except AttributeError:
                 return field
 
-            if field[0] == '-':
+            if field[0] == "-":
                 descending = True
                 field = field[1:]
             else:
                 descending = False
             db_table = self.model._meta.db_table
-            return OrderBy(RawSQL(f'LOWER({db_table}.{self.json_field}->>%s)', (field,)), descending=descending, nulls_last=True)
+            return OrderBy(
+                RawSQL(f"LOWER({db_table}.{self.json_field}->>%s)", (field,)),
+                descending=descending,
+                nulls_last=True,
+            )
 
         field_ordering = [build_json_order_by(field) for field in field_names]
         return super().order_by(*field_ordering)
 
 
 class ApplicationSubmissionQueryset(JSONOrderable):
-    json_field = 'form_data'
+    json_field = "form_data"
 
     def active(self):
         return self.filter(status__in=active_statuses, is_archive=False)
@@ -114,11 +120,12 @@ class ApplicationSubmissionQueryset(JSONOrderable):
         qs = self.filter(
             Q(status__in=COMMUNITY_REVIEW_PHASES),
             ~Q(user=user),
-            ~Q(reviews__author=user) | (
-                Q(reviews__author=user) & Q(reviews__is_draft=True)
-            )
+            ~Q(reviews__author=user)
+            | (Q(reviews__author=user) & Q(reviews__is_draft=True)),
+        )
+        qs = qs.exclude(
+            reviews__opinions__opinion=AGREE, reviews__opinions__author=user
         )
-        qs = qs.exclude(reviews__opinions__opinion=AGREE, reviews__opinions__author=user)
         return qs.distinct()
 
     def in_review(self):
@@ -126,30 +133,32 @@ class ApplicationSubmissionQueryset(JSONOrderable):
 
     def in_review_for(self, user, assigned=True):
         user_review_statuses = get_review_active_statuses(user)
-        qs = self.prefetch_related('reviews__author__reviewer')
+        qs = self.prefetch_related("reviews__author__reviewer")
         qs = qs.filter(
             Q(status__in=user_review_statuses),
-            ~Q(reviews__author__reviewer=user) | (
-                Q(reviews__author__reviewer=user) & Q(reviews__is_draft=True)
-            )
+            ~Q(reviews__author__reviewer=user)
+            | (Q(reviews__author__reviewer=user) & Q(reviews__is_draft=True)),
         )
         if assigned:
             qs = qs.filter(reviewers=user)
             # If this user has agreed with a review, then they have reviewed this submission already
-            qs = qs.exclude(reviews__opinions__opinion=AGREE, reviews__opinions__author__reviewer=user)
+            qs = qs.exclude(
+                reviews__opinions__opinion=AGREE,
+                reviews__opinions__author__reviewer=user,
+            )
         return qs.distinct()
 
     def for_reviewer_settings(self, user, reviewer_settings):
         qs = self
-        if reviewer_settings.submission == 'reviewed':
+        if reviewer_settings.submission == "reviewed":
             qs = qs.reviewed_by(user)
-        if reviewer_settings.state == 'ext_state_or_higher':
+        if reviewer_settings.state == "ext_state_or_higher":
             qs = qs.filter(status__in=ext_or_higher_statuses)
-        if reviewer_settings.state == 'ext_state_only':
+        if reviewer_settings.state == "ext_state_only":
             qs = qs.filter(status__in=ext_review_statuses)
-        if reviewer_settings.outcome == 'accepted':
+        if reviewer_settings.outcome == "accepted":
             qs = qs.filter(status__in=accepted_statuses)
-        if reviewer_settings.outcome == 'all_except_dismissed':
+        if reviewer_settings.outcome == "all_except_dismissed":
             qs = qs.exclude(status__in=dismissed_statuses)
         if reviewer_settings.assigned:
             qs = qs.filter(reviewers=user)
@@ -171,7 +180,11 @@ class ApplicationSubmissionQueryset(JSONOrderable):
         return self.filter(status__in=DETERMINATION_RESPONSE_PHASES).filter(lead=user)
 
     def undetermined(self):
-        determined_submissions = Determination.objects.filter(submission__in=self).final().values('submission')
+        determined_submissions = (
+            Determination.objects.filter(submission__in=self)
+            .final()
+            .values("submission")
+        )
         return self.exclude(pk__in=determined_submissions)
 
     def current(self):
@@ -187,15 +200,17 @@ class ApplicationSubmissionQueryset(JSONOrderable):
 
     def current_accepted(self):
         # Applications which have the current stage active (have not been progressed)
-        return self.filter(status__in=PHASES_MAPPING['accepted']['statuses']).current()
+        return self.filter(status__in=PHASES_MAPPING["accepted"]["statuses"]).current()
 
     def value(self):
         return self.annotate(
-            value=Cast(KeyTextTransform('value', 'form_data'), output_field=FloatField())
+            value=Cast(
+                KeyTextTransform("value", "form_data"), output_field=FloatField()
+            )
         ).aggregate(
-            Count('value'),
-            Avg('value'),
-            Sum('value'),
+            Count("value"),
+            Avg("value"),
+            Sum("value"),
         )
 
     def exclude_draft(self):
@@ -203,30 +218,35 @@ class ApplicationSubmissionQueryset(JSONOrderable):
 
     def with_latest_update(self):
         activities = self.model.activities.rel.model
-        latest_activity = activities.objects.filter(submission=OuterRef('id')).select_related('user')
+        latest_activity = activities.objects.filter(
+            submission=OuterRef("id")
+        ).select_related("user")
         return self.annotate(
-            last_user_update=Subquery(latest_activity[:1].values('user__full_name')),
-            last_update=Subquery(latest_activity.values('timestamp')[:1]),
+            last_user_update=Subquery(latest_activity[:1].values("user__full_name")),
+            last_update=Subquery(latest_activity.values("timestamp")[:1]),
         )
 
     def for_table(self, user):
         roles_for_review = self.model.assigned.field.model.objects.with_roles().filter(
-            submission=OuterRef('id'), reviewer=user)
+            submission=OuterRef("id"), reviewer=user
+        )
 
         qs = annotate_review_recommendation_and_count(self.with_latest_update())
         qs = annotate_comments_count(qs, user)
-        return qs.annotate(
-            role_icon=Subquery(roles_for_review[:1].values('role__icon')),
-        ).select_related(
-            'page',
-            'round',
-            'lead',
-            'user',
-            'previous__page',
-            'previous__round',
-            'previous__lead',
-        ).prefetch_related(
-            'screening_statuses'
+        return (
+            qs.annotate(
+                role_icon=Subquery(roles_for_review[:1].values("role__icon")),
+            )
+            .select_related(
+                "page",
+                "round",
+                "lead",
+                "user",
+                "previous__page",
+                "previous__round",
+                "previous__lead",
+            )
+            .prefetch_related("screening_statuses")
         )
 
 
@@ -251,12 +271,13 @@ def wrap_method(func):
         # Without this using the same method for multiple transitions fails as
         # the fsm wrapping is overwritten
         return func(*args, **kwargs)
+
     return wrapped
 
 
 def transition_id(target, phase):
-    transition_prefix = 'transition'
-    return '__'.join([transition_prefix, phase.stage.name.lower(), phase.name, target])
+    transition_prefix = "transition"
+    return "__".join([transition_prefix, phase.stage.name.lower(), phase.name, target])
 
 
 class AddTransitions(models.base.ModelBase):
@@ -265,18 +286,22 @@ class AddTransitions(models.base.ModelBase):
             for phase, data in workflow.items():
                 for transition_name, action in data.transitions.items():
                     method_name = transition_id(transition_name, data)
-                    permission_name = method_name + '_permission'
-                    permission_func = make_permission_check(action['permissions'])
+                    permission_name = method_name + "_permission"
+                    permission_func = make_permission_check(action["permissions"])
 
                     # Get the method defined on the parent or default to a NOOP
-                    transition_state = wrap_method(attrs.get(action.get('method'), lambda *args, **kwargs: None))
+                    transition_state = wrap_method(
+                        attrs.get(action.get("method"), lambda *args, **kwargs: None)
+                    )
                     # Provide a neat name for graph viz display
-                    transition_state.__name__ = slugify(action['display'])
+                    transition_state.__name__ = slugify(action["display"])
 
-                    conditions = [attrs[condition] for condition in action.get('conditions', [])]
+                    conditions = [
+                        attrs[condition] for condition in action.get("conditions", [])
+                    ]
                     # Wrap with transition decorator
                     transition_func = transition(
-                        attrs['status'],
+                        attrs["status"],
                         source=phase,
                         target=transition_name,
                         permission=permission_func,
@@ -297,17 +322,21 @@ class AddTransitions(models.base.ModelBase):
                 # For the other workflow
                 return None
 
-        attrs['get_transition'] = get_transition
+        attrs["get_transition"] = get_transition
 
         def get_actions_for_user(self, user):
             transitions = self.get_available_user_status_transitions(user)
             actions = [
-                (transition.target, self.phase.transitions[transition.target]['display'])
-                for transition in transitions if self.get_transition(transition.target)
+                (
+                    transition.target,
+                    self.phase.transitions[transition.target]["display"],
+                )
+                for transition in transitions
+                if self.get_transition(transition.target)
             ]
             yield from actions
 
-        attrs['get_actions_for_user'] = get_actions_for_user
+        attrs["get_actions_for_user"] = get_actions_for_user
 
         def perform_transition(self, action, user, request=None, **kwargs):
             transition = self.get_transition(action)
@@ -318,21 +347,23 @@ class AddTransitions(models.base.ModelBase):
                 raise PermissionDenied(f'You do not have permission to "{ action }"')
 
             transition(by=user, request=request, **kwargs)
-            self.save(update_fields=['status'])
+            self.save(update_fields=["status"])
 
             self.progress_stage_when_possible(user, request, **kwargs)
 
-        attrs['perform_transition'] = perform_transition
+        attrs["perform_transition"] = perform_transition
 
         def progress_stage_when_possible(self, user, request, notify=None, **kwargs):
             # Check to see if we can progress to a new stage from the current status
             for stage_transition in STAGE_CHANGE_ACTIONS:
                 try:
-                    self.perform_transition(stage_transition, user, request=request, notify=False, **kwargs)
+                    self.perform_transition(
+                        stage_transition, user, request=request, notify=False, **kwargs
+                    )
                 except PermissionDenied:
                     pass
 
-        attrs['progress_stage_when_possible'] = progress_stage_when_possible
+        attrs["progress_stage_when_possible"] = progress_stage_when_possible
 
         return super().__new__(cls, name, bases, attrs, **kwargs)
 
@@ -344,7 +375,7 @@ class ApplicationSubmissionMetaclass(AddTransitions):
         # We want to access the redered display of the required fields.
         # Treat in similar way to django's get_FIELD_display
         for block_name in NAMED_BLOCKS:
-            partial_method_name = f'_{block_name}_method'
+            partial_method_name = f"_{block_name}_method"
             # We need to generate the partial method and the wrap it in property so
             # we can access the required fields like normal fields. e.g. self.title
             # Partial method requires __get__ to be called in order to bind it to the
@@ -358,66 +389,75 @@ class ApplicationSubmissionMetaclass(AddTransitions):
             )
             setattr(
                 cls,
-                f'{block_name}',
+                f"{block_name}",
                 property(getattr(cls, partial_method_name)),
             )
             setattr(
                 cls,
-                f'get_{block_name}_display',
+                f"get_{block_name}_display",
                 partialmethod(cls._get_REQUIRED_display, name=block_name),
             )
         return cls
 
 
 class ApplicationSubmission(
-        WorkflowHelpers,
-        BaseStreamForm,
-        AccessFormData,
-        AbstractFormSubmission,
-        metaclass=ApplicationSubmissionMetaclass,
+    WorkflowHelpers,
+    BaseStreamForm,
+    AccessFormData,
+    AbstractFormSubmission,
+    metaclass=ApplicationSubmissionMetaclass,
 ):
     form_data = models.JSONField(encoder=StreamFieldDataEncoder)
     form_fields = StreamField(ApplicationCustomFormFieldsBlock(), use_json_field=True)
-    summary = models.TextField(default='', null=True, blank=True)
-    page = models.ForeignKey('wagtailcore.Page', on_delete=models.PROTECT)
-    round = models.ForeignKey('wagtailcore.Page', on_delete=models.PROTECT, related_name='submissions', null=True)
+    summary = models.TextField(default="", null=True, blank=True)
+    page = models.ForeignKey("wagtailcore.Page", on_delete=models.PROTECT)
+    round = models.ForeignKey(
+        "wagtailcore.Page",
+        on_delete=models.PROTECT,
+        related_name="submissions",
+        null=True,
+    )
     lead = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         limit_choices_to=LIMIT_TO_STAFF,
-        related_name='submission_lead',
+        related_name="submission_lead",
         on_delete=models.PROTECT,
     )
-    next = models.OneToOneField('self', on_delete=models.CASCADE, related_name='previous', null=True)
+    next = models.OneToOneField(
+        "self", on_delete=models.CASCADE, related_name="previous", null=True
+    )
     reviewers = models.ManyToManyField(
         settings.AUTH_USER_MODEL,
-        related_name='submissions_reviewer',
+        related_name="submissions_reviewer",
         blank=True,
-        through='AssignedReviewers',
+        through="AssignedReviewers",
     )
     partners = models.ManyToManyField(
         settings.AUTH_USER_MODEL,
-        related_name='submissions_partner',
+        related_name="submissions_partner",
         limit_choices_to=LIMIT_TO_PARTNERS,
         blank=True,
     )
     meta_terms = models.ManyToManyField(
         MetaTerm,
-        related_name='submissions',
+        related_name="submissions",
         blank=True,
     )
     flags = GenericRelation(
         Flag,
-        content_type_field='target_content_type',
-        object_id_field='target_object_id',
-        related_query_name='submission',
+        content_type_field="target_content_type",
+        object_id_field="target_object_id",
+        related_query_name="submission",
     )
     activities = GenericRelation(
-        'activity.Activity',
-        content_type_field='source_content_type',
-        object_id_field='source_object_id',
-        related_query_name='submission',
+        "activity.Activity",
+        content_type_field="source_content_type",
+        object_id_field="source_object_id",
+        related_query_name="submission",
+    )
+    user = models.ForeignKey(
+        settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True
     )
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)
     search_data = models.TextField()
     search_document = SearchVectorField(null=True)
 
@@ -425,26 +465,26 @@ class ApplicationSubmission(
     status = FSMField(default=INITIAL_STATE, protected=True)
 
     screening_statuses = models.ManyToManyField(
-        'funds.ScreeningStatus',
-        related_name='submissions',
-        blank=True
+        "funds.ScreeningStatus", related_name="submissions", blank=True
     )
 
-    submit_time = models.DateTimeField(verbose_name=_('submit time'), auto_now_add=False)
+    submit_time = models.DateTimeField(
+        verbose_name=_("submit time"), auto_now_add=False
+    )
 
     _is_draft = False
 
     live_revision = models.OneToOneField(
-        'ApplicationRevision',
+        "ApplicationRevision",
         on_delete=models.CASCADE,
-        related_name='live',
+        related_name="live",
         null=True,
         editable=False,
     )
     draft_revision = models.OneToOneField(
-        'ApplicationRevision',
+        "ApplicationRevision",
         on_delete=models.CASCADE,
-        related_name='draft',
+        related_name="draft",
         null=True,
         editable=False,
     )
@@ -461,7 +501,7 @@ class ApplicationSubmission(
 
     class Meta:
         indexes = [
-            GinIndex(fields=['search_document']),
+            GinIndex(fields=["search_document"]),
         ]
 
     @property
@@ -472,8 +512,9 @@ class ApplicationSubmission(
         return not self.next
 
     @transition(
-        status, source='*',
-        target=RETURN_VALUE(INITIAL_STATE, 'draft_proposal', 'invited_to_proposal'),
+        status,
+        source="*",
+        target=RETURN_VALUE(INITIAL_STATE, "draft_proposal", "invited_to_proposal"),
         permission=make_permission_check({UserPermissions.ADMIN}),
     )
     def restart_stage(self, **kwargs):
@@ -485,10 +526,10 @@ class ApplicationSubmission(
             a.restart_stage(by=u)
             a.save()
         """
-        if hasattr(self, 'previous'):
-            return 'draft_proposal'
+        if hasattr(self, "previous"):
+            return "draft_proposal"
         elif self.next:
-            return 'invited_to_proposal'
+            return "invited_to_proposal"
         return INITIAL_STATE
 
     @property
@@ -505,30 +546,38 @@ class ApplicationSubmission(
 
     def ensure_user_has_account(self):
         if self.user and self.user.is_authenticated:
-            self.form_data['email'] = self.user.email
-            self.form_data['full_name'] = self.user.get_full_name()
+            self.form_data["email"] = self.user.email
+            self.form_data["full_name"] = self.user.get_full_name()
+            # Ensure applying user should have applicant role
+            if not self.user.is_applicant:
+                applicant_group = Group.objects.get(name=APPLICANT_GROUP_NAME)
+                self.user.groups.add(applicant_group)
+                self.user.save()
         else:
             # Rely on the form having the following must include fields (see blocks.py)
-            email = self.form_data.get('email')
-            full_name = self.form_data.get('full_name')
+            email = self.form_data.get("email")
+            full_name = self.form_data.get("full_name")
 
             User = get_user_model()
-            if 'skip_account_creation_notification' in self.form_data:
-                self.form_data.pop('skip_account_creation_notification', None)
+            if "skip_account_creation_notification" in self.form_data:
+                self.form_data.pop("skip_account_creation_notification", None)
                 self.user, _ = User.objects.get_or_create(
-                    email=email,
-                    defaults={'full_name': full_name}
+                    email=email, defaults={"full_name": full_name}
                 )
+                # Ensure applying user should have applicant role
+                if not self.user.is_applicant:
+                    applicant_group = Group.objects.get(name=APPLICANT_GROUP_NAME)
+                    self.user.groups.add(applicant_group)
+                    self.user.save()
             else:
                 self.user, _ = User.objects.get_or_create_and_notify(
                     email=email,
                     site=self.page.get_site(),
-                    defaults={'full_name': full_name}
+                    defaults={"full_name": full_name},
                 )
 
     def get_from_parent(self, attribute):
         try:
-
             return getattr(self.round.specific, attribute)
         except AttributeError:
             # We are a lab submission
@@ -545,7 +594,7 @@ class ApplicationSubmission(
         submission or we would still use the old determination forms for backward
         compatibility.
         """
-        return self.get_from_parent('determination_forms').count() > 0
+        return self.get_from_parent("determination_forms").count() > 0
 
     def progress_application(self, **kwargs):
         target = None
@@ -556,15 +605,17 @@ class ApplicationSubmission(
                 # See note in workflow.py
                 target = dict(PHASES)[phase].stage
         if not target:
-            raise ValueError('Incorrect State for transition')
+            raise ValueError("Incorrect State for transition")
 
         submission_in_db = ApplicationSubmission.objects.get(id=self.id)
         prev_meta_terms = submission_in_db.meta_terms.all()
 
         self.id = None
-        proposal_form = kwargs.get('proposal_form')
+        proposal_form = kwargs.get("proposal_form")
         proposal_form = int(proposal_form) if proposal_form else 0
-        self.form_fields = self.get_from_parent('get_defined_fields')(target, form_index=proposal_form)
+        self.form_fields = self.get_from_parent("get_defined_fields")(
+            target, form_index=proposal_form
+        )
 
         self.live_revision = None
         self.draft_revision = None
@@ -581,18 +632,22 @@ class ApplicationSubmission(
 
     def from_draft(self):
         self._is_draft = True
-        self.form_data = self.deserialised_data(self, self.draft_revision.form_data, self.form_fields)
+        self.form_data = self.deserialised_data(
+            self, self.draft_revision.form_data, self.form_fields
+        )
         return self
 
     def create_revision(self, draft=False, force=False, by=None, **kwargs):
         # Will return True/False if the revision was created or not
-        ApplicationRevision = apps.get_model('funds', 'ApplicationRevision')
+        ApplicationRevision = apps.get_model("funds", "ApplicationRevision")
         self.clean_submission()
         current_submission = ApplicationSubmission.objects.get(id=self.id)
         current_data = current_submission.form_data
         if current_data != self.form_data or force:
             if self.live_revision == self.draft_revision:
-                revision = ApplicationRevision.objects.create(submission=self, form_data=self.form_data, author=by)
+                revision = ApplicationRevision.objects.create(
+                    submission=self, form_data=self.form_data, author=by
+                )
             else:
                 revision = self.draft_revision
                 revision.form_data = self.form_data
@@ -603,7 +658,7 @@ class ApplicationSubmission(
                 self.form_data = current_submission.form_data
             else:
                 self.live_revision = revision
-                self.search_data = ' '.join(list(self.prepare_search_values()))
+                self.search_data = " ".join(list(self.prepare_search_values()))
                 self.search_document = self.prepare_search_vector()
 
             self.draft_revision = revision
@@ -629,23 +684,23 @@ class ApplicationSubmission(
     def save(self, *args, update_fields=None, skip_custom=False, **kwargs):
         if update_fields is None:
             update_fields = []
-        if update_fields and 'form_data' not in update_fields:
+        if update_fields and "form_data" not in update_fields:
             # We don't want to use this approach if the user is sending data
             return super().save(*args, update_fields=update_fields, **kwargs)
         elif skip_custom:
             return super().save(*args, **kwargs)
 
         if self._is_draft:
-            raise ValueError('Cannot save with draft data')
+            raise ValueError("Cannot save with draft data")
 
         creating = not self.id
 
         if creating:
             self.submit_time = timezone.now()
             # We are creating the object default to first stage
-            self.workflow_name = self.get_from_parent('workflow_name')
+            self.workflow_name = self.get_from_parent("workflow_name")
             # Copy extra relevant information to the child
-            self.lead = self.get_from_parent('lead')
+            self.lead = self.get_from_parent("lead")
 
             # We need the submission id to correctly save the files
             files = self.extract_files()
@@ -654,18 +709,18 @@ class ApplicationSubmission(
 
         # add a denormed version of the answer for searching
         # @TODO: remove 'search_data' in favour of 'search_document' for FTS
-        self.search_data = ' '.join(self.prepare_search_values())
+        self.search_data = " ".join(self.prepare_search_values())
         self.search_document = self.prepare_search_vector()
 
         super().save(*args, **kwargs)
 
         if creating:
-            AssignedReviewers = apps.get_model('funds', 'AssignedReviewers')
-            ApplicationRevision = apps.get_model('funds', 'ApplicationRevision')
+            AssignedReviewers = apps.get_model("funds", "AssignedReviewers")
+            ApplicationRevision = apps.get_model("funds", "ApplicationRevision")
 
             self.process_file_data(files)
             AssignedReviewers.objects.bulk_create_reviewers(
-                list(self.get_from_parent('reviewers').all()),
+                list(self.get_from_parent("reviewers").all()),
                 self,
             )
             first_revision = ApplicationRevision.objects.create(
@@ -687,7 +742,7 @@ class ApplicationSubmission(
 
     @property
     def missing_reviewers(self):
-        reviewers_submitted = self.assigned.reviewed().values('reviewer')
+        reviewers_submitted = self.assigned.reviewed().values("reviewer")
         reviewers = self.reviewers.exclude(id__in=reviewers_submitted)
         return reviewers
 
@@ -697,7 +752,9 @@ class ApplicationSubmission(
 
     @property
     def reviewers_not_reviewed(self):
-        return self.missing_reviewers.reviewers().exclude(id__in=self.staff_not_reviewed)
+        return self.missing_reviewers.reviewers().exclude(
+            id__in=self.staff_not_reviewed
+        )
 
     def reviewed_by(self, user):
         return self.assigned.reviewed().filter(reviewer=user).exists()
@@ -716,7 +773,12 @@ class ApplicationSubmission(
         if user in self.reviewers_not_reviewed:
             return True
 
-        if user.is_community_reviewer and self.user != user and self.community_review and not self.reviewed_by(user):
+        if (
+            user.is_community_reviewer
+            and self.user != user
+            and self.community_review
+            and not self.reviewed_by(user)
+        ):
             return True
 
         return False
@@ -747,7 +809,7 @@ class ApplicationSubmission(
             value = field.block.get_searchable_content(field.value, data)
             if value:
                 if isinstance(value, list):
-                    contents.append(', '.join(value))
+                    contents.append(", ".join(value))
                 else:
                     contents.append(value)
         return contents
@@ -756,42 +818,41 @@ class ApplicationSubmission(
         values = self.get_searchable_contents()
 
         # Add named fields into the search index
-        for field in ['full_name', 'email', 'title']:
+        for field in ["full_name", "email", "title"]:
             values.append(getattr(self, field))
         return values
 
     def index_components(self):
         return {
-            'A': ' '.join([f'id:{self.id}', self.title]),
-            'C': ' '.join([self.full_name, self.email]),
-            'B': ' '.join(self.get_searchable_contents()),
+            "A": " ".join([f"id:{self.id}", self.title]),
+            "C": " ".join([self.full_name, self.email]),
+            "B": " ".join(self.get_searchable_contents()),
         }
 
     def prepare_search_vector(self):
         search_vectors = []
         for weight, text in self.index_components().items():
-            search_vectors.append(
-                SearchVector(Value(text), weight=weight)
-            )
+            search_vectors.append(SearchVector(Value(text), weight=weight))
         return reduce(operator.add, search_vectors)
 
-
     def get_absolute_url(self):
-        return reverse('funds:submissions:detail', urlconf='hypha.apply.urls', args=(self.id,))
+        return reverse(
+            "funds:submissions:detail", urlconf="hypha.apply.urls", args=(self.id,)
+        )
 
     def __str__(self):
-        return f'{self.title} from {self.full_name} for {self.page.title}'
+        return f"{self.title} from {self.full_name} for {self.page.title}"
 
     def __repr__(self):
-        return f'<{self.__class__.__name__}: {self.user}, {self.round}, {self.page}>'
+        return f"<{self.__class__.__name__}: {self.user}, {self.round}, {self.page}>"
 
     @property
     def ready_for_determination(self):
-        return self.status in PHASES_MAPPING['ready-for-determination']['statuses']
+        return self.status in PHASES_MAPPING["ready-for-determination"]["statuses"]
 
     @property
     def accepted_for_funding(self):
-        accepted = self.status in PHASES_MAPPING['accepted']['statuses']
+        accepted = self.status in PHASES_MAPPING["accepted"]["statuses"]
         return self.in_final_stage and accepted
 
     @property
@@ -807,16 +868,16 @@ class ApplicationSubmission(
 
     @property
     def in_internal_review_phase(self):
-        return self.status in PHASES_MAPPING['internal-review']['statuses']
+        return self.status in PHASES_MAPPING["internal-review"]["statuses"]
 
     @property
     def in_external_review_phase(self):
-        return self.status in PHASES_MAPPING['external-review']['statuses']
+        return self.status in PHASES_MAPPING["external-review"]["statuses"]
 
     @property
     def is_finished(self):
-        accepted = self.status in PHASES_MAPPING['accepted']['statuses']
-        dismissed = self.status in PHASES_MAPPING['dismissed']['statuses']
+        accepted = self.status in PHASES_MAPPING["accepted"]["statuses"]
+        dismissed = self.status in PHASES_MAPPING["dismissed"]["statuses"]
         return accepted or dismissed
 
     # Methods for accessing data on the submission
@@ -824,9 +885,11 @@ class ApplicationSubmission(
     def get_data(self):
         # Updated for JSONField - Not used but base get_data will error
         form_data = self.form_data.copy()
-        form_data.update({
-            'submit_time': self.submit_time,
-        })
+        form_data.update(
+            {
+                "submit_time": self.submit_time,
+            }
+        )
 
         return form_data
 
@@ -855,20 +918,26 @@ class ApplicationSubmission(
 
     @property
     def joined_screening_statuses(self):
-        return ', '.join([s.title for s in self.screening_statuses.all()])
+        return ", ".join([s.title for s in self.screening_statuses.all()])
 
     @property
     def yes_screening_statuses(self):
-        ScreeningStatus = apps.get_model('funds', 'ScreeningStatus')
+        ScreeningStatus = apps.get_model("funds", "ScreeningStatus")
         return json.dumps(
-            {status.title: status.id for status in ScreeningStatus.objects.filter(yes=True)}
+            {
+                status.title: status.id
+                for status in ScreeningStatus.objects.filter(yes=True)
+            }
         )
 
     @property
     def no_screening_statuses(self):
-        ScreeningStatus = apps.get_model('funds', 'ScreeningStatus')
+        ScreeningStatus = apps.get_model("funds", "ScreeningStatus")
         return json.dumps(
-            {status.title: status.id for status in ScreeningStatus.objects.filter(yes=False)}
+            {
+                status.title: status.id
+                for status in ScreeningStatus.objects.filter(yes=False)
+            }
         )
 
     @property
@@ -880,15 +949,15 @@ class ApplicationSubmission(
 
 @receiver(post_transition, sender=ApplicationSubmission)
 def log_status_update(sender, **kwargs):
-    instance = kwargs['instance']
-    old_phase = instance.workflow[kwargs['source']]
+    instance = kwargs["instance"]
+    old_phase = instance.workflow[kwargs["source"]]
 
-    by = kwargs['method_kwargs']['by']
-    request = kwargs['method_kwargs']['request']
-    notify = kwargs['method_kwargs'].get('notify', True)
+    by = kwargs["method_kwargs"]["by"]
+    request = kwargs["method_kwargs"]["request"]
+    notify = kwargs["method_kwargs"].get("notify", True)
 
     if request and notify:
-        if kwargs['source'] == DRAFT_STATE:
+        if kwargs["source"] == DRAFT_STATE:
             messenger(
                 MESSAGES.NEW_SUBMISSION,
                 request=request,
diff --git a/hypha/apply/funds/models/utils.py b/hypha/apply/funds/models/utils.py
index 62c441c84f16ddcd28daaba52ba54480a9e3fd0d..f7267b5c24131f4bd02b27baeeb421c6314f8bb6 100644
--- a/hypha/apply/funds/models/utils.py
+++ b/hypha/apply/funds/models/utils.py
@@ -27,30 +27,36 @@ REVIEW_GROUPS = [
     REVIEWER_GROUP_NAME,
     COMMUNITY_REVIEWER_GROUP_NAME,
 ]
-LIMIT_TO_STAFF = {'groups__name': STAFF_GROUP_NAME, 'is_active': True}
-LIMIT_TO_REVIEWERS = {'groups__name': REVIEWER_GROUP_NAME, 'is_active': True}
-LIMIT_TO_PARTNERS = {'groups__name': PARTNER_GROUP_NAME, 'is_active': True}
-LIMIT_TO_COMMUNITY_REVIEWERS = {'groups__name': COMMUNITY_REVIEWER_GROUP_NAME, 'is_active': True}
-LIMIT_TO_REVIEWER_GROUPS = {'groups__name__in': REVIEW_GROUPS, 'is_active': True}
+LIMIT_TO_STAFF = {"groups__name": STAFF_GROUP_NAME, "is_active": True}
+LIMIT_TO_REVIEWERS = {"groups__name": REVIEWER_GROUP_NAME, "is_active": True}
+LIMIT_TO_PARTNERS = {"groups__name": PARTNER_GROUP_NAME, "is_active": True}
+LIMIT_TO_COMMUNITY_REVIEWERS = {
+    "groups__name": COMMUNITY_REVIEWER_GROUP_NAME,
+    "is_active": True,
+}
+LIMIT_TO_REVIEWER_GROUPS = {"groups__name__in": REVIEW_GROUPS, "is_active": True}
 
 
 def admin_url(page):
-    return reverse('wagtailadmin_pages:edit', args=(page.id,))
+    return reverse("wagtailadmin_pages:edit", args=(page.id,))
 
 
 class WorkflowHelpers(models.Model):
     """
     Defines the common methods and fields for working with Workflows within Django models
     """
+
     class Meta:
         abstract = True
 
-    WORKFLOW_CHOICES = {
-        name: workflow.name
-        for name, workflow in WORKFLOWS.items()
-    }
+    WORKFLOW_CHOICES = {name: workflow.name for name, workflow in WORKFLOWS.items()}
 
-    workflow_name = models.CharField(choices=WORKFLOW_CHOICES.items(), max_length=100, default='single', verbose_name=_('Workflow'))
+    workflow_name = models.CharField(
+        choices=WORKFLOW_CHOICES.items(),
+        max_length=100,
+        default="single",
+        verbose_name=_("Workflow"),
+    )
 
     @property
     def workflow(self):
@@ -61,6 +67,7 @@ class SubmittableStreamForm(AbstractStreamForm):
     """
     Controls how stream forms are submitted. Any Page allowing submissions should inherit from here.
     """
+
     class Meta:
         abstract = True
 
@@ -92,6 +99,7 @@ class WorkflowStreamForm(WorkflowHelpers, AbstractStreamForm):  # type: ignore
     """
     Defines the common methods and fields for working with Workflows within Wagtail pages
     """
+
     wagtail_reference_index_ignore = True
 
     class Meta:
@@ -125,17 +133,18 @@ class WorkflowStreamForm(WorkflowHelpers, AbstractStreamForm):  # type: ignore
         return super().render_landing_page(request, form_submission, *args, **kwargs)
 
     content_panels = AbstractStreamForm.content_panels + [
-        FieldPanel('workflow_name'),
-        InlinePanel('forms', label=_('Application forms')),
-        InlinePanel('review_forms', label=_('Internal Review Forms')),
+        FieldPanel("workflow_name"),
+        InlinePanel("forms", label=_("Application forms")),
+        InlinePanel("review_forms", label=_("Internal Review Forms")),
         InlinePanel(
-            'external_review_forms',
-            label=_('External Review Forms'), max_num=1,
-            help_text='Add a form to be used by external reviewers.'
+            "external_review_forms",
+            label=_("External Review Forms"),
+            max_num=1,
+            help_text="Add a form to be used by external reviewers.",
         ),
-        InlinePanel('determination_forms', label=_('Determination Forms')),
-        InlinePanel('approval_forms', label=_('Project Approval Form'), max_num=1),
-        InlinePanel('sow_forms', label=_('Project SOW Form'), max_num=1)
+        InlinePanel("determination_forms", label=_("Determination Forms")),
+        InlinePanel("approval_forms", label=_("Project Approval Form"), max_num=1),
+        InlinePanel("sow_forms", label=_("Project SOW Form"), max_num=1),
     ]
 
 
@@ -145,10 +154,14 @@ class EmailForm(AbstractEmailForm):
 
     Email Confirmation Panel should be included to allow admins to make changes.
     """
+
     class Meta:
         abstract = True
 
-    confirmation_text_extra = models.TextField(blank=True, help_text=_('Additional text for the application confirmation message.'))
+    confirmation_text_extra = models.TextField(
+        blank=True,
+        help_text=_("Additional text for the application confirmation message."),
+    )
 
     def send_mail(self, submission):
         # Make sure we don't send emails to users here. Messaging handles that
@@ -157,15 +170,17 @@ class EmailForm(AbstractEmailForm):
     email_confirmation_panels = [
         MultiFieldPanel(
             [
-                FieldRowPanel([
-                    FieldPanel('from_address', classname="col6"),
-                    FieldPanel('to_address', classname="col6"),
-                ]),
-                FieldPanel('subject'),
-                FieldPanel('confirmation_text_extra'),
+                FieldRowPanel(
+                    [
+                        FieldPanel("from_address", classname="col6"),
+                        FieldPanel("to_address", classname="col6"),
+                    ]
+                ),
+                FieldPanel("subject"),
+                FieldPanel("confirmation_text_extra"),
             ],
-            heading=_('Confirmation email'),
+            heading=_("Confirmation email"),
         )
     ]
 
-    email_tab = ObjectList(email_confirmation_panels, heading=_('Confirmation email'))
+    email_tab = ObjectList(email_confirmation_panels, heading=_("Confirmation email"))
diff --git a/hypha/apply/funds/permissions.py b/hypha/apply/funds/permissions.py
index 8c1c8b57bb91920ccf7cd31ff391a2972bb796ae..b8d63e7721d325cfcfa28dd6693da04b438c85ac 100644
--- a/hypha/apply/funds/permissions.py
+++ b/hypha/apply/funds/permissions.py
@@ -19,7 +19,7 @@ def can_edit_submission(user, submission):
     if submission.is_archive:
         return False, "Archived Submission"
 
-    return True, ''
+    return True, ""
 
 
 def can_bulk_delete_submissions(user) -> bool:
@@ -75,6 +75,14 @@ def can_access_drafts(user):
     return False
 
 
+def can_export_submissions(user):
+    if user.is_apply_staff and settings.SUBMISSIONS_EXPORT_ACCESS_STAFF:
+        return True
+    if user.is_apply_staff_admin and settings.SUBMISSIONS_EXPORT_ACCESS_STAFF_ADMIN:
+        return True
+    return False
+
+
 def is_user_has_access_to_view_submission(user, submission):
     if not user.is_authenticated:
         return False, "Login Required"
@@ -83,18 +91,18 @@ def is_user_has_access_to_view_submission(user, submission):
         return False, "Archived Submission"
 
     if user.is_apply_staff or submission.user == user or user.is_reviewer:
-        return True, ''
+        return True, ""
 
     if user.is_partner and submission.partners.filter(pk=user.pk).exists():
-        return True, ''
+        return True, ""
 
     if user.is_community_reviewer and submission.community_review:
-        return True, ''
+        return True, ""
 
-    return False, ''
+    return False, ""
 
 
 permissions_map = {
-    'submission_view': is_user_has_access_to_view_submission,
-    'submission_edit': can_edit_submission,
+    "submission_view": is_user_has_access_to_view_submission,
+    "submission_edit": can_edit_submission,
 }
diff --git a/hypha/apply/funds/reviewers/services.py b/hypha/apply/funds/reviewers/services.py
index eff2be17c7970b30a95e8d53257ccbc0307cbf3c..84ff8e0ea70e3227d96eba2446751f24afb9d5c8 100644
--- a/hypha/apply/funds/reviewers/services.py
+++ b/hypha/apply/funds/reviewers/services.py
@@ -8,12 +8,10 @@ User = get_user_model()
 
 
 def get_all_reviewers(*args, **kwargs) -> QuerySet:
-    """All assigned reviewers, staff or admin.
-    """
+    """All assigned reviewers, staff or admin."""
     q_obj = (
-        Q(submissions_reviewer__isnull=False) |
-        Q(groups__name=STAFF_GROUP_NAME) |
-        Q(is_superuser=True)
+        Q(submissions_reviewer__isnull=False)
+        | Q(groups__name=STAFF_GROUP_NAME)
+        | Q(is_superuser=True)
     )
     return User.objects.filter(q_obj).distinct()
-
diff --git a/hypha/apply/funds/services.py b/hypha/apply/funds/services.py
index 4221f95efce54e9ecee6542e56a61033c8c9542b..8d372e28b26809d53b50cd18d5594b3fff068985 100644
--- a/hypha/apply/funds/services.py
+++ b/hypha/apply/funds/services.py
@@ -16,7 +16,7 @@ from django.db.models.functions import Coalesce
 from django.http import HttpRequest
 
 from hypha.apply.activity.messaging import MESSAGES, messenger
-from hypha.apply.activity.models import Activity
+from hypha.apply.activity.models import Activity, Event
 from hypha.apply.funds.models.assigned_reviewers import AssignedReviewers
 from hypha.apply.funds.workflow import INITIAL_STATE
 from hypha.apply.review.options import DISAGREE, MAYBE
@@ -58,6 +58,12 @@ def bulk_delete_submissions(
     Returns:
         QuerySet of submissions that have been archived
     """
+    # delete NEW_SUBMISSION events for all submissions
+    submission_ids = submissions.values_list("id", flat=True)
+    Event.objects.filter(
+        type=MESSAGES.NEW_SUBMISSION, object_id__in=submission_ids
+    ).delete()
+    # delete submissions
     submissions.delete()
     messenger(
         MESSAGES.BATCH_DELETE_SUBMISSION,
@@ -141,14 +147,14 @@ def bulk_update_reviewers(
 
 
 def annotate_comments_count(submissions: QuerySet, user) -> QuerySet:
-    comments = Activity.comments.filter(submission=OuterRef('id')).visible_to(user)
+    comments = Activity.comments.filter(submission=OuterRef("id")).visible_to(user)
     return submissions.annotate(
         comment_count=Coalesce(
             Subquery(
-                comments.values('submission')
+                comments.values("submission")
                 .order_by()
-                .annotate(count=Count('pk'))
-                .values('count'),
+                .annotate(count=Count("pk"))
+                .values("count"),
                 output_field=IntegerField(),
             ),
             0,
@@ -167,9 +173,9 @@ def set_status_after_reviewers_assigned(submission, updated_by, request) -> None
         if submission.status == INITIAL_STATE:
             # Automatically transition the application to "Internal review".
             action = submission.workflow.stepped_phases[2][0].name
-        elif submission.status == 'proposal_discussion':
+        elif submission.status == "proposal_discussion":
             # Automatically transition the proposal to "Internal review".
-            action = 'proposal_internal_review'
+            action = "proposal_internal_review"
 
         # If action is set run perform_transition().
         if action:
@@ -185,72 +191,72 @@ def set_status_after_reviewers_assigned(submission, updated_by, request) -> None
 
 
 def annotate_review_recommendation_and_count(submissions: QuerySet) -> QuerySet:
-    Review = apps.get_model('review', 'Review')
-    ReviewOpinion = apps.get_model('review', 'ReviewOpinion')
+    Review = apps.get_model("review", "Review")
+    ReviewOpinion = apps.get_model("review", "ReviewOpinion")
     AssignedReviewers = apps.get_model("funds", "AssignedReviewers")
 
-    reviews = Review.objects.filter(submission=OuterRef('id'))
-    opinions = ReviewOpinion.objects.filter(review__submission=OuterRef('id'))
-    reviewers = AssignedReviewers.objects.filter(submission=OuterRef('id'))
+    reviews = Review.objects.filter(submission=OuterRef("id"))
+    opinions = ReviewOpinion.objects.filter(review__submission=OuterRef("id"))
+    reviewers = AssignedReviewers.objects.filter(submission=OuterRef("id"))
 
     submissions = submissions.annotate(
         review_count=Subquery(
-            reviewers.values('submission').annotate(count=Count('pk')).values('count'),
+            reviewers.values("submission").annotate(count=Count("pk")).values("count"),
             output_field=IntegerField(),
         ),
         review_staff_count=Subquery(
             reviewers.staff()
-            .values('submission')
-            .annotate(count=Count('pk'))
-            .values('count'),
+            .values("submission")
+            .annotate(count=Count("pk"))
+            .values("count"),
             output_field=IntegerField(),
         ),
         review_submitted_count=Subquery(
             reviewers.reviewed()
-            .values('submission')
-            .annotate(count=Count('pk', distinct=True))
-            .values('count'),
+            .values("submission")
+            .annotate(count=Count("pk", distinct=True))
+            .values("count"),
             output_field=IntegerField(),
         ),
         opinion_disagree=Subquery(
             opinions.filter(opinion=DISAGREE)
-            .values('review__submission')
-            .annotate(count=Count('*'))
-            .values('count')[:1],
+            .values("review__submission")
+            .annotate(count=Count("*"))
+            .values("count")[:1],
             output_field=IntegerField(),
         ),
         review_recommendation=Case(
             When(opinion_disagree__gt=0, then=MAYBE),
             default=Subquery(
                 reviews.submitted()
-                .values('submission')
+                .values("submission")
                 .annotate(
-                    calc_recommendation=Sum('recommendation') / Count('recommendation'),
+                    calc_recommendation=Sum("recommendation") / Count("recommendation"),
                 )
-                .values('calc_recommendation'),
+                .values("calc_recommendation"),
                 output_field=IntegerField(),
             ),
         ),
     ).prefetch_related(
         Prefetch(
-            'assigned',
+            "assigned",
             queryset=AssignedReviewers.objects.reviewed()
             .review_order()
             .select_related(
-                'reviewer',
+                "reviewer",
             )
             .prefetch_related(
                 Prefetch(
-                    'review__opinions',
-                    queryset=ReviewOpinion.objects.select_related('author'),
+                    "review__opinions",
+                    queryset=ReviewOpinion.objects.select_related("author"),
                 ),
             ),
-            to_attr='has_reviewed',
+            to_attr="has_reviewed",
         ),
         Prefetch(
-            'assigned',
+            "assigned",
             queryset=AssignedReviewers.objects.not_reviewed().staff(),
-            to_attr='hasnt_reviewed',
+            to_attr="hasnt_reviewed",
         ),
     )
     return submissions
diff --git a/hypha/apply/funds/tables.py b/hypha/apply/funds/tables.py
index 947f990e81c82bc91ada1f50b8290938e5f357ff..cf45b752711bdaf9d0c86443d65ee14e0d42728f 100644
--- a/hypha/apply/funds/tables.py
+++ b/hypha/apply/funds/tables.py
@@ -1,6 +1,5 @@
 import json
 import re
-import textwrap
 
 import django_filters as filters
 import django_tables2 as tables
@@ -31,25 +30,20 @@ User = get_user_model()
 
 def review_filter_for_user(user):
     review_states = set(get_review_active_statuses(user))
-    statuses = [
-        name
-        for name, status in STATUSES.items()
-        if review_states & status
-    ]
-    return [
-        slugify(status)
-        for status in statuses
-    ]
+    statuses = [name for name, status in STATUSES.items() if review_states & status]
+    return [slugify(status) for status in statuses]
 
 
 def make_row_class(record):
-    css_class = 'submission-meta__row' if record.next else 'all-submissions-table__parent'
-    css_class += '' if record.active else ' is-inactive'
+    css_class = (
+        "submission-meta__row" if record.next else "all-submissions-table__parent"
+    )
+    css_class += "" if record.active else " is-inactive"
     return css_class
 
 
 def render_actions(table, record):
-    user = table.context['user']
+    user = table.context["user"]
     actions = record.get_actions_for_user(user)
     return json.dumps([slugify(action) for _, action in actions])
 
@@ -59,7 +53,7 @@ def render_title(record):
         title = record.title
     except AttributeError:
         title = record.submission.title
-    return textwrap.shorten(title, width=30, placeholder="...")
+    return title
 
 
 def render_reviewer_link(record):
@@ -68,42 +62,78 @@ def render_reviewer_link(record):
 
 class SubmissionsTable(tables.Table):
     """Base table for listing submissions, do not include admin data to this table"""
-    title = tables.LinkColumn('funds:submissions:detail', text=render_title, args=[A('pk')], orderable=True, attrs={'td': {'data-title-tooltip': lambda record: record.title, 'class': 'js-title'}})
-    submit_time = tables.DateColumn(verbose_name=_('Submitted'))
-    phase = tables.Column(verbose_name=_('Status'), order_by=('status',), attrs={'td': {'data-actions': render_actions, 'class': 'js-actions'}})
-    stage = tables.Column(verbose_name=_('Type'), order_by=('status',))
-    fund = tables.Column(verbose_name=_('Fund'), accessor='page')
-    comments = tables.Column(accessor='comment_count', verbose_name=_('Comments'))
-    last_update = tables.DateColumn(accessor="last_update", verbose_name=_('Last updated'))
+
+    title = tables.LinkColumn(
+        "funds:submissions:detail",
+        text=render_title,
+        args=[A("pk")],
+        orderable=True,
+        attrs={
+            "td": {
+                "class": "js-title",
+            },
+            "a": {
+                "data-tippy-content": lambda record: record.title,
+                "data-tippy-placement": "top",
+                # Use after:content-[''] after:block to hide the default browser tooltip on Safari
+                # https://stackoverflow.com/a/43915246
+                "class": "truncate inline-block w-[calc(100%-2rem)] after:content-[''] after:block",
+            },
+        },
+    )
+    submit_time = tables.DateColumn(verbose_name=_("Submitted"))
+    phase = tables.Column(
+        verbose_name=_("Status"),
+        order_by=("status",),
+        attrs={"td": {"data-actions": render_actions, "class": "js-actions"}},
+    )
+    stage = tables.Column(verbose_name=_("Type"), order_by=("status",))
+    fund = tables.Column(verbose_name=_("Fund"), accessor="page")
+    comments = tables.Column(accessor="comment_count", verbose_name=_("Comments"))
+    last_update = tables.DateColumn(
+        accessor="last_update", verbose_name=_("Last updated")
+    )
 
     class Meta:
         model = ApplicationSubmission
-        order_by = ('-last_update',)
-        fields = ('title', 'phase', 'stage', 'fund', 'round', 'submit_time', 'last_update')
-        sequence = fields + ('comments',)
-        template_name = 'funds/tables/table.html'
+        order_by = ("-last_update",)
+        fields = (
+            "title",
+            "phase",
+            "stage",
+            "fund",
+            "round",
+            "submit_time",
+            "last_update",
+        )
+        sequence = fields + ("comments",)
+        template_name = "funds/tables/table.html"
         row_attrs = {
-            'class': make_row_class,
-            'data-record-id': lambda record: record.id,
-            'data-archived': lambda record: record.is_archive
+            "class": make_row_class,
+            "data-record-id": lambda record: record.id,
+            "data-archived": lambda record: record.is_archive,
         }
-        attrs = {'class': 'all-submissions-table'}
-        empty_text = _('No submissions available')
+        attrs = {"class": "all-submissions-table"}
+        empty_text = _("No submissions available")
 
     def render_user(self, value):
         return value.get_full_name()
 
     def render_phase(self, value):
-        return format_html('<span>{}</span>', value)
+        return format_html("<span>{}</span>", value)
 
     def order_last_update(self, qs, desc):
-        update_order = getattr(F('last_update'), 'desc' if desc else 'asc')(nulls_last=True)
+        update_order = getattr(F("last_update"), "desc" if desc else "asc")(
+            nulls_last=True
+        )
 
-        qs = qs.order_by(update_order, 'submit_time')
+        qs = qs.order_by(update_order, "submit_time")
         return qs, True
 
     def get_column_class_names(self, classes_set, bound_column):
-        classes_set = super(SubmissionsTable, self).get_column_class_names(classes_set, bound_column)
+        classes_set = super(SubmissionsTable, self).get_column_class_names(
+            classes_set, bound_column
+        )
         classes_set.add(bound_column.name)
         return classes_set
 
@@ -124,7 +154,7 @@ class LabeledCheckboxColumn(tables.CheckBoxColumn):
     @property
     def header(self):
         checkbox = super().header
-        return self.wrap_with_label(checkbox, 'selectall')
+        return self.wrap_with_label(checkbox, "selectall")
 
     def render(self, value, record, bound_column):
         checkbox = super().render(value=value, record=record, bound_column=bound_column)
@@ -132,32 +162,48 @@ class LabeledCheckboxColumn(tables.CheckBoxColumn):
 
 
 class BaseAdminSubmissionsTable(SubmissionsTable):
-    lead = tables.Column(order_by=('lead__full_name',))
-    reviews_stats = tables.TemplateColumn(template_name='funds/tables/column_reviews.html', verbose_name=mark_safe("Reviews<div>Comp. <span class=\"counts-separator\">/</span> Assgn.</div>"), orderable=False)
-    screening_status = tables.Column(verbose_name=_('Screening'), accessor='screening_statuses')
+    lead = tables.Column(order_by=("lead__full_name",))
+    reviews_stats = tables.TemplateColumn(
+        template_name="funds/tables/column_reviews.html",
+        verbose_name=mark_safe(
+            'Reviews<div>Comp. <span class="counts-separator">/</span> Assgn.</div>'
+        ),
+        orderable=False,
+    )
+    screening_status = tables.Column(
+        verbose_name=_("Screening"), accessor="screening_statuses"
+    )
+    organization_name = tables.Column()
 
     class Meta(SubmissionsTable.Meta):
-        fields = ('title', 'phase', 'stage', 'fund', 'round', 'lead', 'submit_time', 'last_update', 'screening_status', 'reviews_stats')  # type: ignore
-        sequence = fields + ('comments',)
+        fields = ("title", "phase", "stage", "fund", "round", "lead", "submit_time", "last_update", "screening_status", "reviews_stats", "organization_name")  # type: ignore
+        sequence = fields + ("comments",)
 
     def render_lead(self, value):
-        return format_html('<span>{}</span>', value)
+        return format_html("<span>{}</span>", value)
 
     def render_screening_status(self, value):
         try:
             status = value.get(default=True).title
         except ScreeningStatus.DoesNotExist:
-            return format_html('<span>{}</span>', 'Awaiting')
+            return format_html("<span>{}</span>", "Awaiting")
         else:
-            return format_html('<span>{}</span>', status)
+            return format_html("<span>{}</span>", status)
 
 
 class AdminSubmissionsTable(BaseAdminSubmissionsTable):
     """Adds admin only columns to the submissions table"""
-    selected = LabeledCheckboxColumn(accessor=A('pk'), attrs={'input': {'class': 'js-batch-select'}, 'th__input': {'class': 'js-batch-select-all'}})
+
+    selected = LabeledCheckboxColumn(
+        accessor=A("pk"),
+        attrs={
+            "input": {"class": "js-batch-select"},
+            "th__input": {"class": "js-batch-select-all"},
+        },
+    )
 
     class Meta(BaseAdminSubmissionsTable.Meta):
-        fields = ('selected', *BaseAdminSubmissionsTable.Meta.fields)
+        fields = ("selected", *BaseAdminSubmissionsTable.Meta.fields)
         sequence = fields
 
 
@@ -167,21 +213,22 @@ class SummarySubmissionsTable(BaseAdminSubmissionsTable):
 
 
 class SummarySubmissionsTableWithRole(BaseAdminSubmissionsTable):
-    """ Adds Role Assigned to the 'Waiting for My Review' table """
-    role_icon = tables.Column(verbose_name=_('Role'))
+    """Adds Role Assigned to the 'Waiting for My Review' table"""
+
+    role_icon = tables.Column(verbose_name=_("Role"))
 
     class Meta(BaseAdminSubmissionsTable.Meta):
-        sequence = BaseAdminSubmissionsTable.Meta.fields + ('role_icon', 'comments')
+        sequence = BaseAdminSubmissionsTable.Meta.fields + ("role_icon", "comments")
         orderable = False
 
     def render_role_icon(self, value):
         if value:
             image = CustomImage.objects.filter(id=value).first()
             if image:
-                filter_spec = 'fill-20x20'
+                filter_spec = "fill-20x20"
                 return generate_image_tag(image, filter_spec)
 
-        return ''
+        return ""
 
 
 def get_used_rounds(request):
@@ -189,7 +236,7 @@ def get_used_rounds(request):
 
 
 def get_used_rounds_from_dataset(dataset):
-    return Round.objects.filter(id__in=dataset.values('round')).distinct()
+    return Round.objects.filter(id__in=dataset.values("round")).distinct()
 
 
 def get_used_funds(request):
@@ -198,7 +245,7 @@ def get_used_funds(request):
 
 
 def get_used_funds_from_dataset(dataset):
-    return Page.objects.filter(id__in=dataset.values('page')).distinct()
+    return Page.objects.filter(id__in=dataset.values("page")).distinct()
 
 
 def get_round_leads(request):
@@ -206,49 +253,61 @@ def get_round_leads(request):
 
 
 def get_round_leads_from_dataset(dataset):
-    return User.objects.filter(id__in=dataset.values('lead')).distinct()
+    return User.objects.filter(id__in=dataset.values("lead")).distinct()
 
 
 def get_reviewers_from_dataset(dataset):
-    """ All assigned reviewers, not including Staff and Admin because we want a list of reviewers only"""
-    return User.objects.filter(id__in=dataset.values('reviewers')).distinct()
+    """All assigned reviewers, not including Staff and Admin because we want a list of reviewers only"""
+    return User.objects.filter(id__in=dataset.values("reviewers")).distinct()
 
 
 def get_screening_statuses(request):
     return ScreeningStatus.objects.filter(
-        id__in=ApplicationSubmission.objects.all().values('screening_statuses__id').distinct('screening_statuses__id'))
+        id__in=ApplicationSubmission.objects.all()
+        .values("screening_statuses__id")
+        .distinct("screening_statuses__id")
+    )
 
 
 def get_screening_statuses_from_dataset(dataset):
     return ScreeningStatus.objects.filter(
-        id__in=dataset.values('screening_statuses__id')
+        id__in=dataset.values("screening_statuses__id")
     ).distinct()
 
 
 def get_meta_terms(request):
     return MetaTerm.objects.filter(
         filter_on_dashboard=True,
-        id__in=ApplicationSubmission.objects.all().values('meta_terms__id').distinct('meta_terms__id'))
+        id__in=ApplicationSubmission.objects.all()
+        .values("meta_terms__id")
+        .distinct("meta_terms__id"),
+    )
 
 
 def get_meta_terms_from_dataset(dataset):
     return MetaTerm.objects.filter(
-        filter_on_dashboard=True,
-        id__in=dataset.values('meta_terms__id')).distinct()
+        filter_on_dashboard=True, id__in=dataset.values("meta_terms__id")
+    ).distinct()
 
 
 class Select2CheckboxWidgetMixin(filters.Filter):
     def __init__(self, *args, **kwargs):
-        label = kwargs.get('label')
-        kwargs.setdefault('widget', Select2MultiCheckboxesWidget(attrs={'data-placeholder': label}))
+        label = kwargs.get("label")
+        kwargs.setdefault(
+            "widget", Select2MultiCheckboxesWidget(attrs={"data-placeholder": label})
+        )
         super().__init__(*args, **kwargs)
 
 
-class Select2MultipleChoiceFilter(Select2CheckboxWidgetMixin, filters.MultipleChoiceFilter):
+class Select2MultipleChoiceFilter(
+    Select2CheckboxWidgetMixin, filters.MultipleChoiceFilter
+):
     pass
 
 
-class Select2ModelMultipleChoiceFilter(Select2MultipleChoiceFilter, filters.ModelMultipleChoiceFilter):
+class Select2ModelMultipleChoiceFilter(
+    Select2MultipleChoiceFilter, filters.ModelMultipleChoiceFilter
+):
     pass
 
 
@@ -260,14 +319,13 @@ class StatusMultipleChoiceFilter(Select2MultipleChoiceFilter):
             if not limit_to or self.has_any(statuses, limit_to)
         ]
         self.status_map = {
-            slugify(name): list(status)
-            for name, status in STATUSES.items()
+            slugify(name): list(status) for name, status in STATUSES.items()
         }
         super().__init__(
             *args,
-            field_name='status',
+            field_name="status",
             choices=choices,
-            label=_('Statuses'),
+            label=_("Statuses"),
             **kwargs,
         )
 
@@ -275,51 +333,66 @@ class StatusMultipleChoiceFilter(Select2MultipleChoiceFilter):
         return any(item in second for item in first)
 
     def get_filter_predicate(self, v):
-        return {f'{ self.field_name }__in': self.status_map.get(v, [])}
+        return {f"{ self.field_name }__in": self.status_map.get(v, [])}
 
 
 class SubmissionFilter(filters.FilterSet):
-    fund = Select2ModelMultipleChoiceFilter(field_name='page', queryset=get_used_funds, label=_('Funds'))
-    round = Select2ModelMultipleChoiceFilter(queryset=get_used_rounds, label=_('Rounds'))
-    lead = Select2ModelMultipleChoiceFilter(queryset=get_round_leads, label=_('Leads'))
-    screening_statuses = Select2ModelMultipleChoiceFilter(queryset=get_screening_statuses, label=_('Screening'), null_label=_('No Status'))
-    reviewers = Select2ModelMultipleChoiceFilter(queryset=get_all_reviewers, label=_('Reviewers'))
+    fund = Select2ModelMultipleChoiceFilter(
+        field_name="page", queryset=get_used_funds, label=_("Funds")
+    )
+    round = Select2ModelMultipleChoiceFilter(
+        queryset=get_used_rounds, label=_("Rounds")
+    )
+    lead = Select2ModelMultipleChoiceFilter(queryset=get_round_leads, label=_("Leads"))
+    screening_statuses = Select2ModelMultipleChoiceFilter(
+        queryset=get_screening_statuses, label=_("Screening"), null_label=_("No Status")
+    )
+    reviewers = Select2ModelMultipleChoiceFilter(
+        queryset=get_all_reviewers, label=_("Reviewers")
+    )
     category_options = Select2MultipleChoiceFilter(
-        choices=[], label=_('Category'),
-        method='filter_category_options'
+        choices=[], label=_("Category"), method="filter_category_options"
+    )
+    meta_terms = Select2ModelMultipleChoiceFilter(
+        queryset=get_meta_terms, label=_("Terms")
     )
-    meta_terms = Select2ModelMultipleChoiceFilter(queryset=get_meta_terms, label=_('Terms'))
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('status', 'fund', 'round')
+        fields = ("status", "fund", "round")
 
     def __init__(self, *args, exclude=None, limit_statuses=None, **kwargs):
         if exclude is None:
             exclude = []
 
-        qs = kwargs.get('queryset')
+        qs = kwargs.get("queryset")
 
-        archived = kwargs.pop('archived') if 'archived' in kwargs.keys() else None
+        archived = kwargs.pop("archived") if "archived" in kwargs.keys() else None
         if archived is not None:
             archived = int(archived) if archived else None
 
         super().__init__(*args, **kwargs)
 
-        reviewers_qs = get_reviewers_from_dataset(dataset=qs.exclude(reviewers__isnull=True))
+        reviewers_qs = get_reviewers_from_dataset(
+            dataset=qs.exclude(reviewers__isnull=True)
+        )
         if archived is not None and archived == 0:
-            reviewers_qs = get_reviewers_from_dataset(dataset=qs.filter(is_archive=archived).exclude(reviewers__isnull=True))
+            reviewers_qs = get_reviewers_from_dataset(
+                dataset=qs.filter(is_archive=archived).exclude(reviewers__isnull=True)
+            )
             qs = qs.filter(is_archive=archived)
 
-        self.filters['fund'].queryset = get_used_funds_from_dataset(dataset=qs)
-        self.filters['round'].queryset = get_used_rounds_from_dataset(dataset=qs)
-        self.filters['lead'].queryset = get_round_leads_from_dataset(dataset=qs)
-        self.filters['screening_statuses'].queryset = get_screening_statuses_from_dataset(dataset=qs)
-        self.filters['reviewers'].queryset = reviewers_qs
-        self.filters['meta_terms'].queryset = get_meta_terms_from_dataset(dataset=qs)
-
-        self.filters['status'] = StatusMultipleChoiceFilter(limit_to=limit_statuses)
-        self.filters['category_options'].extra['choices'] = [
+        self.filters["fund"].queryset = get_used_funds_from_dataset(dataset=qs)
+        self.filters["round"].queryset = get_used_rounds_from_dataset(dataset=qs)
+        self.filters["lead"].queryset = get_round_leads_from_dataset(dataset=qs)
+        self.filters[
+            "screening_statuses"
+        ].queryset = get_screening_statuses_from_dataset(dataset=qs)
+        self.filters["reviewers"].queryset = reviewers_qs
+        self.filters["meta_terms"].queryset = get_meta_terms_from_dataset(dataset=qs)
+
+        self.filters["status"] = StatusMultipleChoiceFilter(limit_to=limit_statuses)
+        self.filters["category_options"].extra["choices"] = [
             (option.id, option.value)
             for option in Option.objects.filter(category__filter_on_dashboard=True)
         ]
@@ -338,12 +411,14 @@ class SubmissionFilter(filters.FilterSet):
         And then use those category fields to filter submissions with their form_data.
         """
         query = Q()
-        submission_data = queryset.values('form_fields', 'form_data').distinct()
+        submission_data = queryset.values("form_fields", "form_data").distinct()
         for submission in submission_data:
-            for field in submission['form_fields']:
+            for field in submission["form_fields"]:
                 if isinstance(field.block, CategoryQuestionBlock):
                     try:
-                        category_options = category_ids = submission['form_data'][field.id]
+                        category_options = category_ids = submission["form_data"][
+                            field.id
+                        ]
                     except KeyError:
                         include_in_filter = False
                     else:
@@ -354,15 +429,17 @@ class SubmissionFilter(filters.FilterSet):
                     # If yes then those submissions should be filtered in the list
                     if include_in_filter:
                         kwargs = {
-                            '{0}__{1}'.format('form_data', field.id): category_ids
+                            "{0}__{1}".format("form_data", field.id): category_ids
                         }
                         query |= Q(**kwargs)
         return queryset.filter(query)
 
 
 class SubmissionFilterAndSearch(SubmissionFilter):
-    query = filters.CharFilter(method='search_data_and_id', widget=forms.HiddenInput)
-    archived = filters.BooleanFilter(field_name='is_archive', widget=forms.HiddenInput, method='filter_archived')
+    query = filters.CharFilter(method="search_data_and_id", widget=forms.HiddenInput)
+    archived = filters.BooleanFilter(
+        field_name="is_archive", widget=forms.HiddenInput, method="filter_archived"
+    )
 
     def search_data_and_id(self, queryset, name, value):
         possible_id = re.search("^#(\\d+)$", value.strip())
@@ -378,12 +455,16 @@ class SubmissionFilterAndSearch(SubmissionFilter):
 
 
 class SubmissionDashboardFilter(filters.FilterSet):
-    round = Select2ModelMultipleChoiceFilter(queryset=get_used_rounds, label=_('Rounds'))
-    fund = Select2ModelMultipleChoiceFilter(field_name='page', queryset=get_used_funds, label=_('Funds'))
+    round = Select2ModelMultipleChoiceFilter(
+        queryset=get_used_rounds, label=_("Rounds")
+    )
+    fund = Select2ModelMultipleChoiceFilter(
+        field_name="page", queryset=get_used_funds, label=_("Funds")
+    )
 
     class Meta:
         model = ApplicationSubmission
-        fields = ('fund', 'round')
+        fields = ("fund", "round")
 
     def __init__(self, *args, exclude=None, limit_statuses=None, **kwargs):
         if exclude is None:
@@ -398,58 +479,72 @@ class SubmissionDashboardFilter(filters.FilterSet):
 
 
 class SubmissionReviewerFilterAndSearch(SubmissionDashboardFilter):
-    query = filters.CharFilter(field_name='search_data', lookup_expr="icontains", widget=forms.HiddenInput)
+    query = filters.CharFilter(
+        field_name="search_data", lookup_expr="icontains", widget=forms.HiddenInput
+    )
 
 
 class RoundsTable(tables.Table):
-    title = tables.LinkColumn('funds:rounds:detail', args=[A('pk')], orderable=True, text=lambda record: record.title)
-    fund = tables.Column(accessor=A('specific__fund'))
+    title = tables.LinkColumn(
+        "funds:rounds:detail",
+        args=[A("pk")],
+        orderable=True,
+        text=lambda record: record.title,
+    )
+    fund = tables.Column(accessor=A("specific__fund"))
     lead = tables.Column()
     start_date = tables.Column()
     end_date = tables.Column()
-    progress = tables.Column(verbose_name=_('Determined'))
+    progress = tables.Column(verbose_name=_("Determined"))
 
     class Meta:
-        fields = ('title', 'fund', 'lead', 'start_date', 'end_date', 'progress')
-        attrs = {'class': 'responsive-table'}
+        fields = ("title", "fund", "lead", "start_date", "end_date", "progress")
+        attrs = {"class": "responsive-table"}
 
     def render_lead(self, value):
-        return format_html('<span>{}</span>', value)
+        return format_html("<span>{}</span>", value)
 
     def render_progress(self, record):
-        return f'{record.progress}%'
+        return f"{record.progress}%"
 
     def _field_order(self, field, desc):
-        return getattr(F(f'{field}'), 'desc' if desc else 'asc')(nulls_last=True)
+        return getattr(F(f"{field}"), "desc" if desc else "asc")(nulls_last=True)
 
     def order_start_date(self, qs, desc):
-        return qs.order_by(self._field_order('start_date', desc)), True
+        return qs.order_by(self._field_order("start_date", desc)), True
 
     def order_end_date(self, qs, desc):
-        return qs.order_by(self._field_order('end_date', desc)), True
+        return qs.order_by(self._field_order("end_date", desc)), True
 
     def order_fund(self, qs, desc):
-        return qs.order_by(self._field_order('fund', desc)), True
+        return qs.order_by(self._field_order("fund", desc)), True
 
     def order_progress(self, qs, desc):
-        return qs.order_by(self._field_order('progress', desc)), True
+        return qs.order_by(self._field_order("progress", desc)), True
 
     def get_column_class_names(self, classes_set, bound_column):
-        classes_set = super(RoundsTable, self).get_column_class_names(classes_set, bound_column)
+        classes_set = super(RoundsTable, self).get_column_class_names(
+            classes_set, bound_column
+        )
         classes_set.add(bound_column.name)
         return classes_set
 
 
 class ActiveRoundFilter(Select2MultipleChoiceFilter):
     def __init__(self, *args, **kwargs):
-        super().__init__(self, *args, choices=[('active', 'Active'), ('inactive', 'Inactive')], **kwargs)
+        super().__init__(
+            self,
+            *args,
+            choices=[("active", "Active"), ("inactive", "Inactive")],
+            **kwargs,
+        )
 
     def filter(self, qs, value):
         if value is None or len(value) != 1:
             return qs
 
         value = value[0]
-        if value == 'active':
+        if value == "active":
             return qs.active()
         else:
             return qs.inactive()
@@ -457,26 +552,31 @@ class ActiveRoundFilter(Select2MultipleChoiceFilter):
 
 class OpenRoundFilter(Select2MultipleChoiceFilter):
     def __init__(self, *args, **kwargs):
-        super().__init__(self, *args, choices=[('open', 'Open'), ('closed', 'Closed'), ('new', 'Not Started')], **kwargs)
+        super().__init__(
+            self,
+            *args,
+            choices=[("open", "Open"), ("closed", "Closed"), ("new", "Not Started")],
+            **kwargs,
+        )
 
     def filter(self, qs, value):
         if value is None or len(value) != 1:
             return qs
 
         value = value[0]
-        if value == 'closed':
+        if value == "closed":
             return qs.closed()
-        if value == 'new':
+        if value == "new":
             return qs.new()
 
         return qs.open()
 
 
 class RoundsFilter(filters.FilterSet):
-    fund = Select2ModelMultipleChoiceFilter(queryset=get_used_funds, label=_('Funds'))
-    lead = Select2ModelMultipleChoiceFilter(queryset=get_round_leads, label=_('Leads'))
-    active = ActiveRoundFilter(label=_('Active'))
-    round_state = OpenRoundFilter(label=_('Open'))
+    fund = Select2ModelMultipleChoiceFilter(queryset=get_used_funds, label=_("Funds"))
+    lead = Select2ModelMultipleChoiceFilter(queryset=get_round_leads, label=_("Leads"))
+    active = ActiveRoundFilter(label=_("Active"))
+    round_state = OpenRoundFilter(label=_("Open"))
 
 
 class ReviewerLeaderboardFilterForm(forms.ModelForm):
@@ -489,82 +589,115 @@ class ReviewerLeaderboardFilterForm(forms.ModelForm):
     with User objects.  So this form converts back to a list of User PKs using
     the clean_reviewer method.
     """
+
     class Meta:
         fields = ["id"]
         model = User
 
     def clean_reviewer(self):
-        return [u.id for u in self.cleaned_data['reviewer']]
+        return [u.id for u in self.cleaned_data["reviewer"]]
 
 
 class ReviewerLeaderboardFilter(filters.FilterSet):
-    query = filters.CharFilter(field_name='full_name', lookup_expr="icontains", widget=forms.HiddenInput)
+    query = filters.CharFilter(
+        field_name="full_name", lookup_expr="icontains", widget=forms.HiddenInput
+    )
 
     reviewer = Select2ModelMultipleChoiceFilter(
-        field_name='pk',
-        label=_('Reviewers'),
+        field_name="pk",
+        label=_("Reviewers"),
         queryset=get_all_reviewers,
     )
     funds = Select2ModelMultipleChoiceFilter(
-        field_name='submission__page',
-        label=_('Funds'),
+        field_name="submission__page",
+        label=_("Funds"),
         queryset=get_used_funds,
     )
     rounds = Select2ModelMultipleChoiceFilter(
-        field_name='submission__round',
-        label=_('Rounds'),
+        field_name="submission__round",
+        label=_("Rounds"),
         queryset=get_used_rounds,
     )
 
     class Meta:
         fields = [
-            'reviewer',
-            'funds',
-            'rounds',
+            "reviewer",
+            "funds",
+            "rounds",
         ]
         form = ReviewerLeaderboardFilterForm
         model = User
 
 
 class ReviewerLeaderboardTable(tables.Table):
-    full_name = tables.LinkColumn('funds:submissions:reviewer_leaderboard_detail', args=[A('pk')], orderable=True, verbose_name=_('Reviewer'), attrs={'td': {'class': 'title'}})
+    full_name = tables.LinkColumn(
+        "funds:submissions:reviewer_leaderboard_detail",
+        args=[A("pk")],
+        orderable=True,
+        verbose_name=_("Reviewer"),
+        attrs={"td": {"class": "title"}},
+    )
 
     class Meta:
         model = User
         fields = [
-            'full_name',
-            'ninety_days',
-            'this_year',
-            'last_year',
-            'total',
+            "full_name",
+            "ninety_days",
+            "this_year",
+            "last_year",
+            "total",
         ]
-        order_by = ('-ninety_days',)
-        attrs = {'class': 'all-reviews-table'}
-        empty_text = _('No reviews available')
+        order_by = ("-ninety_days",)
+        attrs = {"class": "all-reviews-table"}
+        empty_text = _("No reviews available")
 
 
 class ReviewerLeaderboardDetailTable(tables.Table):
-    title = tables.LinkColumn('funds:submissions:reviews:review', text=render_title, args=[A('submission_id'), A('pk')], orderable=True, verbose_name=_('Submission'), attrs={'td': {'data-title-tooltip': lambda record: record.submission.title, 'class': 'title js-title'}})
+    title = tables.LinkColumn(
+        "funds:submissions:reviews:review",
+        text=render_title,
+        args=[A("submission_id"), A("pk")],
+        orderable=True,
+        verbose_name=_("Submission"),
+        attrs={
+            "td": {
+                "class": "js-title",
+            },
+            "a": {
+                "data-tippy-content": lambda record: record.submission.title,
+                "data-tippy-placement": "top",
+                # Use after:content-[''] after:block to hide the default browser tooltip on Safari
+                # https://stackoverflow.com/a/43915246
+                "class": "truncate inline-block w-[calc(100%-2rem)] after:content-["
+                "] after:block",
+            },
+        },
+    )
 
     class Meta:
         model = Review
         fields = [
-            'title',
-            'recommendation',
-            'created_at',
+            "title",
+            "recommendation",
+            "created_at",
         ]
-        order_by = ('-created_at',)
-        attrs = {'class': 'all-reviews-table'}
-        empty_text = _('No reviews available')
+        order_by = ("-created_at",)
+        attrs = {"class": "all-reviews-table"}
+        empty_text = _("No reviews available")
 
 
 class StaffAssignmentsTable(tables.Table):
-    full_name = tables.Column(linkify=render_reviewer_link, orderable=True, verbose_name=_('Staff'), attrs={'td': {'class': 'title'}})
+    full_name = tables.Column(
+        linkify=render_reviewer_link,
+        orderable=True,
+        verbose_name=_("Staff"),
+        attrs={"td": {"class": "title"}},
+    )
 
     class Meta:
         model = User
         fields = [
-            'full_name',
+            "full_name",
         ]
-        attrs = {'class': 'all-reviews-table'}
-        empty_text = _('No staff available')
+        attrs = {"class": "all-reviews-table"}
+        empty_text = _("No staff available")
diff --git a/hypha/apply/funds/templates/funds/admin/parent_chooser.html b/hypha/apply/funds/templates/funds/admin/parent_chooser.html
index 093a0239eb22569c92956df4dd381625a7f3ff78..61ae59e65a056563a1aa6e133eee32456f6d9fec 100644
--- a/hypha/apply/funds/templates/funds/admin/parent_chooser.html
+++ b/hypha/apply/funds/templates/funds/admin/parent_chooser.html
@@ -2,32 +2,32 @@
 {% load i18n %}
 
 {% block content %}
-<div>
-    <style>
+    <div>
+        <style>
     {# fix for input field alignment #}
-    input[type=radio] {
-        vertical-align: middle;
-    }
-    </style>
-    {% block header %}
-        {% include "wagtailadmin/shared/header_with_locale_selector.html" with title=view.get_page_title subtitle=view.get_page_subtitle icon=view.header_icon %}
-    {% endblock %}
+            input[type=radio] {
+                vertical-align: middle;
+            }
+        </style>
+        {% block header %}
+            {% include "wagtailadmin/shared/header_with_locale_selector.html" with title=view.get_page_title subtitle=view.get_page_subtitle icon=view.header_icon %}
+        {% endblock %}
 
-    <div class="nice-padding">
-        <h2>{% blocktrans %}Choose a Fund{% endblocktrans %}</h2>
-        <p>{% blocktrans %}Rounds must be associated with a Fund or RFP. What are you creating a new Round for?{% endblocktrans %}</p>
+        <div class="nice-padding">
+            <h2>{% blocktrans %}Choose a Fund{% endblocktrans %}</h2>
+            <p>{% blocktrans %}Rounds must be associated with a Fund or RFP. What are you creating a new Round for?{% endblocktrans %}</p>
 
-        <form action="" method="post" novalidate>
-            {% csrf_token %}
+            <form action="" method="post" novalidate>
+                {% csrf_token %}
 
-            <ul class="fields">
-                {% include "wagtailadmin/shared/field_as_li.html" with field=form.parent_page %}
-                <li>
-                    <button type="submit" class="button">{% trans 'Continue' %}</button>
-                </li>
-            </ul>
-        </form>
+                <ul class="fields">
+                    {% include "wagtailadmin/shared/field_as_li.html" with field=form.parent_page %}
+                    <li>
+                        <button type="submit" class="button">{% trans 'Continue' %}</button>
+                    </li>
+                </ul>
+            </form>
 
+        </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/application_base.html b/hypha/apply/funds/templates/funds/application_base.html
index d2d8a62fa04cb4dc7dcbe1ed00fb97507a12fd91..a2329e74e7061b8774413c73a1376024e83ce7a2 100644
--- a/hypha/apply/funds/templates/funds/application_base.html
+++ b/hypha/apply/funds/templates/funds/application_base.html
@@ -1,75 +1,79 @@
-{% extends "base.html" %}
-
-{% load wagtailcore_tags static i18n util_tags %}
-{# Dont include fixed apply button on this page #}
-{% block apply_button %}{% endblock %}
-{% block header_modifier %}header--light-bg{% endblock %}
+{% extends "base-apply.html" %}
+{% load wagtailcore_tags static i18n util_tags heroicons %}
+{% block body_class %}{% endblock %}
 
 {% block content %}
-{% if form.errors or form.non_field_errors %}
-<div class="wrapper wrapper--medium wrapper--error">
-    <svg class="icon icon--error"><use xlink:href="#error"></use></svg>
-    {% if form.non_field_errors %}
-        <ul>
-            {% for error in form.non_field_errors %}
-                <li class="error">{{ error }}</li>
-            {% endfor %}
-        </ul>
-    {% else %}
-    <h5 class="heading heading--no-margin heading--regular">{% trans "There were some errors with your form. Please amend the fields highlighted below" %}</h5>
-    {% endif %}
-</div>
-{% endif %}
 
-<div class="wrapper wrapper--medium wrapper--light-grey-bg wrapper--form">
-    {% if page.end_date and page.get_parent.specific.show_deadline %}
-        <p class="listing__deadline">
-            <svg class="icon icon--calendar icon--small"><use xlink:href="#calendar"></use></svg>
-            <span>{% trans "Next deadline" %}: {{ page.end_date }}</span>
-        </p>
-    {% endif %}
-    {% if not page.open_round and not page.start_date and not request.is_preview %}
-        {# the page has no open rounds and we arent on a round page #}
-        <h3>{% blocktrans %}Sorry this {{ page|verbose_name }} is not accepting applications at the moment{% endblocktrans %}</h3>
-    {% else%}
-        {% if page.get_parent.specific.guide_link %}
-            <a href="{{ page.get_parent.specific.guide_link }}" class="link link--fixed-apply" target="_blank" rel="noopener noreferrer">
-                {% trans "Application guide" %}
-            </a>
-        {% endif %}
-        <form class="form application-form" action="/test500/" method="POST" enctype="multipart/form-data">
-            {{ form.media }}
-            {% csrf_token %}
+    <div class="wrapper wrapper--medium wrapper--form">
 
-            {% for field in form %}
-                {% if field.field %}
-                    {% if field.field.multi_input_field %}
-                        {% include "forms/includes/multi_input_field.html" with is_application=True %}
-                    {% else %}
-                        {% include "forms/includes/field.html" with is_application=True %}
-                    {% endif %}
+        {% if page.end_date and page.get_parent.specific.show_deadline %}
+            <p>
+                {% heroicon_mini "calendar-days" aria_hidden="true" class="inline mr-1 fill-fg-muted" %}
+                <span class="font-bold text-fg-muted">{% trans "Next deadline" %}: {{ page.end_date }}</span>
+            </p>
+        {% endif %}
+        <h1 class="text-5xl font-bold">{{ page.title }}</h1>
+        {% if form.errors or form.non_field_errors %}
+            <div class="wrapper wrapper--error">
+                {% heroicon_solid "exclamation-triangle" aria_hidden="true" class="inline mr-2 fill-red-500" %}
+                {% if form.non_field_errors %}
+                    <ul>
+                        {% for error in form.non_field_errors %}
+                            <li class="error">{{ error }}</li>
+                        {% endfor %}
+                    </ul>
                 {% else %}
-                    {% if field.group_number > 1 %}
-                        <div class="field-group-{{ field.group_number }}">
-                            {{ field.block }}
-                        </div>
+                    <h5 class="heading heading--no-margin heading--regular">{% trans "There were some errors with your form. Please amend the fields highlighted below" %}</h5>
+                {% endif %}
+            </div>
+        {% endif %}
+
+        {% if not page.open_round and not page.start_date and not request.is_preview %}
+        {# the page has no open rounds and we arent on a round page #}
+            <h3>{% blocktrans %}Sorry this {{ page|verbose_name }} is not accepting applications at the moment{% endblocktrans %}</h3>
+        {% else%}
+            {% if page.get_parent.specific.guide_link %}
+                <a href="{{ page.get_parent.specific.guide_link }}" class="link link--fixed-apply" target="_blank" rel="noopener noreferrer">
+                    {% trans "Application guide" %}
+                </a>
+            {% endif %}
+            <form class="form application-form" action="/test500/" method="POST" enctype="multipart/form-data">
+                {{ form.media }}
+                {% csrf_token %}
+
+                {% for field in form %}
+                    {% if field.field %}
+                        {% if field.field.multi_input_field %}
+                            {% include "forms/includes/multi_input_field.html" with is_application=True %}
+                        {% else %}
+                            {% include "forms/includes/field.html" with is_application=True %}
+                        {% endif %}
                     {% else %}
-                        {{ field.block }}
+                        {% if field.group_number > 1 %}
+                            <div class="field-group-{{ field.group_number }}">
+                                {{ field.block }}
+                            </div>
+                        {% else %}
+                            <div class="field-block prose max-w-none">
+                                {{ field.block }}
+                            </div>
+                        {% endif %}
                     {% endif %}
-                {% endif %}
-            {% endfor %}
+                {% endfor %}
 
             {# Hidden fields needed e.g. for django-file-form. See `StreamBaseForm.hidden_fields` #}
-            {% for hidden_field in form.hidden_fields %}
-                {{ hidden_field }}
-            {% endfor %}
+                {% for hidden_field in form.hidden_fields %}
+                    {{ hidden_field }}
+                {% endfor %}
 
-            <button class="link link--button-secondary" type="submit" disabled>{% trans "Submit for review" %}</button>
-            <button class="link link--button-tertiary" type="submit" name="draft" value="Save draft" formnovalidate>{% trans "Save draft" %}</button>
-        </form>
-        <p class="wrapper--error message-no-js js-hidden">{% trans "You must have Javascript enabled to use this form." %}</p>
-    {% endif %}
-</div>
+                <div class="form__group">
+                    <button class="button button--primary" type="submit" disabled>{% trans "Submit for review" %}</button>
+                    <button class="button button--secondary" type="submit" name="draft" value="Save draft" formnovalidate>{% trans "Save draft" %}</button>
+                </div>
+            </form>
+            <p class="wrapper--error message-no-js js-hidden">{% trans "You must have Javascript enabled to use this form." %}</p>
+        {% endif %}
+    </div>
 {% endblock %}
 
 {% block extra_js %}
@@ -79,7 +83,7 @@
     <script src="{% static 'js/apply/submission-form-copy.js' %}"></script>
     <script src="{% static 'js/apply/application-form-links-new-window.js' %}"></script>
     {% if not show_all_group_fields %}
-    <script src="{% static 'js/apply/form-group-toggle.js' %}"></script>
+        <script src="{% static 'js/apply/form-group-toggle.js' %}"></script>
     {% endif %}
     <script src="{% static 'js/apply/multi-input-fields.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/application_base_landing.html b/hypha/apply/funds/templates/funds/application_base_landing.html
index ae9d51da9a9e43838b314d35cae9332ec2122bb5..e9ac3fca1b71174c74c69b0ed65b302ca2572a3d 100644
--- a/hypha/apply/funds/templates/funds/application_base_landing.html
+++ b/hypha/apply/funds/templates/funds/application_base_landing.html
@@ -1,33 +1,34 @@
-{% extends "base.html" %}
+{% extends "base-apply.html" %}
 {% load i18n wagtailcore_tags wagtailsettings_tags %}
+{% block body_class %}{% endblock %}
 
-{% block header_modifier %}header--light-bg{% endblock %}
 {% block content %}
-<div class="wrapper wrapper--small">
-	{% if form_submission.status == 'draft' %}
-		<h3>{% trans "Your application is saved as a draft." %}</h3>
-	{% else %}
-    	<h3>{% blocktrans %}Thank you for your submission to the {{ ORG_LONG_NAME }}.{% endblocktrans %}</h3>
-	{% endif %}
-    <div class="rich-text">
-    	{% if form_submission.status == 'draft' %}
-    		<p>{% trans "Please note that it is not submitted for review. You can complete your application by following the log-in details emailed to you." %}</p>
-    	{% else %}
-        	<p>{% trans "An e-mail with more information has been sent to the address you entered." %}</p>
+    <div class="wrapper max-w-2xl mt-8">
+        {% if form_submission.status == 'draft' %}
+            <h3>{% trans "Your application is saved as a draft." %}</h3>
+        {% else %}
+            <h3>{% blocktrans %}Thank you for your submission to the {{ ORG_LONG_NAME }}.{% endblocktrans %}</h3>
         {% endif %}
-        <p>{% blocktrans with email=ORG_EMAIL|urlize %}If you do not receive an e-mail within 15 minutes please check your spam folder and contact {{ email }} for further assistance.{% endblocktrans %}</p>
+        <div class="rich-text">
+            {% if form_submission.status == 'draft' %}
+                <p>{% trans "Please note that it is not submitted for review. You can complete your application by following the log-in details emailed to you." %}</p>
+            {% else %}
+                <p>{% trans "An e-mail with more information has been sent to the address you entered." %}</p>
+            {% endif %}
+            <p>
+                {% blocktrans with email=ORG_EMAIL|urlize %}If you do not receive an e-mail within 15 minutes please check your spam folder and contact {{ email }} for further assistance.{% endblocktrans %}</p>
 
-        {% with email_context=page.specific %}<p>{{ email_context.confirmation_text_extra|urlize }}</p>{% endwith %}
+            {% with email_context=page.specific %}<p>{{ email_context.confirmation_text_extra|urlize }}</p>{% endwith %}
 
-        {% block extra_text %}{{ settings.funds.ApplicationSettings.extra_text_round|richtext }}{% endblock %}
+            {% block extra_text %}{{ settings.funds.ApplicationSettings.extra_text_round|richtext }}{% endblock %}
 
-		<p>
-		{% if request.user.is_authenticated %}
-			<a href="{% url 'dashboard:dashboard' %}"><button class="button button--primary">{% blocktrans %}Go to my dashboard.{% endblocktrans %}</button></a>
-		{% else %}
-			<a href="{% url 'users_public:login' %}"><button class="button button--primary">{% blocktrans %}Log in{% endblocktrans %}</button></a>
-		{% endif %}
-		</p>
+            <p>
+                {% if request.user.is_authenticated %}
+                    <a href="{% url 'dashboard:dashboard' %}"><button class="button button--primary">{% blocktrans %}Go to my dashboard.{% endblocktrans %}</button></a>
+                {% else %}
+                    <a href="{% url 'users_public:login' %}"><button class="button button--primary">{% blocktrans %}Log in{% endblocktrans %}</button></a>
+                {% endif %}
+            </p>
+        </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/applicationrevision_list.html b/hypha/apply/funds/templates/funds/applicationrevision_list.html
index 86b5c6405feabfe3c0bd9813d47a84ca47114367..ca769513de103aeaa988f2b371d6dda8cb87d3e0 100644
--- a/hypha/apply/funds/templates/funds/applicationrevision_list.html
+++ b/hypha/apply/funds/templates/funds/applicationrevision_list.html
@@ -3,29 +3,27 @@
 {% block title %}{% blocktrans with title=submission.title %}Revisions for {{ title }}{% endblocktrans %}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h1 class="beta heading heading--no-margin heading--bold">{% trans "Revisions" %}</h1>
-        <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
-    </div>
-</div>
+    {% adminbar %}
+        {% slot header %}{% trans "Revisions" %}{% endslot %}
+        {% slot sub_heading %}{% trans "For" %} <a class="text-blue-300 hover:underline" href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a>{% endslot %}
+    {% endadminbar %}
 
-<div class="wrapper wrapper--medium">
-    <ul class="revision">
-        {% for revision in object_list %}
-            <li class="revision__item">
-                <p class="revision__meta">
-                    <span class="revision__date">{{ revision.timestamp|date:"Y-m-d H:i e"}} </span>
-                    {% trans "by" %} {{ revision.author }}
-                    {% if forloop.first %}
-                        <span class="revision__current">- {% trans "current" %}</span>
+    <div class="wrapper wrapper--medium">
+        <ul class="revision">
+            {% for revision in object_list %}
+                <li class="revision__item">
+                    <p class="revision__meta">
+                        <span class="revision__date">{{ revision.timestamp|date:"Y-m-d H:i e"}} </span>
+                        {% trans "by" %} {{ revision.author }}
+                        {% if forloop.first %}
+                            <span class="revision__current">- {% trans "current" %}</span>
+                        {% endif %}
+                    </p>
+                    {% if not forloop.first %}
+                        <a class="button button--compare" href="{{ revision.get_compare_url_to_latest }}">{% trans "Compare" %}</a>
                     {% endif %}
-                </p>
-                {% if not forloop.first %}
-                    <a class="button button--compare" href="{{ revision.get_compare_url_to_latest }}">{% trans "Compare" %}</a>
-                {% endif %}
-            </li>
-        {% endfor %}
-    </ul>
-</div>
+                </li>
+            {% endfor %}
+        </ul>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html b/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html
index 7eb9d3b2524acc727bef1bc66eaf7266f3297e5b..f7c07d93ed1c674eab7228c8b0bd93ec3aa127e8 100644
--- a/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html
+++ b/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html
@@ -2,8 +2,8 @@
 {% load i18n static workflow_tags review_tags determination_tags %}
 
 {% block extra_css %}
-        <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-        {{ reviewer_form.media.css }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ reviewer_form.media.css }}
 {% endblock %}
 
 {% block mobile_actions %}
diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_confirm_delete.html b/hypha/apply/funds/templates/funds/applicationsubmission_confirm_delete.html
index c70f15744d190fbbf5645912acb671f72688f1e7..a8be354ec1ef3fc4a8bdcf7d4470ac1e260d2044 100644
--- a/hypha/apply/funds/templates/funds/applicationsubmission_confirm_delete.html
+++ b/hypha/apply/funds/templates/funds/applicationsubmission_confirm_delete.html
@@ -4,21 +4,21 @@
 {% block title %}{% trans "Deleting" %}: {{object.title }}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Deleting" %}: {{ object.title }}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h2 class="heading heading--no-margin">{% trans "Deleting" %}: {{ object.title }}</h2>
+        </div>
     </div>
-</div>
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form" action="" method="post">
-            {% csrf_token %}
-            <p><strong>{% blocktrans %}Are you sure you want to delete "{{ object }}"?{% endblocktrans %}</strong></p>
-            <p>{% trans "All content related to this submission will also be deleted. This includes reviews, determinations and comments." %}</p>
-            <button class="button button--warning button--submit button--top-space" type="submit">{% trans "Confirm" %}</button>
-        </form>
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form" action="" method="post">
+                {% csrf_token %}
+                <p><strong>{% blocktrans %}Are you sure you want to delete "{{ object }}"?{% endblocktrans %}</strong></p>
+                <p>{% trans "All content related to this submission will also be deleted. This includes reviews, determinations and comments." %}</p>
+                <button class="button button--warning button--submit button--top-space" type="submit">{% trans "Confirm" %}</button>
+            </form>
+        </div>
     </div>
-</div>
 
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_detail.html b/hypha/apply/funds/templates/funds/applicationsubmission_detail.html
index da587109ea2a18b64f0ec8c5d4886e3f59ca151e..1dfba9b0a633c4b58f390eb465acf7944ef3d7ae 100644
--- a/hypha/apply/funds/templates/funds/applicationsubmission_detail.html
+++ b/hypha/apply/funds/templates/funds/applicationsubmission_detail.html
@@ -5,196 +5,196 @@
 {% block title %}{{ object.title }}{% endblock %}
 {% block body_class %}{% endblock %}
 {% block content %}
-{% if object.round.specific.is_sealed %}
-<ul class="messages">
-    {% trans "This submission is sealed" as warning_message %}
-    {% include "includes/message_item.html" with message=warning_message tag="warning" close=False %}
-    }
-</ul>
-{% endif %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        {% if request.GET.ref == 'all-beta' %}
-        <a class="simplified__submissions-link"
-            hx-boost="true"
-            href="{% url "funds:submissions:list-beta" %}"
-        >
-            {% trans "Back to submissions" %}
-        </a>
-        {% endif %}
-        <h1 class="beta heading heading--no-margin heading--bold">{{ object.title }}</h1>
-        <h5 class="heading heading--meta">
-            <span>{{ object.stage }}</span>
-            <span>{% if public_page %}<a class="link--transparent link--underlined" href="{% pageurl public_page %}" >{{ object.page }}</a>{% else %}{{ object.page }}{% endif %}</span>
-            {% if request.user.is_apply_staff and object.round %}
-                <span><a class="link--transparent link--underlined" href="{% url 'apply:rounds:detail' pk=object.round.pk %}">{{ object.round }}</a></span>
-            {% else %}
-                <span>{{ object.round }}</span>
-            {% endif %}
-            {% if request.user.is_apply_staff %}
-                <span>{% trans "Lead" %}: <a class="link--transparent link--underlined" href="{% url 'apply:submissions:list' %}?lead={{ object.lead.id }}">{{ object.lead }}</a></span>
-            {% else %}
-                <span>{% trans "Lead" %}: {{ object.lead }}</span>
-            {% endif %}
-        </h5>
-        {% status_bar object.workflow object.phase request.user author=object.user same_stage=True %}
-
-        <div class="tabs js-tabs">
-            <div class="tabs__container">
-                <a class="tab__item" href="#submission-details" data-tab="tab-1">
-                    {% trans "Submission details" %}
-                </a>
-
-                <a class="tab__item" href="#communications" data-tab="tab-2">
-                    {% trans "Communications" %}
-                </a>
-
-                <a class="tab__item"
-                    href="#activity-feed"
-                    hx-get="{% url 'funds:submissions:partial-activities' object.id %}"
-                    hx-target="#tab-3 .feed"
-                    hx-trigger="open-tab-3 once"
-                    data-tab="tab-3"
-                    x-data
-                    @hashchange.window="location.hash === '#activity-feed' ? $dispatch('open-tab-3') : ''"
-                    x-init="location.hash === '#activity-feed' ? $dispatch('open-tab-3') : ''"
+    {% if object.round.specific.is_sealed %}
+        <ul class="messages">
+            {% trans "This submission is sealed" as warning_message %}
+            {% include "includes/message_item.html" with message=warning_message tag="warning" close=False %}
+            }
+        </ul>
+    {% endif %}
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            {% if request.GET.ref == 'all-beta' %}
+                <a class="simplified__submissions-link"
+                   hx-boost="true"
+                   href="{% url "funds:submissions:list-beta" %}"
                 >
-                    {% trans "Activity feed" %}
-                </a>
-                {% if request.user.is_apply_staff_admin %}
-                <a class="tab__item tab__item--right js-tabs-off" href="{% url 'admin:activity_event_changelist' %}?submission__id={{ object.id }}">
-                    {% trans "View message log" %}
+                    {% trans "Back to submissions" %}
                 </a>
+            {% endif %}
+            <h1 class="mb-0 mt-2 font-normal">{{ object.title }}</h1>
+            <div class="heading heading--meta text-sm mt-1">
+                <span>{{ object.stage }}</span>
+                <span>{{ object.page }}</span>
+                {% if request.user.is_apply_staff and object.round %}
+                    <span><a class="link--transparent link--underlined" href="{% url 'apply:rounds:detail' pk=object.round.pk %}">{{ object.round }}</a></span>
+                {% else %}
+                    <span>{{ object.round }}</span>
+                {% endif %}
+                {% if request.user.is_apply_staff %}
+                    <span>{% trans "Lead" %}: <a class="link--transparent link--underlined" href="{% url 'apply:submissions:list' %}?lead={{ object.lead.id }}">{{ object.lead }}</a></span>
+                {% else %}
+                    <span>{% trans "Lead" %}: {{ object.lead }}</span>
                 {% endif %}
             </div>
+            {% status_bar object.workflow object.phase request.user author=object.user same_stage=True %}
+
+            <div class="tabs js-tabs">
+                <div class="tabs__container">
+                    <a class="tab__item" href="#submission-details" data-tab="tab-1">
+                        {% trans "Submission details" %}
+                    </a>
+
+                    <a class="tab__item" href="#communications" data-tab="tab-2">
+                        {% trans "Communications" %}
+                    </a>
+
+                    <a class="tab__item"
+                       href="#activity-feed"
+                       hx-get="{% url 'funds:submissions:partial-activities' object.id %}"
+                       hx-target="#tab-3 .feed"
+                       hx-trigger="open-tab-3 once"
+                       data-tab="tab-3"
+                       x-data
+                       @hashchange.window="location.hash === '#activity-feed' ? $dispatch('open-tab-3') : ''"
+                       x-init="location.hash === '#activity-feed' ? $dispatch('open-tab-3') : ''"
+                    >
+                        {% trans "Activity feed" %}
+                    </a>
+                    {% if request.user.is_apply_staff_admin %}
+                        <a class="tab__item tab__item--right js-tabs-off" href="{% url 'admin:activity_event_changelist' %}?submission__id={{ object.id }}">
+                            {% trans "View message log" %}
+                        </a>
+                    {% endif %}
+                </div>
+            </div>
         </div>
     </div>
-</div>
 
-{% if object.is_archive %}
-<div class="py-2 bg-red-600 text-white font-bold text-center">
-    {% heroicon_outline "lock-closed" aria_hidden="true" size=16 stroke_width=2 class="inline align-baseline mr-1" %}
-    {% trans "This submission has been archived." %}
-</div>
-{% endif %}
+    {% if object.is_archive %}
+        <div class="py-2 bg-red-600 text-white font-bold text-center">
+            {% heroicon_outline "lock-closed" aria_hidden="true" size=16 stroke_width=2 class="inline align-baseline mr-1" %}
+            {% trans "This submission has been archived." %}
+        </div>
+    {% endif %}
 
-<div class="wrapper wrapper--large wrapper--tabs js-tabs-content">
+    <div class="wrapper wrapper--large wrapper--tabs js-tabs-content">
     {# Tab 1 #}
-    <div class="tabs__content" id="tab-1">
-        {% block mobile_actions %}
-        {% endblock %}
-        <div class="wrapper wrapper--sidebar">
-            {% if request.user|has_edit_perm:object and object.status == 'draft_proposal' and not request.user.is_apply_staff %}
-                <div class="wrapper--sidebar--inner">
-                    <h4>{% trans "Congratulations!" %}</h4>
-                    <h5>{% blocktrans with stage=object.previous.stage %}Your {{ stage }} application has been accepted.{% endblocktrans %}</h5>
-                    <a class="button button--primary" href="{% url 'funds:submissions:edit' object.id %}">{% blocktrans with stage=object.stage %}Start your {{ stage }} application.{% endblocktrans %}</a>
-                </div>
-            {% else %}
-                <article class="wrapper--sidebar--inner">
-                    <header class="heading heading--submission-meta heading-text zeta">
-                        <span>{% trans "Submitted" %} <strong><relative-time datetime={{ object.submit_time|date:"c" }}>{{ object.submit_time|date:"SHORT_DATETIME_FORMAT" }}</relative-time></strong> {% trans "by" %} <strong>{{ object.user.get_full_name }}</strong></span>
-                        <span>{% trans "Updated" %} <strong><relative-time datetime={{ object.live_revision.timestamp|date:"c" }}>{{ object.live_revision.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time></strong> {% trans "by" %} <strong>{{ object.user.get_full_name }}</strong></span>
-                        <div class="wrapper wrapper--submission-actions">
-                            {% if perms.funds.delete_applicationsubmission %}
-                                <a class="link link--delete-submission is-active" href="{% url 'funds:submissions:delete' object.id %}">
-                                    {% trans "Delete" %}
-                                    <svg class="icon icon--delete"><use xlink:href="#delete"></use></svg>
-                                </a>
-                            {% endif %}
-                            {% if request.user|has_edit_perm:object %}
-                                <a class="link link--edit-submission is-active" href="{% url 'funds:submissions:edit' object.id %}">
-                                    {% trans "Edit" %}
-                                    <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
-                                </a>
-                            {% endif %}
-                        </div>
-                    </header>
-
-                    {% include "funds/includes/rendered_answers.html" %}
-
-                </article>
-            {% endif %}
+        <div class="tabs__content" id="tab-1">
+            {% block mobile_actions %}
+            {% endblock %}
+            <div class="wrapper wrapper--sidebar">
+                {% if request.user|has_edit_perm:object and object.status == 'draft_proposal' and not request.user.is_apply_staff %}
+                    <div class="wrapper--sidebar--inner">
+                        <h4>{% trans "Congratulations!" %}</h4>
+                        <h5>{% blocktrans with stage=object.previous.stage %}Your {{ stage }} application has been accepted.{% endblocktrans %}</h5>
+                        <a class="button button--primary" href="{% url 'funds:submissions:edit' object.id %}">{% blocktrans with stage=object.stage %}Start your {{ stage }} application.{% endblocktrans %}</a>
+                    </div>
+                {% else %}
+                    <article class="wrapper--sidebar--inner">
+                        <header class="heading heading--submission-meta heading-text zeta">
+                            <span>{% trans "Submitted" %} <strong><relative-time datetime={{ object.submit_time|date:"c" }}>{{ object.submit_time|date:"SHORT_DATETIME_FORMAT" }}</relative-time></strong> {% trans "by" %} <strong>{{ object.user.get_full_name }}</strong></span>
+                            <span>{% trans "Updated" %} <strong><relative-time datetime={{ object.live_revision.timestamp|date:"c" }}>{{ object.live_revision.timestamp|date:"SHORT_DATETIME_FORMAT" }}</relative-time></strong> {% trans "by" %} <strong>{{ object.user.get_full_name }}</strong></span>
+                            <div class="wrapper wrapper--submission-actions">
+                                {% if perms.funds.delete_applicationsubmission %}
+                                    <a class="link link--delete-submission is-active" href="{% url 'funds:submissions:delete' object.id %}">
+                                        {% trans "Delete" %}
+                                        <svg class="icon icon--delete"><use xlink:href="#delete"></use></svg>
+                                    </a>
+                                {% endif %}
+                                {% if request.user|has_edit_perm:object %}
+                                    <a class="link link--edit-submission is-active" href="{% url 'funds:submissions:edit' object.id %}">
+                                        {% trans "Edit" %}
+                                        <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
+                                    </a>
+                                {% endif %}
+                            </div>
+                        </header>
 
-            <aside class="sidebar">
-                {% block sidebar_top %}
-                    {% include "funds/includes/generic_primary_actions.html" %}
-                {% endblock %}
+                        {% include "funds/includes/rendered_answers.html" %}
 
-                {% if object.project and PROJECTS_ENABLED %}
-                    {% include 'funds/includes/project_block.html' %}
+                    </article>
                 {% endif %}
 
-                {% block screening_status %}
-                {% endblock %}
+                <aside class="sidebar">
+                    {% block sidebar_top %}
+                        {% include "funds/includes/generic_primary_actions.html" %}
+                    {% endblock %}
 
-                {% block determination %}
-                    {% if object.determinations.submitted.count %}
-                        {% include 'determinations/includes/applicant_determination_block.html' with submission=object %}
+                    {% if object.project and PROJECTS_ENABLED %}
+                        {% include 'funds/includes/project_block.html' %}
                     {% endif %}
-                {% endblock %}
 
-                {% block reviews %}
-                {% endblock %}
+                    {% block screening_status %}
+                    {% endblock %}
 
-                {% block flags %}
-                {% endblock %}
+                    {% block determination %}
+                        {% if object.determinations.submitted.count %}
+                            {% include 'determinations/includes/applicant_determination_block.html' with submission=object %}
+                        {% endif %}
+                    {% endblock %}
 
-                {% block meta_terms %}
-                {% endblock %}
+                    {% block reviews %}
+                    {% endblock %}
 
-                {% block reminders %}
-                {% endblock %}
+                    {% block flags %}
+                    {% endblock %}
 
-                {% block related %}
-                    {% if other_submissions or object.previous or object.next %}
-                        <div class="sidebar__inner related-sidebar">
-                            <h5>{% trans "Related submissions" %}</h5>
-                            {% if object.previous %}
-                                <p><a class="link link--underlined link--bold" href="{% url 'funds:submissions:detail' object.previous.id %}">{% trans "View linked" %} {{ object.previous.stage }}</a></p>
-                            {% endif %}
+                    {% block meta_terms %}
+                    {% endblock %}
 
-                            {% if object.next %}
-                                <p><a class="link link--underlined link--bold" href="{% url 'funds:submissions:detail' object.next.id %}">{% trans "View linked" %} {{ object.next.stage }}</a></p>
-                            {% endif %}
+                    {% block reminders %}
+                    {% endblock %}
 
-                            {% for submission in other_submissions %}
-                                {% if forloop.first %}
-                                <h6 class="heading heading--light-grey heading--uppercase">{% trans "Past Submissions" %}</h6>
-                                <ul>
+                    {% block related %}
+                        {% if other_submissions or object.previous or object.next %}
+                            <div class="sidebar__inner related-sidebar">
+                                <h5>{% trans "Related submissions" %}</h5>
+                                {% if object.previous %}
+                                    <p><a class="link link--underlined link--bold" href="{% url 'funds:submissions:detail' object.previous.id %}">{% trans "View linked" %} {{ object.previous.stage }}</a></p>
                                 {% endif %}
-                                <li><a class="link link--underlined link--bold" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></li>
-                                {% if forloop.last %}
-                                </ul>
+
+                                {% if object.next %}
+                                    <p><a class="link link--underlined link--bold" href="{% url 'funds:submissions:detail' object.next.id %}">{% trans "View linked" %} {{ object.next.stage }}</a></p>
                                 {% endif %}
-                            {% endfor %}
-                        </div>
-                    {% endif %}
-                {% endblock %}
-            </aside>
+
+                                {% for submission in other_submissions %}
+                                    {% if forloop.first %}
+                                        <h6 class="heading heading--light-grey heading--uppercase">{% trans "Past Submissions" %}</h6>
+                                        <ul>
+                                    {% endif %}
+                                    <li><a class="link link--underlined link--bold" href="{% url 'funds:submissions:detail' submission.id %}">{{ submission.title }}</a></li>
+                                    {% if forloop.last %}
+                                        </ul>
+                                    {% endif %}
+                                {% endfor %}
+                            </div>
+                        {% endif %}
+                    {% endblock %}
+                </aside>
+            </div>
         </div>
-    </div>
 
     {# Tab 2 #}
-    <div class="tabs__content" id="tab-2">
-        <div class="feed">
-            {% if not object.is_archive %}
-                {% include "activity/include/comment_form.html" %}
-                {% include "activity/include/comment_list.html" with editable=True %}
-            {% else %}
-                {% include "activity/include/comment_list.html" with editable=False %}
-            {% endif %}
+        <div class="tabs__content" id="tab-2">
+            <div class="feed">
+                {% if not object.is_archive %}
+                    {% include "activity/include/comment_form.html" %}
+                    {% include "activity/include/comment_list.html" with editable=True %}
+                {% else %}
+                    {% include "activity/include/comment_list.html" with editable=False %}
+                {% endif %}
+            </div>
         </div>
-    </div>
 
     {# Tab 3 #}
-    <div class="tabs__content" id="tab-3">
-        <div class="feed">
+        <div class="tabs__content" id="tab-3">
+            <div class="feed">
             {% comment %} Loaded using the htmx via alpine's custom event "open-tab-3"{% endcomment %}
-            <p>Loading...</p>
+                <p>Loading...</p>
+            </div>
         </div>
     </div>
-</div>
 {% endblock %}
 
 {% block extra_js %}
diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_form.html b/hypha/apply/funds/templates/funds/applicationsubmission_form.html
index 6f2fc099c8bd46e80e686876670f1b540f381065..eea9f19d830bfa168221f6cfed65601c23ef33e9 100644
--- a/hypha/apply/funds/templates/funds/applicationsubmission_form.html
+++ b/hypha/apply/funds/templates/funds/applicationsubmission_form.html
@@ -1,45 +1,47 @@
 {% extends "base-apply.html" %}
 {% load i18n static %}
 {% block title %}{% trans "Editing" %}: {{object.title }}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
+
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Editing" %}: {{ object.title }}</h2>
-    </div>
-</div>
+    {% adminbar %}
+        {% slot header %}{% trans "Editing" %}: {{ object.title }}{% endslot %}
+    {% endadminbar %}
 
-{% include "forms/includes/form_errors.html" with form=form %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form application-form" action="" method="post" enctype="multipart/form-data">
-            {% csrf_token %}
-            {{ form.media }}
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form application-form" action="" method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                {{ form.media }}
 
-            {% for field in form %}
-                {% if field.field %}
-                    {% if field.field.multi_input_field %}
-                        {% include "forms/includes/multi_input_field.html" %}
+                {% for field in form %}
+                    {% if field.field %}
+                        {% if field.field.multi_input_field %}
+                            {% include "forms/includes/multi_input_field.html" %}
+                        {% else %}
+                            {% include "forms/includes/field.html" %}
+                        {% endif %}
                     {% else %}
-                        {% include "forms/includes/field.html" %}
+                        {{ field.block }}
                     {% endif %}
-                {% else %}
-                    {{ field.block }}
-                {% endif %}
-            {% endfor %}
+                {% endfor %}
 
             {# Hidden fields needed e.g. for django-file-form. See `StreamBaseForm.hidden_fields` #}
-            {% for hidden_field in form.hidden_fields %}
-                {{ hidden_field }}
-            {% endfor %}
-
-            {% trans "Save draft" as save_draft %}
-            {% for button_name, button_type, button_value in buttons %}
-                <button class="button button--submit button--top-space button--{{ button_type }}" type="submit" name="{{ button_name }}" {% if button_value == save_draft %}formnovalidate{% endif %}>{{ button_value }}</button>
-            {% endfor %}
-        </form>
+                {% for hidden_field in form.hidden_fields %}
+                    {{ hidden_field }}
+                {% endfor %}
+
+                <div class="form__group">
+                    {% trans "Save draft" as save_draft %}
+                    {% for button_name, button_type, button_value in buttons %}
+                        <button class="button button--submit button--{{ button_type }}" type="submit" name="{{ button_name }}" {% if button_value == save_draft %}formnovalidate{% endif %}>{{ button_value }}</button>
+                    {% endfor %}
+                </div>
+            </form>
+        </div>
     </div>
-</div>
 
 {% endblock %}
 
@@ -49,6 +51,6 @@
     <script src="{% static 'js/apply/submission-form-copy.js' %}"></script>
     <script src="{% static 'js/apply/application-form-links-new-window.js' %}"></script>
     {% if not show_all_group_fields %}
-    <script src="{% static 'js/apply/form-group-toggle.js' %}"></script>
+        <script src="{% static 'js/apply/form-group-toggle.js' %}"></script>
     {% endif %}
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html b/hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html
index 8ecae4a51812b36f5f8cdb32c11d5f627dc41493..4ed88529e91d455fd27ee0ff3617ba3cbee021cc 100644
--- a/hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html
+++ b/hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html
@@ -6,27 +6,32 @@
 {% block body_class %}{% endblock %}
 
 {% block content %}
-<div class="simplified">
-    <div class="simplified__admin-bar">
-        <div class="simplified__admin-bar-inner">
+    {% adminbar %}
+        {% slot back_link %}
             <a class="simplified__projects-link" href="{{ object.project.get_absolute_url }}">
-                {% trans "View project page" %}
+                {% trans "Goto project page" %}
             </a>
-            <h1 class="simplified__heading">{{ object.title }}</h1>
-            <h5 class="simplified__subheading">
+        {% endslot %}
+
+        {% slot header %}
+            {{ object.title }}
+        {% endslot %}
+        {% slot sub_heading %}
+            <div class="heading heading--meta text-sm mt-1">
                 <span>{{ object.stage }}</span>
                 <span>{{ object.page }}</span>
                 <span>{{ object.round }}</span>
                 <span>{% trans "Lead" %}: {{ object.lead }}</span>
-            </h5>
-            <a
-                class="button button--primary simplified__button"
-                href="{% url "apply:submissions:download" pk=object.pk %}"
-            >
-                {% trans "Download PDF" %}
-            </a>
-        </div>
-    </div>
+            </div>
+        {% endslot %}
+
+        <a class="button button--primary simplified__button"
+           href="{% url "apply:submissions:download" pk=object.pk %}"
+        >
+            {% trans "Download PDF" %}
+        </a>
+    {% endadminbar %}
+
 
     <div class="simplified__wrapper">
         <header class="simplified__meta">
@@ -39,7 +44,7 @@
             {{ object.output_text_answers }}
         </div>
     </div>
-</div>
+    </div>
 {% endblock %}
 
 {% block extra_js %}
diff --git a/hypha/apply/funds/templates/funds/base_submissions_table.html b/hypha/apply/funds/templates/funds/base_submissions_table.html
index 5a8b49d36831e13135787047d44bbfd50ce1c91b..2af95d60189710cc2cc0d4737e87921aadf3ab2f 100644
--- a/hypha/apply/funds/templates/funds/base_submissions_table.html
+++ b/hypha/apply/funds/templates/funds/base_submissions_table.html
@@ -3,8 +3,8 @@
 {% load render_table from django_tables2 %}
 
 {% block extra_css %}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-{{ filter.form.media.css }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ filter.form.media.css }}
 {% endblock %}
 
 {% block content %}
@@ -23,7 +23,6 @@
     <script src="{% static 'js/apply/symbol-es6.min.js' %}"></script>
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
     <script src="{% static 'js/apply/tabs.js' %}"></script>
     <script src="{% static 'js/apply/batch-actions.js' %}"></script>
     <script src="{% static 'js/apply/flag.js' %}"></script>
diff --git a/hypha/apply/funds/templates/funds/demo_workflow.html b/hypha/apply/funds/templates/funds/demo_workflow.html
index 830e4c7baf951193e4be757228151b0c955d53d1..84f180a4736d265983f8103269c30ae3bb5e49d0 100644
--- a/hypha/apply/funds/templates/funds/demo_workflow.html
+++ b/hypha/apply/funds/templates/funds/demo_workflow.html
@@ -17,41 +17,41 @@
         <section class="container">
             <h2>{{ workflow}}</h2>
             <h3>{{ phase.stage }}</h3>
-        {% if form %}
-            <form method="post">
-            {% csrf_token %}
-                {{ form }}
-                <input id="current" type="hidden" name="current" value="{{ phase }}" />
-                <button id="submit" name="submit">Submit</button>
-            </form>
-        {% else %}
-            <h4>{{ ORG_SHORT_NAME }}: {{ phase.name }}</h4>
-            <h4>Public: {{ phase.public_name }}</h4>
-            <form method="post">
-            {% csrf_token %}
-            <input id="current" type="hidden" name="current" value="{{ phase }}" />
-            {% for action in phase.action_names %}
-                <button id="action" name="action" value="{{ action }}">{{ action }}</button>
-            {% empty %}
-                <h4>There are no actions</h4>
-            {% endfor %}
-            </form>
-        </section>
-        <section class="container">
-            <h3>Logs</h3>
-            <ul>
-            {% for log in logs %}
-                <li>{{ log }}</li>
-            {% endfor %}
-            </ul>
-        </section>
-        <section class="container">
-            <h3>Submission</h3>
-            {% for key, value in data.items %}
-                <h4>{{ key }}</h4>
-                {{ value }}
-            {% endfor %}
-        {% endif %}
+            {% if form %}
+                <form method="post">
+                    {% csrf_token %}
+                    {{ form }}
+                    <input id="current" type="hidden" name="current" value="{{ phase }}" />
+                    <button id="submit" name="submit">Submit</button>
+                </form>
+            {% else %}
+                <h4>{{ ORG_SHORT_NAME }}: {{ phase.name }}</h4>
+                <h4>Public: {{ phase.public_name }}</h4>
+                <form method="post">
+                    {% csrf_token %}
+                    <input id="current" type="hidden" name="current" value="{{ phase }}" />
+                    {% for action in phase.action_names %}
+                        <button id="action" name="action" value="{{ action }}">{{ action }}</button>
+                    {% empty %}
+                        <h4>There are no actions</h4>
+                    {% endfor %}
+                </form>
+                </section>
+                <section class="container">
+                    <h3>Logs</h3>
+                    <ul>
+                        {% for log in logs %}
+                            <li>{{ log }}</li>
+                        {% endfor %}
+                    </ul>
+                </section>
+                <section class="container">
+                    <h3>Submission</h3>
+                    {% for key, value in data.items %}
+                        <h4>{{ key }}</h4>
+                        {{ value }}
+                    {% endfor %}
+            {% endif %}
         </section>
         <section class="container">
             <a class="button" href="">Reset</a>
diff --git a/hypha/apply/funds/templates/funds/grouped_application_list.html b/hypha/apply/funds/templates/funds/grouped_application_list.html
index 03bc7b1b3b2c519b8b04dfd2c1c5b6b898161344..2368605b4385307945957a7aa7bfe6757726818e 100644
--- a/hypha/apply/funds/templates/funds/grouped_application_list.html
+++ b/hypha/apply/funds/templates/funds/grouped_application_list.html
@@ -2,8 +2,8 @@
 {% load i18n static %}
 
 {% block extra_css %}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-{{ filter.form.media.css }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ filter.form.media.css }}
 {% endblock %}
 
 {% block content %}
@@ -12,7 +12,7 @@
         {% slot header %}{% trans "List of Submissions summary" %}{% endslot %}
     {% endadminbar %}
 
-<div id="grouped-applications-list"></div>
+    <div id="grouped-applications-list"></div>
 {% endblock %}
 
 {% block extra_js %}
@@ -23,7 +23,6 @@
     <script src="{% static 'js/apply/symbol-es6.min.js' %}"></script>
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
     <script src="{% static 'js/apply/tabs.js' %}"></script>
     <script src="{% static 'js/apply/batch-actions.js' %}"></script>
     <script src="{% static 'js/apply/flag.js' %}"></script>
diff --git a/hypha/apply/funds/templates/funds/includes/admin_primary_actions.html b/hypha/apply/funds/templates/funds/includes/admin_primary_actions.html
index 92789022ab9572533ee7fd01010b826a6caa699e..117564366f424709cbe7d9a98eb12fabff6d506d 100644
--- a/hypha/apply/funds/templates/funds/includes/admin_primary_actions.html
+++ b/hypha/apply/funds/templates/funds/includes/admin_primary_actions.html
@@ -4,9 +4,9 @@
 
 {% if object.is_archive %}
     <a data-fancybox
-        data-src="#unarchive-submission"
-        class="button button--bottom-space button--primary"
-        href="#">
+       data-src="#unarchive-submission"
+       class="button button--bottom-space button--primary"
+       href="#">
         {% heroicon_outline "lock-open" aria_hidden="true" size=16 stroke_width=2 class="inline align-baseline mr-1" %}
         {% trans "Unarchive Submission" %}
     </a>
@@ -14,14 +14,14 @@
 {% else %}
 
     {% if PROJECTS_ENABLED %}
-    {% if object.accepted_for_funding and not object.project %}
-        <a data-fancybox
-            data-src="#create-project"
-            class="button button--bottom-space button--primary button--full-width"
-            href="#">
-            {% trans "Create Project" %}
-        </a>
-    {% endif %}
+        {% if object.accepted_for_funding and not object.project %}
+            <a data-fancybox
+               data-src="#create-project"
+               class="button button--bottom-space button--primary button--full-width"
+               href="#">
+                {% trans "Create Project" %}
+            </a>
+        {% endif %}
     {% endif %}
 
     {% if object.has_default_screening_status_set and not object.can_not_edit_default %}
@@ -44,9 +44,9 @@
 
     {% if object.is_finished %}
         {% with determination=object.determinations.last %}
-        {% if determination %}
-            <a class="button button--primary button--full-width button--bottom-space" href="{% url 'apply:submissions:determinations:detail' submission_pk=object.id pk=determination.id %}">{% trans "View determination" %}</a>
-        {% endif %}
+            {% if determination %}
+                <a class="button button--primary button--full-width button--bottom-space" href="{% url 'apply:submissions:determinations:detail' submission_pk=object.id pk=determination.id %}">{% trans "View determination" %}</a>
+            {% endif %}
         {% endwith %}
     {% endif %}
 
diff --git a/hypha/apply/funds/templates/funds/includes/create_project_form.html b/hypha/apply/funds/templates/funds/includes/create_project_form.html
index 3e9b0ba55122c8714adea3c31eb76377e7e75da1..3153da4fba8cfc9379444be01f06b06ae08637f1 100644
--- a/hypha/apply/funds/templates/funds/includes/create_project_form.html
+++ b/hypha/apply/funds/templates/funds/includes/create_project_form.html
@@ -4,7 +4,6 @@
     <p>{% trans "This will create a new project. This cannot be undone." %}</p>
     <p>{% trans "A lead is required to create a project, select the lead below." %}</p>
 
-    <br>
     {% trans "Confirm" as confirm %}
     {% include 'funds/includes/delegated_form_base.html' with form=project_form value=confirm %}
 </div>
diff --git a/hypha/apply/funds/templates/funds/includes/delegated_form_base.html b/hypha/apply/funds/templates/funds/includes/delegated_form_base.html
index 5026428c4cd39549a49c3075fefb10bd40cf11ce..fd2127f1e8e67db47267a2855921d5843742a8f3 100644
--- a/hypha/apply/funds/templates/funds/includes/delegated_form_base.html
+++ b/hypha/apply/funds/templates/funds/includes/delegated_form_base.html
@@ -5,7 +5,7 @@
     id="{% if form_id %}{{ form_id }}{% else %}{{ form.name }}{% endif %}"
     enctype="multipart/form-data"
     {% if action %}action="{{ action }}"{% endif %}
-    >
+>
     {% csrf_token %}
 
     {{ form.media }}
@@ -20,24 +20,25 @@
         {% endif %}
     {% endfor %}
 
-    {% if cancel %}
-    <button
-        type="button"
-        data-fancybox-close=""
-        class="button button--{% if invert %}primary{% else %}white{% endif %} button--top-space"
-        title="{% trans "Close" %}">
-        {% trans "Cancel" %}
-    </button>
-    {% endif %}
-
-    {% trans "Delete" as delete %}
-    <button
-        class="button button--{% if invert %}white{% elif value == delete %}warning{% else %}primary{% endif %} button--top-space"
-        id="{{ form.name }}-submit"
-        name="{{ form_prefix }}{{ form.name }}"
-        type="submit"
-        form="{% if form_id %}{{ form_id }}{% else %}{{ form.name }}{% endif %}">
-        {{ value }}
-    </button>
+    <div class="form__group">
+        {% if cancel %}
+            <button
+                type="button"
+                data-fancybox-close=""
+                class="button button--{% if invert %}primary{% else %}white{% endif %}"
+                title="{% trans "Close" %}">
+                {% trans "Cancel" %}
+            </button>
+        {% endif %}
+        {% trans "Delete" as delete %}
+        <button
+            class="button button--{% if invert %}white{% elif value == delete %}warning{% else %}primary{% endif %}"
+            id="{{ form.name }}-submit"
+            name="{{ form_prefix }}{{ form.name }}"
+            type="submit"
+            form="{% if form_id %}{{ form_id }}{% else %}{{ form.name }}{% endif %}">
+            {{ value }}
+        </button>
+    </div>
 
 </form>
diff --git a/hypha/apply/funds/templates/funds/includes/generic_primary_actions.html b/hypha/apply/funds/templates/funds/includes/generic_primary_actions.html
index 7039d3240c2e6392d709ae33ff071777bccb0aa0..cdc138aaccd9107f99db9b499d3eb58e68635907 100644
--- a/hypha/apply/funds/templates/funds/includes/generic_primary_actions.html
+++ b/hypha/apply/funds/templates/funds/includes/generic_primary_actions.html
@@ -11,9 +11,9 @@
 
         {% if object.is_finished %}
             {% with determination=object.determinations.last %}
-            {% if determination %}
-                <a class="button button--primary button--full-width button--bottom-space" href="{% url 'apply:submissions:determinations:detail' submission_pk=object.id pk=determination.id %}">{% trans "View determination" %}</a>
-            {% endif %}
+                {% if determination %}
+                    <a class="button button--primary button--full-width button--bottom-space" href="{% url 'apply:submissions:determinations:detail' submission_pk=object.id pk=determination.id %}">{% trans "View determination" %}</a>
+                {% endif %}
             {% endwith %}
         {% endif %}
     </div>
diff --git a/hypha/apply/funds/templates/funds/includes/progress_form.html b/hypha/apply/funds/templates/funds/includes/progress_form.html
index d7b5d5ac592926fe6bc6f6a0836d6a5996b7553b..b0e323961bdbeb17ca0088d653244b49e4fc92d4 100644
--- a/hypha/apply/funds/templates/funds/includes/progress_form.html
+++ b/hypha/apply/funds/templates/funds/includes/progress_form.html
@@ -1,9 +1,9 @@
 {% load i18n %}
 {% if progress_form.should_show %}
-<div class="modal" id="update-status">
-    <h4 class="modal__header-bar">{% trans "Update status" %}</h4>
-    <p>{% trans "Current status" %}: {{ object.phase }}</p>
-    {% trans "Progress" as progress %}
-    {% include 'funds/includes/delegated_form_base.html' with form=progress_form value=progress %}
-</div>
+    <div class="modal" id="update-status">
+        <h4 class="modal__header-bar">{% trans "Update status" %}</h4>
+        <p>{% trans "Current status" %}: {{ object.phase }}</p>
+        {% trans "Progress" as progress %}
+        {% include 'funds/includes/delegated_form_base.html' with form=progress_form value=progress %}
+    </div>
 {% endif %}
diff --git a/hypha/apply/funds/templates/funds/includes/reminders_block.html b/hypha/apply/funds/templates/funds/includes/reminders_block.html
index 0488e1bb3e9a264ae5b7f2485a18d43eedaeeea3..839fc886efde2c617fcca66a01fa012875c3b0e6 100644
--- a/hypha/apply/funds/templates/funds/includes/reminders_block.html
+++ b/hypha/apply/funds/templates/funds/includes/reminders_block.html
@@ -7,24 +7,24 @@
             <li><strong>{{ action.grouper }}</strong>
                 <ul>
                     {% for reminder in action.list %}
-                    <li class="{% if reminder.is_expired %}expired-reminder{% endif %} reminder-list">
-                        <div class="reminder-title">
-                            {% if reminder.title %}
-                                {{ reminder.title }}
-                            {% else %}
-                                {% trans "untitled reminder" %}
-                            {% endif %}
-                        </div>
-                        <a class="link reminder-delete" href="{% url 'funds:submissions:reminders:delete' object.id reminder.id %}">
-                            <svg class="icon icon--delete"><use xlink:href="#delete"></use></svg>
-                        </a>
-                    </li>
+                        <li class="{% if reminder.is_expired %}expired-reminder{% endif %} reminder-list">
+                            <div class="reminder-title">
+                                {% if reminder.title %}
+                                    {{ reminder.title }}
+                                {% else %}
+                                    {% trans "untitled reminder" %}
+                                {% endif %}
+                            </div>
+                            <a class="link reminder-delete" href="{% url 'funds:submissions:reminders:delete' object.id reminder.id %}">
+                                <svg class="icon icon--delete"><use xlink:href="#delete"></use></svg>
+                            </a>
+                        </li>
                     {% endfor %}
                 </ul>
             </li>
             <br>
         {% empty %}
-        <li>{% trans "No reminders yet." %}</li>
-    	{% endfor %}
+            <li>{% trans "No reminders yet." %}</li>
+        {% endfor %}
     </ul>
 </div>
diff --git a/hypha/apply/funds/templates/funds/includes/rendered_answers.html b/hypha/apply/funds/templates/funds/includes/rendered_answers.html
index 63241e7f85259364f1daccbc4e8d36291f6c1f04..f6127bd8177fb4ca5c5e674c8b56dbf4860b2637 100644
--- a/hypha/apply/funds/templates/funds/includes/rendered_answers.html
+++ b/hypha/apply/funds/templates/funds/includes/rendered_answers.html
@@ -2,17 +2,17 @@
 <h3>{% trans "Proposal Information" %}</h3>
 <div class="grid grid--proposal-info">
     {% if object.get_value_display != "-" %}
-    <div>
-        <h5>{% trans "Requested Funding" %}</h5>
-        {{ object.get_value_display }}
-    </div>
+        <div>
+            <h5>{% trans "Requested Funding" %}</h5>
+            {{ object.get_value_display }}
+        </div>
     {% endif %}
 
     {% if object.get_duration_display != "-" %}
-    <div>
-        <h5>{% trans "Project Duration" %}</h5>
-        {{ object.get_duration_display }}
-    </div>
+        <div>
+            <h5>{% trans "Project Duration" %}</h5>
+            {{ object.get_duration_display }}
+        </div>
     {% endif %}
 
     <div>
@@ -25,10 +25,16 @@
         {{ object.get_email_display }}
     </div>
     {% if object.get_address_display != "-" %}
-    <div class="grid__cell--span-two">
-        <h5>{% trans "Address" %}</h5>
-        {{ object.get_address_display }}
-    </div>
+        <div class="grid__cell--span-two">
+            <h5>{% trans "Address" %}</h5>
+            {{ object.get_address_display }}
+        </div>
+    {% endif %}
+    {% if object.get_organization_name_display != "-" %}
+        <div class="grid__cell--span-two">
+            <h5>{% trans "Organization name" %}</h5>
+            {{ object.get_organization_name_display }}
+        </div>
     {% endif %}
 </div>
 
diff --git a/hypha/apply/funds/templates/funds/includes/review_sidebar.html b/hypha/apply/funds/templates/funds/includes/review_sidebar.html
index e584ba00c7af501e3429a954fc92a7f44d951584..75cb0d3a25ee0159c7b8a547b886559c493e008b 100644
--- a/hypha/apply/funds/templates/funds/includes/review_sidebar.html
+++ b/hypha/apply/funds/templates/funds/includes/review_sidebar.html
@@ -4,11 +4,13 @@
     <span>
         {{ recommendation|traffic_light }}
     </span>
-    <span class="font-medium">
-        {% trans 'Avg. Score'%}: {{assigned_reviewers|average_review_score|floatformat:'1'}}
-    </span>
+    {% with assigned_reviewers|average_review_score as average %}
+        <span class="font-medium">
+            {{ assigned_reviewers|average_review_score }}
+        </span>
+    {% endwith %}
 </div>
-     
+
 <ul class="reviews-sidebar mt-4" x-data='{showHiddenReviewers: false}'>
     {% if not staff_reviewers_exist %}
         <li class="reviews-sidebar__no-reviews">{% trans "No staff reviewers yet" %}</li>
diff --git a/hypha/apply/funds/templates/funds/includes/review_sidebar_item.html b/hypha/apply/funds/templates/funds/includes/review_sidebar_item.html
index 855fe31e4be3c2897731278148a7d4c226eecedf..9aaf018142714f18d0b78668f9179ddb0f786a36 100644
--- a/hypha/apply/funds/templates/funds/includes/review_sidebar_item.html
+++ b/hypha/apply/funds/templates/funds/includes/review_sidebar_item.html
@@ -28,8 +28,10 @@
                 {% if reviewer.role %}{% image reviewer.role.icon max-12x12 %}{% endif %}
             </div>
         {% endif %}
-        <div>{{ reviewer.review.get_recommendation_display }}</div>
-        <div>{{ reviewer.review.get_score_display }}</div>
+        {% with reviewer.review.get_recommendation_display as recommendation and reviewer.review.get_score_display as score %}
+            <div class="{{ recommendation|slugify }}">{{ recommendation }}</div>
+            <div class="{{ recommendation|slugify }}">{{ score }}</div>
+        {% endwith %}
     {% endif %}
 </li>
 
@@ -37,16 +39,16 @@
     {% if forloop.first %}
         <ul class="reviews-sidebar__decision">
     {% endif %}
-            <li class="reviews-sidebar__item reviews-sidebar__item--decision">
-                <div class="reviews-sidebar__name">
-                    <span>{{ opinion.author }}</span>
-                    {% with role=opinion.author.role %}
-                        {% if role %}{% image role.icon max-12x12 %}{% endif %}
-                    {% endwith %}
-                </div>
-                <div></div>
-                <div class="reviews-sidebar__outcome {{ opinion.get_opinion_display|lower }}">{{ opinion.get_opinion_display}}</div>
-            </li>
+    <li class="reviews-sidebar__item reviews-sidebar__item--decision">
+        <div class="reviews-sidebar__name">
+            <span>{{ opinion.author }}</span>
+            {% with role=opinion.author.role %}
+                {% if role %}{% image role.icon max-12x12 %}{% endif %}
+            {% endwith %}
+        </div>
+        <div></div>
+        <div class="reviews-sidebar__outcome {{ opinion.get_opinion_display|slugify }}">{{ opinion.get_opinion_display}}</div>
+    </li>
     {% if forloop.last %}
         </ul>
     {% endif %}
diff --git a/hypha/apply/funds/templates/funds/includes/revision_diff_table.html b/hypha/apply/funds/templates/funds/includes/revision_diff_table.html
index 55ecc5325ebefbba9d9475ea06f6ccf250682ad6..6017274d367d9d3baeb7cffe56f9bd51fcdaa4d0 100644
--- a/hypha/apply/funds/templates/funds/includes/revision_diff_table.html
+++ b/hypha/apply/funds/templates/funds/includes/revision_diff_table.html
@@ -1,25 +1,25 @@
 {% load i18n %}
 <table class="revision-diff-table">
-<tr><td><h3>{% trans "Proposal Information" %}</h3></td><td><h3>{% trans "Proposal Information" %}</h3></td></tr>
-<tr><td><h5>{% trans "Submitted" %}</h5>{{ timestamps.0|date:"DATETIME_FORMAT"}}</td><td><h5>{% trans "Submitted" %}</h5>{{ timestamps.1|date:"DATETIME_FORMAT"}}</td></tr>
-{% for from_field, to_field in required_fields %}
-    {% if forloop.first %}
-        <tr><td><h4>{% trans "Title" %}</h4>{{ from_field }}</td><td><h4>{% trans "Title" %}</h4>{{ to_field }}</td></tr>
-    {% elif forloop.counter == 2 %}
-        <tr><td><h5>{% trans "Legal Name" %}</h5>{{ from_field }}</td><td><h5>{% trans "Legal Name" %}</h5>{{ to_field }}</td></tr>
-    {% elif forloop.counter == 3 %}
-        <tr><td><h5>{% trans "E-mail" %}</h5>{{ from_field }}</td><td><h5>{% trans "E-mail" %}</h5>{{ to_field }}</td></tr>
-    {% elif forloop.counter == 4 %}
-        <tr><td><h5>{% trans "Requested Funding" %}</h5>{{ from_field }}</td><td><h5>{% trans "Requested Funding" %}</h5>{{ to_field }}</td></tr>
-    {% elif forloop.counter == 5 %}
-        <tr><td><h5>{% trans "Project Duration" %}</h5>{{ from_field }}</td><td><h5>{% trans "Project Duration" %}</h5>{{ to_field }}</td></tr>
-    {% elif forloop.counter == 6 %}
-        <tr><td><h5>{% trans "Address" %}</h5>{{ from_field }}</td><td><h5>{% trans "Address" %}</h5>{{ to_field }}</td></tr>
-    {% else %}
+    <tr><td><h3>{% trans "Proposal Information" %}</h3></td><td><h3>{% trans "Proposal Information" %}</h3></td></tr>
+    <tr><td><h5>{% trans "Submitted" %}</h5>{{ timestamps.0|date:"DATETIME_FORMAT"}}</td><td><h5>{% trans "Submitted" %}</h5>{{ timestamps.1|date:"DATETIME_FORMAT"}}</td></tr>
+    {% for from_field, to_field in required_fields %}
+        {% if forloop.first %}
+            <tr><td><h4>{% trans "Title" %}</h4>{{ from_field }}</td><td><h4>{% trans "Title" %}</h4>{{ to_field }}</td></tr>
+        {% elif forloop.counter == 2 %}
+            <tr><td><h5>{% trans "Legal Name" %}</h5>{{ from_field }}</td><td><h5>{% trans "Legal Name" %}</h5>{{ to_field }}</td></tr>
+        {% elif forloop.counter == 3 %}
+            <tr><td><h5>{% trans "E-mail" %}</h5>{{ from_field }}</td><td><h5>{% trans "E-mail" %}</h5>{{ to_field }}</td></tr>
+        {% elif forloop.counter == 4 %}
+            <tr><td><h5>{% trans "Requested Funding" %}</h5>{{ from_field }}</td><td><h5>{% trans "Requested Funding" %}</h5>{{ to_field }}</td></tr>
+        {% elif forloop.counter == 5 %}
+            <tr><td><h5>{% trans "Project Duration" %}</h5>{{ from_field }}</td><td><h5>{% trans "Project Duration" %}</h5>{{ to_field }}</td></tr>
+        {% elif forloop.counter == 6 %}
+            <tr><td><h5>{% trans "Address" %}</h5>{{ from_field }}</td><td><h5>{% trans "Address" %}</h5>{{ to_field }}</td></tr>
+        {% else %}
+            <tr><td>{{ from_field }}</td><td>{{ to_field }}</td></tr>
+        {% endif %}
+    {% endfor %}
+    {% for from_field, to_field in stream_fields %}
         <tr><td>{{ from_field }}</td><td>{{ to_field }}</td></tr>
-    {% endif %}
-{% endfor %}
-{% for from_field, to_field in stream_fields %}
-    <tr><td>{{ from_field }}</td><td>{{ to_field }}</td></tr>
-{% endfor %}
+    {% endfor %}
 </table>
diff --git a/hypha/apply/funds/templates/funds/includes/round-block-listing.html b/hypha/apply/funds/templates/funds/includes/round-block-listing.html
index 5fbd25c298386593ef5923aa81192f913929e35b..8897e973a5b467e299e8275769b2182678655826 100644
--- a/hypha/apply/funds/templates/funds/includes/round-block-listing.html
+++ b/hypha/apply/funds/templates/funds/includes/round-block-listing.html
@@ -12,16 +12,18 @@
                     {% else %}
                         {% trans "Open" %}
                     {% endif %}
-                    </p>
-                    <p class="round-block__determination">
-                        {% if round.progress is None %}
-                            -
-                        {% else %}
-                            {{ round.progress }}% {% trans 'Determined' %} ({{ round.closed_submissions }}/{{ round.total_submissions }})
-                        {% endif %}
-                    </p>
+                </p>
+                <p class="round-block__determination">
+                    {% if round.progress is None %}
+                        -
+                    {% else %}
+                        {{ round.progress }}% {% trans 'Determined' %} ({{ round.closed_submissions }}/{{ round.total_submissions }})
+                    {% endif %}
+                </p>
                 <a class="round-block__view" href="{% url 'apply:rounds:detail' pk=round.pk %}">{% trans 'View' %}</a>
-                <a class="round-block__view" href="{% url 'apply:rounds:export' pk=round.pk %}">{% trans 'Export' %}</a>
+                {% if can_export %}
+                    <a class="round-block__view" href="{% url 'apply:rounds:export' pk=round.pk %}">{% trans 'Export' %}</a>
+                {% endif %}
             </li>
         {% else %}
             <li class="round-block__item round-block__item--more">
@@ -29,10 +31,10 @@
             </li>
         {% endif %}
     {% empty %}
-            {% block empty_round %}
-                <p class="round-block__not-found">
-                    {% trans "There are no" %} {% if round.end_date %} {{ display_text|lower }} {% else %} {{ type|lower }} {% endif %} {% trans "rounds" %}
-                </p>
-            {% endblock %}
+        {% block empty_round %}
+            <p class="round-block__not-found">
+                {% trans "There are no" %} {% if round.end_date %} {{ display_text|lower }} {% else %} {{ type|lower }} {% endif %} {% trans "rounds" %}
+            </p>
+        {% endblock %}
     {% endfor %}
 </ul>
diff --git a/hypha/apply/funds/templates/funds/includes/round-block.html b/hypha/apply/funds/templates/funds/includes/round-block.html
index e4b869568372457b9005752bdb5a26c3eecdd1c9..3066e659a219759add1e6ab8021c9926bd785b67 100644
--- a/hypha/apply/funds/templates/funds/includes/round-block.html
+++ b/hypha/apply/funds/templates/funds/includes/round-block.html
@@ -1,39 +1,39 @@
 {% load i18n %}
 <div class="wrapper wrapper--bottom-space"
-    x-data="{ activeTab: 'closed-rounds' }"
-    x-init="activeTab = window.location.hash && ['#open-rounds', '#closed-rounds'].includes(window.location.hash) ? window.location.hash.substring(1) : 'closed-rounds'"
+     x-data="{ activeTab: 'closed-rounds' }"
+     x-init="activeTab = window.location.hash && ['#open-rounds', '#closed-rounds'].includes(window.location.hash) ? window.location.hash.substring(1) : 'closed-rounds'"
 >
     <section class="section section--with-options">
         <h4 class="heading heading--normal heading--no-margin">{{ title }}</a></h4>
-        <div>
-            <a class="tab__item tab__item--alt"
-                href="#open-rounds"
-                @click="activeTab = 'open-rounds'"
-                :class="{ 'tab__item--active': activeTab === 'open-rounds' }"
-            >{% trans "Open" %}</a>
-            <a class="tab__item tab__item--alt"
-                href="#closed-rounds"
-                @click="activeTab = 'closed-rounds'"
-                :class="{ 'tab__item--active': activeTab === 'closed-rounds' }"
-            >{% trans "Closed" %}</a>
-        </div>
-    </section>
+    <div>
+        <a class="tab__item tab__item--alt"
+           href="#open-rounds"
+           @click="activeTab = 'open-rounds'"
+           :class="{ 'tab__item--active': activeTab === 'open-rounds' }"
+        >{% trans "Open" %}</a>
+        <a class="tab__item tab__item--alt"
+           href="#closed-rounds"
+           @click="activeTab = 'closed-rounds'"
+           :class="{ 'tab__item--active': activeTab === 'closed-rounds' }"
+        >{% trans "Closed" %}</a>
+    </div>
+</section>
 
     {# Open rounds/labs tab #}
-    <div x-cloak x-show="activeTab === 'open-rounds'">
-        {% if page_type == 'dashboard' %}
-            {% include "funds/includes/no_round_block_dashboard.html" with rounds=open_rounds display_text="Open until" query=open_query type="Open" %}
-        {% else %}
-            {% include "funds/includes/round-block-listing.html" with rounds=open_rounds display_text="Open until" query=open_query type="Open" %}
-        {% endif %}
-    </div>
+<div x-cloak x-show="activeTab === 'open-rounds'">
+    {% if page_type == 'dashboard' %}
+        {% include "funds/includes/no_round_block_dashboard.html" with rounds=open_rounds display_text="Open until" query=open_query type="Open" %}
+    {% else %}
+        {% include "funds/includes/round-block-listing.html" with can_export=can_export rounds=open_rounds display_text="Open until" query=open_query type="Open" %}
+    {% endif %}
+</div>
 
     {# Closed rounds/labs tab #}
-    <div x-cloak x-show="activeTab === 'closed-rounds'">
-        {% if page_type == 'dashboard' %}
-            {% include "funds/includes/no_round_block_dashboard.html" with rounds=closed_rounds display_text="Closed" query=closed_query type="Closed" %}
-        {% else %}
-            {% include "funds/includes/round-block-listing.html" with rounds=closed_rounds display_text="Closed" query=closed_query type="Closed" %}
-        {% endif %}
-    </div>
+<div x-cloak x-show="activeTab === 'closed-rounds'">
+    {% if page_type == 'dashboard' %}
+        {% include "funds/includes/no_round_block_dashboard.html" with rounds=closed_rounds display_text="Closed" query=closed_query type="Closed" %}
+    {% else %}
+        {% include "funds/includes/round-block-listing.html" with rounds=closed_rounds display_text="Closed" query=closed_query type="Closed" %}
+    {% endif %}
+</div>
 </div>
diff --git a/hypha/apply/funds/templates/funds/includes/screening_form.html b/hypha/apply/funds/templates/funds/includes/screening_form.html
index 405afa466c5744c7f7afa784a072548a38ca442b..1d4248b526d66dbe3eb306341ca354a95d855ad3 100644
--- a/hypha/apply/funds/templates/funds/includes/screening_form.html
+++ b/hypha/apply/funds/templates/funds/includes/screening_form.html
@@ -1,9 +1,9 @@
 {% load i18n %}
 {% if screening_form.should_show %}
-<div class="modal" id="screen-application" data-yes-statuses="{{ submission.yes_screening_statuses }}" data-no-statuses="{{ submission.no_screening_statuses }}" data-default-yes="{{ default_yes }}" data-default-no="{{ default_no }}">
-    <h4 class="modal__header-bar">{% trans "Screen application" %}</h4>
-    <p id="current-status">{% trans "Current decisions" %}: {{ submission.screening_statuses.all|join:', ' }}</p>
-    {% trans "Screen" as screen %}
-    {% include 'funds/includes/delegated_form_base.html' with form=screening_form value=screen %}
-</div>
+    <div class="modal" id="screen-application" data-yes-statuses="{{ submission.yes_screening_statuses }}" data-no-statuses="{{ submission.no_screening_statuses }}" data-default-yes="{{ default_yes }}" data-default-no="{{ default_no }}">
+        <h4 class="modal__header-bar">{% trans "Screen application" %}</h4>
+        <p id="current-status">{% trans "Current decisions" %}: {{ submission.screening_statuses.all|join:', ' }}</p>
+        {% trans "Screen" as screen %}
+        {% include 'funds/includes/delegated_form_base.html' with form=screening_form value=screen %}
+    </div>
 {% endif %}
diff --git a/hypha/apply/funds/templates/funds/includes/screening_status_block.html b/hypha/apply/funds/templates/funds/includes/screening_status_block.html
index 671723c560e80799e6ba9c11bfac51e6512f9b16..0a2dfaebdc424f25a42dba2e5c52811ec23753e4 100644
--- a/hypha/apply/funds/templates/funds/includes/screening_status_block.html
+++ b/hypha/apply/funds/templates/funds/includes/screening_status_block.html
@@ -28,14 +28,14 @@
         {% if object.has_default_screening_status_set %}
             <p id="screening-options-para">
                 {% if object.screening_statuses.all.count > 1 %}
-                <div class="sidebar__screening-selected-options" id="Options">
-                    {% for status in object.screening_statuses.all%}
+                    <div class="sidebar__screening-selected-options" id="Options">
+                        {% for status in object.screening_statuses.all%}
                             <span class="sidebar__screening-option">{{ status }}</span>
-                    {% endfor%}
-                </div>
+                        {% endfor%}
+                    </div>
                 {% endif %}
                 {% if screen_able %}
-                <a id="screening-options" data-fancybox="" data-src="#screen-application" data-yes="{% if object.has_yes_default_screening_status_set %}true{% else %}false{% endif %}" class="link link--secondary-change" href="#">{% trans "Screening options" %}</a>
+                    <a id="screening-options" data-fancybox="" data-src="#screen-application" data-yes="{% if object.has_yes_default_screening_status_set %}true{% else %}false{% endif %}" class="link link--secondary-change" href="#">{% trans "Screening options" %}</a>
                 {% endif %}
             </p>
         {% endif %}
@@ -43,7 +43,7 @@
             <p id="screening-options-para">
                 <div class="sidebar__screening-selected-options">
                     {% for status in object.screening_statuses.all%}
-                            <span class="sidebar__screening-option">{{ status }}</span>
+                        <span class="sidebar__screening-option">{{ status }}</span>
                     {% endfor%}
                 </div>
             </p>
diff --git a/hypha/apply/funds/templates/funds/includes/status_bar_item.html b/hypha/apply/funds/templates/funds/includes/status_bar_item.html
index 051d097a3153f945cb40bf3adba0e94c7f6ca71c..0925a321983639b740cacd67ebc5f5fb44c68458 100644
--- a/hypha/apply/funds/templates/funds/includes/status_bar_item.html
+++ b/hypha/apply/funds/templates/funds/includes/status_bar_item.html
@@ -1,11 +1,11 @@
 <div class="status-bar__item
-{% if is_current %}
-    status-bar__item--is-current
-{% elif is_complete %}
-    status-bar__item--is-complete
-{% endif %}">
+            {% if is_current %}
+                status-bar__item--is-current
+            {% elif is_complete %}
+                status-bar__item--is-complete
+            {% endif %}">
     <span class="status-bar__tooltip"
-        data-title="{{ label }}" aria-label="{{ label }}"></span>
+          data-title="{{ label }}" aria-label="{{ label }}"></span>
     <svg class="status-bar__icon">
         <use xlink:href="#tick-alt"></use>
     </svg>
diff --git a/hypha/apply/funds/templates/funds/includes/submission_stats.html b/hypha/apply/funds/templates/funds/includes/submission_stats.html
index a18612762e8452de06ac25abb37e8ce062d0e4f3..ad17a2503cc5b4316b646bd13e416cd43240dada 100644
--- a/hypha/apply/funds/templates/funds/includes/submission_stats.html
+++ b/hypha/apply/funds/templates/funds/includes/submission_stats.html
@@ -1,9 +1,9 @@
-{% load i18n %}
+{% load i18n apply_tags %}
 <div class="stat-block">
     <div class="stat-block__item">
         <h5>{% trans "Amounts" %}</h5>
         <table>
-            <tr><th>{% trans "Applied" %} ({{ CURRENCY_SYMBOL }})</th><th>{% trans "Accepted" %}  ({{ CURRENCY_SYMBOL }})</th></tr>
+            <tr><th>{% trans "Applied" %} ({{ ""|format_number_as_currency }})</th><th>{% trans "Accepted" %}  ({{ ""|format_number_as_currency }})</th></tr>
             <tr><td>{{ submission_sum|default:"0" }}</td><td>{{ submission_accepted_sum|default:"0" }}</td></tr>
         </table>
     </div>
diff --git a/hypha/apply/funds/templates/funds/includes/table_filter_and_search.html b/hypha/apply/funds/templates/funds/includes/table_filter_and_search.html
index c78ce3f6e8445299abf770dd04857866c52cf69b..f561b17a748b77283e10f70f9f7abfd90cbe936f 100644
--- a/hypha/apply/funds/templates/funds/includes/table_filter_and_search.html
+++ b/hypha/apply/funds/templates/funds/includes/table_filter_and_search.html
@@ -6,18 +6,20 @@
         {# Left #}
         <div class="actions-bar__inner actions-bar__inner--left">
             {% if heading %}
-                <h4 class="heading heading--normal heading--no-margin">{{ heading }}
+                <h2 class="text-xl mb-2">
+
+                    {{ heading }}
 
                     {% if show_try_new_submissions_link %}
                         <a class="text-sm text-[#1d79a8] border-b border-transparent hover:opacity-70 hover:underline transition-all"
-                            hx-boost="true"
-                            href="{% url 'apply:submissions:list-beta' %}"
+                           hx-boost="true"
+                           href="{% url 'apply:submissions:list-beta' %}"
                         >
                             ({% heroicon_outline "rocket-launch" aria_hidden="true" size=15 stroke_width="2" class="inline align-text-bottom" %}
                             {% trans "Try newer version" %})
                         </a>
                     {% endif %}
-                </h4>
+                </h2>
             {% endif %}
 
 
@@ -74,16 +76,16 @@
 
             <button class="button button--filters js-toggle-filters" id="show-filters-button">{% trans "Filters" %}</button>
             {% if use_search|default:False %}
-            <form action="{{ search_action }}" method="get" role="search" class="form form--search-desktop">
-                <button class="button button--search" type="submit" aria-label="{% trans 'Search' %}">
-                    <svg class="icon icon--magnifying-glass icon--search"><use xlink:href="#magnifying-glass"></use></svg>
-                </button>
-                {% if show_archive and archived_param is not None %}
-                <input type="hidden" value="{{ archived_param }}" name="archived">
-                {% endif %}
-                {% trans "submissions" as submissions %}
-                <input class="input input--search input--secondary" type="text" placeholder="{% trans 'Search' %} {{ search_placeholder|default:submissions }}" name="query"{% if search_term %} value="{{ search_term }}"{% endif %} aria-label="{% trans 'Search input' %}">
-            </form>
+                <form action="{{ search_action }}" method="get" role="search" class="form form--search-desktop">
+                    <button class="button button--search" type="submit" aria-label="{% trans 'Search' %}">
+                        <svg class="icon icon--magnifying-glass icon--search"><use xlink:href="#magnifying-glass"></use></svg>
+                    </button>
+                    {% if show_archive and archived_param is not None %}
+                        <input type="hidden" value="{{ archived_param }}" name="archived">
+                    {% endif %}
+                    {% trans "submissions" as submissions %}
+                    <input class="input input--search input--secondary" type="text" placeholder="{% trans 'Search' %} {{ search_placeholder|default:submissions }}" name="query"{% if search_term %} value="{{ search_term }}"{% endif %} aria-label="{% trans 'Search input' %}">
+                </form>
             {% endif %}
         </div>
     </div>
diff --git a/hypha/apply/funds/templates/funds/reminder_confirm_delete.html b/hypha/apply/funds/templates/funds/reminder_confirm_delete.html
index 8f6e5f87768b99723d69827e776dec6846f02685..777fc55808fd2d828fb7f36be933d7f8889d534f 100644
--- a/hypha/apply/funds/templates/funds/reminder_confirm_delete.html
+++ b/hypha/apply/funds/templates/funds/reminder_confirm_delete.html
@@ -4,20 +4,19 @@
 {% block title %}{% trans "Deleting" %}: {{ object }}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Deleting" %}: {{ object }}</h2>
-    </div>
-</div>
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form" action="" method="post">
-            {% csrf_token %}
-            <p><strong{% blocktrans %}>Are you sure you want to delete "{{ object }}"?{% endblocktrans %}</strong></p>
+    {% adminbar %}
+        {% slot header %}{% trans "Deleting" %}: {{ object }}{% endslot %}
+    {% endadminbar %}
+
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form" action="" method="post">
+                {% csrf_token %}
+                <p><strong{% blocktrans %}>Are you sure you want to delete "{{ object }}"?{% endblocktrans %}</strong></p>
             <button class="button button--warning button--submit button--top-space" type="submit">{% trans "Confirm" %}</button>
         </form>
     </div>
-</div>
+    </div>
 
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/reviewer_leaderboard.html b/hypha/apply/funds/templates/funds/reviewer_leaderboard.html
index ba2a70f21cc17200d274e34be4b9ff1f2aa66658..e2caa5e4939d834966a888df90550f9bb095cef6 100644
--- a/hypha/apply/funds/templates/funds/reviewer_leaderboard.html
+++ b/hypha/apply/funds/templates/funds/reviewer_leaderboard.html
@@ -13,8 +13,8 @@
         {% if request.user.is_apply_staff %}
             <div class="flex mt-2 md:m-0 gap-3 justify-center items-center font-medium uppercase">
                 <a class="px-3 py-2 text-gray-300 transition-colors hover:bg-slate-50 rounded hover:text-gray-800"
-                    href="{% url 'apply:submissions:list' %}"
-                    title="Goto all submissions list page"
+                   href="{% url 'apply:submissions:list' %}"
+                   title="Goto all submissions list page"
                 >
                     {% trans "All" %}
                 </a>
@@ -31,12 +31,12 @@
         {% endif %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% block table %}
-        {% trans "All reviewers" as all_reviewers %}
-        {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term search_placeholder="reviewers" use_search=True filter_action=filter_action use_batch_actions=False heading=all_reviewers %}
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% block table %}
+            {% trans "All reviewers" as all_reviewers %}
+            {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term search_placeholder="reviewers" use_search=True filter_action=filter_action use_batch_actions=False heading=all_reviewers %}
 
-        {% render_table table %}
-    {% endblock %}
-</div>
+            {% render_table table %}
+        {% endblock %}
+    </div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/revisions_compare.html b/hypha/apply/funds/templates/funds/revisions_compare.html
index eaf55100d6dadfb30dbf276b370b6cb22e6d2e6e..fbae8efe386da0951bd99f85dfd3fbb21318917b 100644
--- a/hypha/apply/funds/templates/funds/revisions_compare.html
+++ b/hypha/apply/funds/templates/funds/revisions_compare.html
@@ -2,15 +2,22 @@
 {% load i18n %}
 {% block title %}{% trans "Compare" %}: {{ object.title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Comparing revisions" %}</h2>
-        <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" object.id %}">{{ object.title }}</a></h5>
-        <h5><a href="{% url "funds:submissions:revisions:list" object.id %}">{% trans "Back to revisions" %}</a></h5>
-    </div>
-</div>
 
-<div class="wrapper wrapper--large wrapper--tabs">
-    {% include "funds/includes/revision_diff_table.html" %}
-</div>
+    {% adminbar %}
+        {% slot back_link %}
+            <a class="simplified__submissions-link" href="{% url "funds:submissions:revisions:list" object.id %}">
+                {% trans "View revisions" %}
+            </a>
+        {% endslot %}
+
+        {% slot header %}{% trans "Comparing revisions" %}{% endslot %}
+        {% slot sub_heading %}
+            {% trans "For" %} <a class="text-blue-300 hover:underline" href="{% url "funds:submissions:detail" object.id %}">{{ object.title }}</a>
+        {% endslot %}
+
+    {% endadminbar %}
+
+    <div class="wrapper wrapper--large wrapper--tabs">
+        {% include "funds/includes/revision_diff_table.html" %}
+    </div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/rounds.html b/hypha/apply/funds/templates/funds/rounds.html
index 2037d39cf3968fe96f94349ed8fb110757c25523..f3f9f80c54573518dd5c088015a1791e6c1b1b04 100644
--- a/hypha/apply/funds/templates/funds/rounds.html
+++ b/hypha/apply/funds/templates/funds/rounds.html
@@ -5,7 +5,7 @@
 {% block title %}{% trans "Rounds" %}{% endblock %}
 
 {% block extra_css %}
-{{ filter.form.media.css }}
+    {{ filter.form.media.css }}
 {% endblock %}
 
 
@@ -16,16 +16,15 @@
         {% slot sub_heading %}{% trans "Explore current and past rounds" %}{% endslot %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_batch_actions=False %}
-    {% render_table table %}
-</div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_batch_actions=False %}
+        {% render_table table %}
+    </div>
 
 {% endblock %}
 
 {% block extra_js %}
-{{ filter.form.media.js }}
-<script src="{% static 'js/apply/url-search-params.js' %}"></script>
-<script src="{% static 'js/apply/submission-filters.js' %}"></script>
-<script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
+    {{ filter.form.media.js }}
+    <script src="{% static 'js/apply/url-search-params.js' %}"></script>
+    <script src="{% static 'js/apply/submission-filters.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/submission_sealed.html b/hypha/apply/funds/templates/funds/submission_sealed.html
index c08b4061b698228a8c930fe027fd56403e04fc06..4db73b2332965098a4e3279daf3649ae6d979383 100644
--- a/hypha/apply/funds/templates/funds/submission_sealed.html
+++ b/hypha/apply/funds/templates/funds/submission_sealed.html
@@ -4,28 +4,28 @@
 {% block title %}{% trans "Sealed" %}: {{ object.title }}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h1 class="beta heading heading--no-margin heading--bold">{{ object.title }}</h1>
-        <h5 class="heading heading--meta">
-            <span>{{ object.stage }}</span>
-            <span>{{ object.page }}</span>
-            <span>{{ object.round }}</span>
-            <span>{% trans "Lead" %}: {{ object.lead }}</span>
-        </h5>
-        {% status_bar object.workflow object.phase request.user same_stage=True %}
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h1 class="beta heading heading--no-margin heading--bold">{{ object.title }}</h1>
+            <h5 class="heading heading--meta">
+                <span>{{ object.stage }}</span>
+                <span>{{ object.page }}</span>
+                <span>{{ object.round }}</span>
+                <span>{% trans "Lead" %}: {{ object.lead }}</span>
+            </h5>
+            {% status_bar object.workflow object.phase request.user same_stage=True %}
+        </div>
+    </div>
+    <div class="wrapper wrapper--medium">
+        <h2 class="heading">{% trans "This application is sealed until the round is closed" %}</h2>
+        <h3>{% trans "The round ends on" %}: {{ object.round.specific.end_date }}</h3>
+        <a class="button button--primary" href="{% url 'apply:submissions:overview' %}">{% trans "Go back" %}</a>
+        {% if can_view_sealed %}
+            <p>{% trans "As an admin you are allowed to access the application. However, this action will be recorded." %}</p>
+            <form method="post">
+                {% csrf_token %}
+                <button class="button button--warning" type="submit">{% trans "View application" %}</button>
+            </form>
+        {% endif %}
     </div>
-</div>
-<div class="wrapper wrapper--medium">
-    <h2 class="heading">{% trans "This application is sealed until the round is closed" %}</h2>
-    <h3>{% trans "The round ends on" %}: {{ object.round.specific.end_date }}</h3>
-    <a class="button button--primary" href="{% url 'apply:submissions:overview' %}">{% trans "Go back" %}</a>
-    {% if can_view_sealed %}
-        <p>{% trans "As an admin you are allowed to access the application. However, this action will be recorded." %}</p>
-        <form method="post">
-            {% csrf_token %}
-            <button class="button button--warning" type="submit">{% trans "View application" %}</button>
-        </form>
-    {% endif %}
-</div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/submissions.html b/hypha/apply/funds/templates/funds/submissions.html
index 01efc3a9ba14a530d72aa54b79ebd336686c34b9..993e0540dd38200526c5e5fc076276bd775e1513 100644
--- a/hypha/apply/funds/templates/funds/submissions.html
+++ b/hypha/apply/funds/templates/funds/submissions.html
@@ -10,8 +10,8 @@
         {% slot header %}
             {% trans "All Submissions" %}<span class="submissions-count"> ({{ table.rows|length }})
                 <a class="text-sm text-lime-300 border-b border-transparent hover:opacity-70 transition-all"
-                    hx-boost="true"
-                    href="{% url 'apply:submissions:list-beta' %}"
+                   hx-boost="true"
+                   href="{% url 'apply:submissions:list-beta' %}"
                 >
                     {% heroicon_outline "rocket-launch" aria_hidden="true" size=15 stroke_width="2" class="inline align-text-bottom" %}
                     {% trans "Try newer version" %}
@@ -20,11 +20,11 @@
         {% slot sub_heading %}{% trans "Search and filter all submissions" %}{% endslot %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% block table %}
-        {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True filter_action=filter_action use_batch_actions=True filter_classes="filters-open" show_archive=show_archive %}
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% block table %}
+            {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True filter_action=filter_action use_batch_actions=True filter_classes="filters-open" show_archive=show_archive %}
 
-        {% render_table table %}
-    {% endblock %}
-</div>
+            {% render_table table %}
+        {% endblock %}
+    </div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/submissions_by_status.html b/hypha/apply/funds/templates/funds/submissions_by_status.html
index 91857445aa46252bab67f9e49777accc34d373bf..c99b2e14f75268cc07dbf013f9c7dd731584edaa 100644
--- a/hypha/apply/funds/templates/funds/submissions_by_status.html
+++ b/hypha/apply/funds/templates/funds/submissions_by_status.html
@@ -1,16 +1,15 @@
 {% extends "funds/base_submissions_table.html" %}
+{% load i18n %}
 
 {% block title %}{{ status }}{% endblock %}
 
 {% block content %}
-    <div class="admin-bar">
-        <div class="admin-bar__inner admin-bar__inner--with-button">
-            <div>
-                <h1 class="gamma heading heading--no-margin heading--bold">{{ status }}<span class="submissions-count"> ({{ table.rows|length }})</span></h1>
-            </div>
-            <div id="submissions-by-status-app-react-switcher"></div>
-        </div>
-    </div>
+    {% adminbar %}
+        {% slot header %}
+            {{ status }}<span class="submissions-count"> ({{ table.rows|length }})</span>
+        {% endslot %}
+        {% slot sub_heading %}{% trans "All submissions in " %}{{ status }}{% endslot %}
+    {% endadminbar %}
 
     <div id="submissions-by-status-react-app" data-statuses="{{ statuses|join:',' }}">
         <div class="wrapper wrapper--large wrapper--inner-space-medium">
diff --git a/hypha/apply/funds/templates/funds/submissions_overview.html b/hypha/apply/funds/templates/funds/submissions_overview.html
index 755737935ab4be24b85871d075656dbfc7edfea2..7c3a1609512c1deb18c499d0295d9f3ab2d244ef 100644
--- a/hypha/apply/funds/templates/funds/submissions_overview.html
+++ b/hypha/apply/funds/templates/funds/submissions_overview.html
@@ -12,23 +12,23 @@
         {% if request.user.is_apply_staff %}
             <div class="flex mt-2 md:m-0 gap-3 justify-center items-center font-medium uppercase">
                 <a class="px-3 py-2 text-gray-300 transition-colors hover:bg-slate-50 rounded hover:text-gray-800"
-                    href="{% url 'apply:submissions:list' %}"
-                    title="Goto all submissions list page"
+                   href="{% url 'apply:submissions:list' %}"
+                   title="Goto all submissions list page"
                 >
                     {% trans "All" %}
                 </a>
                 <a class="px-3 py-2 text-gray-300 transition-colors hover:bg-slate-50 rounded hover:text-gray-800"
-                    href="{% url 'apply:submissions:staff_assignments' %}"
+                   href="{% url 'apply:submissions:staff_assignments' %}"
                 >
                     {% trans "Staff assignments" %}
                 </a>
                 <a class="px-3 py-2 text-gray-300 transition-colors hover:bg-slate-50 rounded hover:text-gray-800"
-                    href="{% url 'apply:submissions:reviewer_leaderboard' %}"
+                   href="{% url 'apply:submissions:reviewer_leaderboard' %}"
                 >
                     {% trans "Reviews" %}
                 </a>
                 <a class="px-3 py-2 text-gray-300 transition-colors hover:bg-slate-50 rounded hover:text-gray-800"
-                    href="{% url 'apply:submissions:result' %}">
+                   href="{% url 'apply:submissions:result' %}">
                     {% trans "Results" %}
                 </a>
             </div>
@@ -41,7 +41,7 @@
         {% include "funds/includes/status-block.html" with type="Applications" %}
 
         {% if closed_rounds or open_rounds %}
-            {% include "funds/includes/round-block.html" with closed_rounds=closed_rounds open_rounds=open_rounds title=rounds_title page_type='submission' %}
+            {% include "funds/includes/round-block.html" with can_export=can_export closed_rounds=closed_rounds open_rounds=open_rounds title=rounds_title page_type='submission' %}
         {% endif %}
 
         {% block table %}
diff --git a/hypha/apply/funds/templates/funds/submissions_result.html b/hypha/apply/funds/templates/funds/submissions_result.html
index fff73f23d438c2a421c1d10f311159f6ac247921..501d5087cfe51e8e150dff3e93aafce386013a20 100644
--- a/hypha/apply/funds/templates/funds/submissions_result.html
+++ b/hypha/apply/funds/templates/funds/submissions_result.html
@@ -1,5 +1,5 @@
 {% extends "funds/submissions_overview.html" %}
-{% load i18n static %}
+{% load i18n static apply_tags %}
 {% block title %}{% trans "Submissions results" %}{% endblock %}
 
 {% block content %}
@@ -27,21 +27,21 @@
     {% endadminbar %}
 
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    <div class="wrapper wrapper--bottom-space">
-        <h4 class="heading heading--normal">{% trans "Summary" %}</h4>
-        {% include "funds/includes/submission_stats.html" %}
-    </div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        <div class="wrapper wrapper--bottom-space">
+            <h4 class="heading heading--normal">{% trans "Summary" %}</h4>
+            {% include "funds/includes/submission_stats.html" %}
+        </div>
 
-    <h4 class="heading heading--normal">{% trans "Filter submissions to calculate values" %}</h4>
-    {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True filter_action=filter_action use_batch_actions=False filter_classes="filters-open" %}
-    <div class="grid">
-        <div><strong>{% trans "Number of submission" %}:</strong> {{ count_values }}{% if not count_values == object_list.count %} ({{ object_list.count }}){% endif %}</div>
-        <div><strong>{% trans "Average value" %}:</strong> {{ CURRENCY_SYMBOL }}{{ average_value }}</div>
-        <div><strong>{% trans "Total value" %}:</strong> {{ CURRENCY_SYMBOL }}{{ total_value }}</div>
+        <h4 class="heading heading--normal">{% trans "Filter submissions to calculate values" %}</h4>
+        {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True filter_action=filter_action use_batch_actions=False filter_classes="filters-open" %}
+        <div class="grid">
+            <div><strong>{% trans "Number of submission" %}:</strong> {{ count_values }}{% if not count_values == object_list.count %} ({{ object_list.count }}){% endif %}</div>
+            <div><strong>{% trans "Average value" %}:</strong> {{ average_value|format_number_as_currency }}</div>
+            <div><strong>{% trans "Total value" %}:</strong> {{ total_value|format_number_as_currency }}</div>
+        </div>
+        {% if not count_values == object_list.count %}
+            <p>{% trans "Some submissions lack values and are not included." %}</p>
+        {% endif %}
     </div>
-    {% if not count_values == object_list.count %}
-        <p>{% trans "Some submissions lack values and are not included." %}</p>
-    {% endif %}
-</div>
 {% endblock %}
diff --git a/hypha/apply/funds/templates/funds/tables/column_reviews.html b/hypha/apply/funds/templates/funds/tables/column_reviews.html
index 1b89d74a34853f342b4b487c3a663fde26dd5af0..f06b6f9819907576e3fd926cd1faebd9bd77a0a9 100644
--- a/hypha/apply/funds/templates/funds/tables/column_reviews.html
+++ b/hypha/apply/funds/templates/funds/tables/column_reviews.html
@@ -4,7 +4,7 @@
     <tr class="reviews-summary__tr">
         <td class="reviews-summary__td">
             <div class="reviews-summary__td-width">
-                {{ record.review_submitted_count|default:'0' }} 
+                {{ record.review_submitted_count|default:'0' }}
                 <span class="counts-separator">/</span>
                 {% if record.stage.has_external_review %}
                     {{ record.review_count|default:'0' }}
diff --git a/hypha/apply/funds/templates/funds/tables/table.html b/hypha/apply/funds/templates/funds/tables/table.html
index e44777c5c2bce418218eb546ab4096bbac5f58ab..4971400454f320ef8ff4982e3ab0a7cf2d45d37d 100644
--- a/hypha/apply/funds/templates/funds/tables/table.html
+++ b/hypha/apply/funds/templates/funds/tables/table.html
@@ -53,13 +53,13 @@
                                             <ul class="list list--opinion">
                                         {% endif %}
 
-                                            <li class="list__item list__item--reviewer list__item--opinion">
-                                                <span class="list__item--reviewer-name">
-                                                    {{ opinion.author }}
-                                                    {% if opinion.author.role %}{% image opinion.author.role.icon max-12x12 %}{% endif %}
-                                                </span>
-                                                <span class="list__item list__item--reviewer-outcome {{ opinion.get_opinion_display|lower }}">{{ opinion.get_opinion_display }}</span>
-                                            </li>
+                                        <li class="list__item list__item--reviewer list__item--opinion">
+                                            <span class="list__item--reviewer-name">
+                                                {{ opinion.author }}
+                                                {% if opinion.author.role %}{% image opinion.author.role.icon max-12x12 %}{% endif %}
+                                            </span>
+                                            <span class="list__item list__item--reviewer-outcome {{ opinion.get_opinion_display|lower }}">{{ opinion.get_opinion_display }}</span>
+                                        </li>
 
                                         {% if forloop.last %}
                                             </ul>
@@ -89,14 +89,14 @@
             <td colspan="{{ table.columns|length }}">
                 <table class="submission-meta">
                     <tr class="submission-meta__row">
-                    {% for column in row.table.columns %}
-                        {% if forloop.first %}
-                        {% elif forloop.counter == 2 %}
-                            <th>{% trans "Linked" %} {{ row.record.previous.stage }}</th>
-                        {% else %}
-                            <th class="th th--{{ column.header|lower }}">{{ column.header }}</th>
-                        {% endif %}
-                    {% endfor %}
+                        {% for column in row.table.columns %}
+                            {% if forloop.first %}
+                            {% elif forloop.counter == 2 %}
+                                <th>{% trans "Linked" %} {{ row.record.previous.stage }}</th>
+                            {% else %}
+                                <th class="th th--{{ column.header|lower }}">{{ column.header }}</th>
+                            {% endif %}
+                        {% endfor %}
                     </tr>
 
                     {# mutate the row to render the data for the child row #}
@@ -105,7 +105,7 @@
                             {% for column, cell in row.items %}
                                 {% if column.name != "selected" %}
                                     <td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td>
-                                    {% endif %}
+                                {% endif %}
                             {% endfor %}
                         </tr>
                     {% endwith %}
@@ -117,7 +117,7 @@
 {% endblock %}
 
 {% block table.tbody.empty_text %}
-<tr class="all-submissions-table__empty"><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
+    <tr class="all-submissions-table__empty"><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
 {% endblock table.tbody.empty_text %}
 
 {% block pagination %}
diff --git a/hypha/apply/funds/templates/submissions/all.html b/hypha/apply/funds/templates/submissions/all.html
index e63252d24620e9ff70d73937b29324abb276b1cd..05f144da1acb34d71aa1a28273ce6c5265478a20 100644
--- a/hypha/apply/funds/templates/submissions/all.html
+++ b/hypha/apply/funds/templates/submissions/all.html
@@ -12,7 +12,7 @@
             {% trans "All Submissions" %}
             <span class="submissions-count"> ({{ page.paginator.count }})</span>
             <a class="text-sm text-lime-300 border-b border-transparent hover:opacity-70 transition-all"
-                href="{% url 'apply:submissions:list' %}"
+               href="{% url 'apply:submissions:list' %}"
             >
                 {% trans "View older version" %}
             </a>
@@ -67,7 +67,7 @@
 
         <label class="relative flex-auto">
             <span class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
-                {% heroicon_mini "magnifying-glass" size=20 class="text-gray-500" %}
+                {% heroicon_mini "magnifying-glass" size=20 class="text-fg-muted" %}
             </span>
             <input
                 type="search"
@@ -221,43 +221,43 @@
 
     <section
         x-data="
-        {
-            selectAll: false,
-            selectedSubmissions: [],
+                {
+                selectAll: false,
+                selectedSubmissions: [],
 
-            toggleAllCheckboxes() {
+                toggleAllCheckboxes() {
                 this.selectAll = !this.selectAll
                 this.selectedSubmissions = [];
 
                 checkboxes = document.querySelectorAll('input[x-model=selectedSubmissions]');
 
                 [...checkboxes].map((el) => {
-                    el.checked = this.selectAll;
-                    (this.selectAll) ? this.selectedSubmissions.push(el.value) : this.selectedSubmissions = [];
+                el.checked = this.selectAll;
+                (this.selectAll) ? this.selectedSubmissions.push(el.value) : this.selectedSubmissions = [];
                 })
-            },
-            get selectedSubmissionCount(){
+                },
+                get selectedSubmissionCount(){
                 return this.selectedSubmissions.length;
-            },
-            get showSelectedSubmissions(){
+                },
+                get showSelectedSubmissions(){
                 return (this.selectedSubmissions.length > 0);
-            }
-        }"
+                }
+                }"
         x-init="
-            $watch('selectedSubmissions', (value) => {
+                $watch('selectedSubmissions', (value) => {
                 var total = document.querySelectorAll('input[x-model=selectedSubmissions]').length
                 if (value.length == 0) {
-                    $refs.checkboxSelectAll.indeterminate = false
-                    $refs.checkboxSelectAll.checked = false
+                $refs.checkboxSelectAll.indeterminate = false
+                $refs.checkboxSelectAll.checked = false
                 } else if (value.length === total) {
-                    $refs.checkboxSelectAll.indeterminate = false
-                    $refs.checkboxSelectAll.checked = true
+                $refs.checkboxSelectAll.indeterminate = false
+                $refs.checkboxSelectAll.checked = true
                 } else {
-                    $refs.checkboxSelectAll.indeterminate = true
-                    $refs.checkboxSelectAll.checked = false
+                $refs.checkboxSelectAll.indeterminate = true
+                $refs.checkboxSelectAll.checked = false
                 }
-            })
-        "
+                })
+               "
     >
         <header
             hx-target="#main"
@@ -281,7 +281,7 @@
             </span>
 
             <nav x-show="!showSelectedSubmissions"
-                class="menu-filters flex flex-wrap gap-2 items-center"
+                 class="menu-filters flex flex-wrap gap-2 items-center"
             >
                 <div id="filterupdated" aria-label="Filter by Updated" class="flex items-center">
                     <button class="flex cursor-pointer items-center justify-between w-full py-1 pl-2 pr-2 border md:pr-4 md:border-none font-medium text-gray-600 hover:bg-gray-50 md:hover:bg-transparent md:hover:text-blue-700 md:p-0">
@@ -326,7 +326,7 @@
                             </li>
                         {% endfor %}
                     </ul>
-                    <p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No statuses found. Sorry about that." %}</p>
+                    <p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No statuses found. Sorry about that." %}</p>
                 {% enddropdown_menu %}
 
                 {% dropdown_menu title="Fund" heading="Filter by Fund &amp; Labs" enable_search=True %}
@@ -409,9 +409,9 @@
                 x-show="showSelectedSubmissions"
                 class="selection-actions flex flex-wrap flex-row gap-5 items-center"
             >
-                {% comment %} {% dropdown_menu title="Status" heading="Update Status" enable_search=True %}
+                {% dropdown_menu title="Status" heading="Update Status" enable_search=True %}
                     {% slot "url" hx-include="[name='selectedSubmissionIds']" hx-trigger="mouseover, focus" %}{% url "apply:submissions:submenu-update-status" %}{% endslot %}
-                {% enddropdown_menu %} {% endcomment %}
+                {% enddropdown_menu %}
 
                 {% dropdown_menu title="Lead" heading="Assign Lead" enable_search=True position="right" %}
                     {% slot "url" %}{% url "apply:submissions:submenu-bulk-update-lead" %}{% remove_from_query "only_query_string" "page" %}{% endslot %}
@@ -454,9 +454,9 @@
         <section
             class="bg-white border-x border-b w-full"
             {% if submission_ids %}
-            hx-trigger="load delay:50"
-            hx-get="{% url "funds:submissions:partial-reviews-decisions" %}?ids={{ submission_ids|join:',' }}"
-            hx-swap="multi:{% for s in submission_ids %}#r{{s}}{% if not forloop.last %},{% endif %}{% endfor %}"
+                hx-trigger="load delay:50"
+                hx-get="{% url "funds:submissions:partial-reviews-decisions" %}?ids={{ submission_ids|join:',' }}"
+                hx-swap="multi:{% for s in submission_ids %}#r{{s}}{% if not forloop.last %},{% endif %}{% endfor %}"
             {% endif %}
         >
             {% for s in submissions %}
diff --git a/hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html b/hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html
index 26f7e66814897bb9d6880077367e8a4c32f109b1..d9963aba0b7c5e5646ad66925991add5d1c1a9d4 100644
--- a/hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html
+++ b/hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html
@@ -11,7 +11,7 @@
                 title="{% blocktrans with user_title=user.title %}Assign {{ user_title }} as lead.{% endblocktrans %}"
                 class="flex pl-8 pr-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100">
                 <strong class="font-bold">{{ user.title }}</strong>
-                {% if user.slack %} <span class="text-gray-500 font-light ml-1">{{ user.slack }}</span>{% endif %}
+                {% if user.slack %} <span class="text-fg-muted font-light ml-1">{{ user.slack }}</span>{% endif %}
             </a>
         </li>
     {% empty %}
@@ -20,4 +20,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No lead found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No lead found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/bulk-update-reviewers.html b/hypha/apply/funds/templates/submissions/submenu/bulk-update-reviewers.html
index 686bc878b4198f541ab020e7c3ce610f1174eed5..433ec17ca602dab1fd291b4498467500d7c7050d 100644
--- a/hypha/apply/funds/templates/submissions/submenu/bulk-update-reviewers.html
+++ b/hypha/apply/funds/templates/submissions/submenu/bulk-update-reviewers.html
@@ -28,15 +28,15 @@
         {% if field.name == "external_reviewers" and not show_external_reviewers %}
         {% comment %} skip for external reviewer if not allowed {% endcomment %}
         {% else %}
-        <fieldset class="mt-3">
-            <label for="{{ field.id_for_label }}">
-                {{ field.label }}
-            </label>
+            <fieldset class="mt-3">
+                <label for="{{ field.id_for_label }}">
+                    {{ field.label }}
+                </label>
 
-            <div class="mt-2">
-                {{ field }}
-            </div>
-        </fieldset>
+                <div class="mt-2">
+                    {{ field }}
+                </div>
+            </fieldset>
         {% endif %}
     {% endfor %}
 
diff --git a/hypha/apply/funds/templates/submissions/submenu/category.html b/hypha/apply/funds/templates/submissions/submenu/category.html
index cab0c23486ab15cc84a82dc39ef77a6a4fb23c2a..032b961f9634ce216a11268d65d2a3eb7cfe9327 100644
--- a/hypha/apply/funds/templates/submissions/submenu/category.html
+++ b/hypha/apply/funds/templates/submissions/submenu/category.html
@@ -5,9 +5,9 @@
     {% if selected_category_options %}
         <li data-filter-item-text>
             <a href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "category_options" %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "category_options" %}"
-                hx-push-url="true"
-                class="flex px-3 py-2 text-gray-600 border-b items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
+               hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "category_options" %}"
+               hx-push-url="true"
+               class="flex px-3 py-2 text-gray-600 border-b items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
                 {% trans "All Categories" %}
             </a>
         </li>
@@ -16,21 +16,21 @@
         <li data-filter-item-text>
             <a
                 {% if item.selected %}
-                href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" category_options=item.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" category_options=item.id %}"
-                title="Remove {{ item.title }} from current filters"
+                    href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" category_options=item.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" category_options=item.id %}"
+                    title="Remove {{ item.title }} from current filters"
                 {% else %}
-                href="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" category_options=item.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" category_options=item.id %}"
-                title="Add {{ item.title }} to current filters"
+                    href="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" category_options=item.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" category_options=item.id %}"
+                    title="Add {{ item.title }} to current filters"
                 {% endif %}
                 hx-push-url="true"
                 class="flex {% if item.selected %}pl-2 font-medium bg-gray-100{% else %}pl-8{% endif %} pr-3 py-2 text-gray-600 border-b items-center hover:bg-gray-100 focus:bg-gray-100">
                 {% if item.selected %}
                     <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4 mr-2">
                         <path fill-rule="evenodd"
-                            d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
-                            clip-rule="evenodd" />
+                              d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
+                              clip-rule="evenodd" />
                     </svg>
                 {% endif %}
                 <strong class="font-bold">{{ item.title }}</strong>
@@ -42,4 +42,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No categories found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No categories found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/change-status.html b/hypha/apply/funds/templates/submissions/submenu/change-status.html
index 622102b6af06b00616b9dcc5d064947c1d674a38..dc91c3042d06728f3e6012c817c5d1ff11a3112a 100644
--- a/hypha/apply/funds/templates/submissions/submenu/change-status.html
+++ b/hypha/apply/funds/templates/submissions/submenu/change-status.html
@@ -19,4 +19,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No statuses found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No statuses found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/funds.html b/hypha/apply/funds/templates/submissions/submenu/funds.html
index 5ba6ec7357bae2460d2abe04546aa417a6af568d..ab71e8f66e1115c436175e475dba47c0503cca1d 100644
--- a/hypha/apply/funds/templates/submissions/submenu/funds.html
+++ b/hypha/apply/funds/templates/submissions/submenu/funds.html
@@ -5,9 +5,9 @@
     {% if selected_funds %}
         <li data-filter-item-text>
             <a href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "fund" %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "fund" %}"
-                hx-push-url="true"
-                class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
+               hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "fund" %}"
+               hx-push-url="true"
+               class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
                 {% trans "All Funds &amp; Labs" %}
             </a>
         </li>
@@ -16,11 +16,11 @@
         <li data-filter-item-text>
             <a
                 {% if f.selected %}
-                href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" fund=f.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" fund=f.id %}"
+                    href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" fund=f.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" fund=f.id %}"
                 {% else %}
-                href="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" fund=f.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" fund=f.id %}"
+                    href="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" fund=f.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" fund=f.id %}"
                 {% endif %}
                 hx-push-url="true"
                 class="flex {% if f.selected %}pl-2 font-medium{% else %}pl-8{% endif %} pr-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if f.selected %}bg-gray-100{% endif %}">
@@ -36,4 +36,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No funds found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No funds found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/leads.html b/hypha/apply/funds/templates/submissions/submenu/leads.html
index c9bcdae62a48d1ed409893a9dc4dee712dc0effb..45f53e0a163f0847dc499f14cee43aa12fcd442a 100644
--- a/hypha/apply/funds/templates/submissions/submenu/leads.html
+++ b/hypha/apply/funds/templates/submissions/submenu/leads.html
@@ -4,9 +4,9 @@
     {% if selected_leads %}
         <li data-filter-item-text>
             <a href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "lead" %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "lead" %}"
-                hx-push-url="true"
-                class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
+               hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "lead" %}"
+               hx-push-url="true"
+               class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
                 {% trans "All Leads" %}
             </a>
         </li>
@@ -24,7 +24,7 @@
                     {% heroicon_mini "check" aria_hidden="true" size=16 class="stroke-2 mr-1" %}
                 {% endif %}
                 <strong class="font-bold">{{ user.title }}</strong>
-                {% if user.slack %} <span class="text-gray-500 font-light ml-1">{{ user.slack }}</span>{% endif %}
+                {% if user.slack %} <span class="text-fg-muted font-light ml-1">{{ user.slack }}</span>{% endif %}
             </a>
         </li>
     {% empty %}
@@ -33,4 +33,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No leads found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No leads found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/meta-terms.html b/hypha/apply/funds/templates/submissions/submenu/meta-terms.html
index 2f65ce90a65924d7c66d898b587187e0e32399d3..d43784ea744d5e7bb103e798751b1d10b2fd7ea7 100644
--- a/hypha/apply/funds/templates/submissions/submenu/meta-terms.html
+++ b/hypha/apply/funds/templates/submissions/submenu/meta-terms.html
@@ -4,9 +4,9 @@
     {% if selected_meta_terms %}
         <li data-filter-item-text>
             <a href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "meta_terms" %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "meta_terms" %}"
-                hx-push-url="true"
-                class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
+               hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "meta_terms" %}"
+               hx-push-url="true"
+               class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
                 {% trans "All Meta Terms" %}
             </a>
         </li>
@@ -15,21 +15,21 @@
         <li data-filter-item-text>
             <a
                 {% if meta_term.selected %}
-                href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" meta_terms=meta_term.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" meta_terms=meta_term.id %}"
-                title="Remove {{ meta_term.title }} from current filters"
+                    href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" meta_terms=meta_term.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" meta_terms=meta_term.id %}"
+                    title="Remove {{ meta_term.title }} from current filters"
                 {% else %}
-                href="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" meta_terms=meta_term.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" meta_terms=meta_term.id %}"
-                title="Add {{ meta_term.title }} to current filters"
+                    href="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" meta_terms=meta_term.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" meta_terms=meta_term.id %}"
+                    title="Add {{ meta_term.title }} to current filters"
                 {% endif %}
                 hx-push-url="true"
                 class="flex {% if meta_term.selected %}pl-2 font-medium bg-gray-100{% else %}pl-8{% endif %} pr-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100">
                 {% if meta_term.selected %}
                     <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4 mr-2">
                         <path fill-rule="evenodd"
-                            d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
-                            clip-rule="evenodd" />
+                              d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
+                              clip-rule="evenodd" />
                     </svg>
                 {% endif %}
                 <strong class="{% if meta_term.depth == 1 %}font-bold{% else %}font-normal{% endif %}">
@@ -43,4 +43,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No meta terms found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No meta terms found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/reviewers.html b/hypha/apply/funds/templates/submissions/submenu/reviewers.html
index 29d0aa6b2f93e83e12170a3c61a72d0392a7fefa..6efe5e7f889539d46a2dff64b7948454e433bcce 100644
--- a/hypha/apply/funds/templates/submissions/submenu/reviewers.html
+++ b/hypha/apply/funds/templates/submissions/submenu/reviewers.html
@@ -4,9 +4,9 @@
     {% if selected_reviewers %}
         <li data-filter-item-text>
             <a href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "reviewers" %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "reviewers" %}"
-                hx-push-url="true"
-                class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
+               hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" "reviewers" %}"
+               hx-push-url="true"
+               class="flex px-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if s.selected %}bg-gray-100{% endif %}">
                 {% trans "All Reviewers" %}
             </a>
         </li>
@@ -15,25 +15,25 @@
         <li data-filter-item-text>
             <a
                 {% if user.selected %}
-                href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" reviewers=user.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" reviewers=user.id %}"
-                title="Remove {{ user.title }} from current filters"
+                    href="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" reviewers=user.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% remove_from_query "only_query_string" "page" reviewers=user.id %}"
+                    title="Remove {{ user.title }} from current filters"
                 {% else %}
-                href="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" reviewers=user.id %}"
-                hx-get="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" reviewers=user.id %}"
-                title="Add {{ user.title }} to current filters"
+                    href="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" reviewers=user.id %}"
+                    hx-get="{% url "apply:submissions:list-beta" %}{% add_to_query "only_query_string" "page" reviewers=user.id %}"
+                    title="Add {{ user.title }} to current filters"
                 {% endif %}
                 hx-push-url="true"
                 class="flex {% if user.selected %}pl-2 font-medium bg-gray-100{% else %}pl-8{% endif %} pr-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100">
                 {% if user.selected %}
                     <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4 mr-2">
                         <path fill-rule="evenodd"
-                            d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
-                            clip-rule="evenodd" />
+                              d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z"
+                              clip-rule="evenodd" />
                     </svg>
                 {% endif %}
                 <strong class="font-bold">{{ user.title }}</strong>
-                {% if user.slack %} <span class="text-gray-500 font-light ml-1">{{ user.slack }}</span>{% endif %}
+                {% if user.slack %} <span class="text-fg-muted font-light ml-1">{{ user.slack }}</span>{% endif %}
             </a>
         </li>
     {% empty %}
@@ -42,4 +42,4 @@
         </li>
     {% endfor %}
 </ul>
-<p class="m-0 px-3 py-2 text-gray-500" data-filter-empty-state hidden>{% trans "No reviewers found. Sorry about that." %}</p>
+<p class="m-0 px-3 py-2 text-fg-muted" data-filter-empty-state hidden>{% trans "No reviewers found. Sorry about that." %}</p>
diff --git a/hypha/apply/funds/templates/submissions/submenu/rounds.html b/hypha/apply/funds/templates/submissions/submenu/rounds.html
index d11b1d1b9c401c656e57e736f9092eac7bad6e0f..fcae9a57a4a337d9a4c4f74cecc18c6231668d06 100644
--- a/hypha/apply/funds/templates/submissions/submenu/rounds.html
+++ b/hypha/apply/funds/templates/submissions/submenu/rounds.html
@@ -22,33 +22,33 @@
             <nav class="flex px-3 pt-2" style="box-shadow: inset 0 -1px 0 #e5e7eb">
 
                 {% if closed_rounds %}
-                <span @click="tab = 'closed_rounds'"
-                    role="tab"
-                    :class="{ 'border-x border-t border-b-transparent': tab === 'closed_rounds' }"
-                    class="text-center bg-white inline-block px-4 py-2 border-b rounded-t-lg cursor-pointer hover:text-gray-900">Closed</span>
+                    <span @click="tab = 'closed_rounds'"
+                          role="tab"
+                          :class="{ 'border-x border-t border-b-transparent': tab === 'closed_rounds' }"
+                          class="text-center bg-white inline-block px-4 py-2 border-b rounded-t-lg cursor-pointer hover:text-gray-900">Closed</span>
                 {% endif %}
 
                 {% if open_rounds %}
-                <span @click="tab = 'open_rounds'"
-                    role="tab"
-                    :class="{ 'border-x border-t border-b-transparent': tab === 'open_rounds' }"
-                    class="text-center bg-white inline-block px-4 py-2 border-b rounded-t-lg round cursor-pointer hover:text-gray-900">Open</span>
+                    <span @click="tab = 'open_rounds'"
+                          role="tab"
+                          :class="{ 'border-x border-t border-b-transparent': tab === 'open_rounds' }"
+                          class="text-center bg-white inline-block px-4 py-2 border-b rounded-t-lg round cursor-pointer hover:text-gray-900">Open</span>
                 {% endif %}
             </nav>
 
-             <div data-filter-list>
+            <div data-filter-list>
                 {% if closed_rounds %}
                     <div class="tab-closed-rounds divide-y overflow-scroll max-h-80"
-                        x-show="tab === 'closed_rounds'"
-                        :aria-hidden="tab === 'closed_rounds' ? 'false' : 'true'"
-                        role="tabpanel"
+                         x-show="tab === 'closed_rounds'"
+                         :aria-hidden="tab === 'closed_rounds' ? 'false' : 'true'"
+                         role="tabpanel"
                     >
                         {% for f in closed_rounds %}
                             <a data-filter-item-text
-                                href="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" round=f.id %}"
-                                hx-get="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" round=f.id %}"
-                                hx-push-url="true"
-                                class="flex {% if f.selected %}pl-2 font-medium{% else %}pl-8{% endif %} pr-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if f.selected %}bg-gray-100{% endif %}">
+                               href="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" round=f.id %}"
+                               hx-get="{% url "apply:submissions:list-beta" %}{% modify_query "only_query_string" "page" round=f.id %}"
+                               hx-push-url="true"
+                               class="flex {% if f.selected %}pl-2 font-medium{% else %}pl-8{% endif %} pr-3 py-2 text-gray-600 items-center hover:bg-gray-100 focus:bg-gray-100{% if f.selected %}bg-gray-100{% endif %}">
                                 {% if f.selected %}
                                     {% heroicon_mini "check" aria_hidden="true" size=16 class="stroke-2 mr-1" %}
                                 {% endif %}
@@ -60,9 +60,9 @@
 
                 {% if open_rounds %}
                     <div class="tab-open-rounds divide-y overflow-scroll max-h-80"
-                        x-show="tab === 'open_rounds'"
-                        :aria-hidden="tab === 'open_rounds' ? 'false' : 'true'"
-                        role="tabpanel"
+                         x-show="tab === 'open_rounds'"
+                         :aria-hidden="tab === 'open_rounds' ? 'false' : 'true'"
+                         role="tabpanel"
                     >
                         {% for f in open_rounds %}
                             <a
@@ -81,10 +81,10 @@
                     </div>
                 {% endif %}
             </div>
-        {% else %}
-            <div class="block px-3 py-2 text-gray-600">
-                {% trans "No rounds available" %}
-            </div>
-        {% endif %}
-    </div>
+    {% else %}
+        <div class="block px-3 py-2 text-gray-600">
+            {% trans "No rounds available" %}
+        </div>
+    {% endif %}
+</div>
 </div>
diff --git a/hypha/apply/funds/templatetags/primaryactions_tags.py b/hypha/apply/funds/templatetags/primaryactions_tags.py
index bf131ff83768d45084d58d6ec0692102672c3076..8eeeffe04c5b3a949156a3befb1f7123c480b57b 100644
--- a/hypha/apply/funds/templatetags/primaryactions_tags.py
+++ b/hypha/apply/funds/templatetags/primaryactions_tags.py
@@ -5,7 +5,9 @@ register = template.Library()
 
 @register.filter
 def should_display_primary_actions_block(user, submission):
-    review_primary_action_displayed = submission.can_review(user) and (submission.in_internal_review_phase or submission.in_external_review_phase)
+    review_primary_action_displayed = submission.can_review(user) and (
+        submission.in_internal_review_phase or submission.in_external_review_phase
+    )
     view_determination_action_displayed = submission.is_finished
 
     if review_primary_action_displayed or view_determination_action_displayed:
diff --git a/hypha/apply/funds/templatetags/statusbar_tags.py b/hypha/apply/funds/templatetags/statusbar_tags.py
index 8b48c8b590dd0e298997c78ff1cfd7030d3bbd14..de59f36db19e8ce2a4ed133f81dc00e4d3238837 100644
--- a/hypha/apply/funds/templatetags/statusbar_tags.py
+++ b/hypha/apply/funds/templatetags/statusbar_tags.py
@@ -3,17 +3,15 @@ from django import template
 register = template.Library()
 
 
-@register.inclusion_tag('funds/includes/status_bar.html')
-def status_bar(workflow, current_phase, user, author=False, css_class='', same_stage=False):
-
+@register.inclusion_tag("funds/includes/status_bar.html")
+def status_bar(
+    workflow, current_phase, user, author=False, css_class="", same_stage=False
+):
     phases = workflow.phases_for(user)
     is_applicant = user == author if author else user.is_applicant
 
     if same_stage and not is_applicant:
-        phases = [
-            phase for phase in phases
-            if phase.stage == current_phase.stage
-        ]
+        phases = [phase for phase in phases if phase.stage == current_phase.stage]
 
     if not current_phase.permissions.can_view(user):
         current_phase = workflow.previous_visible(current_phase, user)
@@ -30,10 +28,10 @@ def status_bar(workflow, current_phase, user, author=False, css_class='', same_s
         phases = new_phase_list
 
     return {
-        'phases': phases,
-        'current_phase': current_phase,
-        'class': css_class,
-        'public': user.is_applicant or user.is_partner,
+        "phases": phases,
+        "current_phase": current_phase,
+        "class": css_class,
+        "public": user.is_applicant or user.is_partner,
     }
 
 
diff --git a/hypha/apply/funds/templatetags/submission_tags.py b/hypha/apply/funds/templatetags/submission_tags.py
index 1be36113408ab51fbb58bf6bcb15eb9d2c2f8e68..825f9481614130484281737939faa5596393e4d5 100644
--- a/hypha/apply/funds/templatetags/submission_tags.py
+++ b/hypha/apply/funds/templatetags/submission_tags.py
@@ -11,15 +11,17 @@ register = template.Library()
 @register.filter
 def submission_links(value):
     # Match tags in the format #123 that is not preceeded and/or followed by a word character.
-    matches = re.findall(r'(?<![\w\&])\#(\d+)(?!\w)', value)
+    matches = re.findall(r"(?<![\w\&])\#(\d+)(?!\w)", value)
     links = {}
     if matches:
         for submission in ApplicationSubmission.objects.filter(id__in=matches):
-            links[fr'\#{submission.id}'] = f'<a href="{submission.get_absolute_url()}">{submission.title} <span class="mid-grey-text">#{submission.id}</span></a>'
+            links[
+                rf"\#{submission.id}"
+            ] = f'<a href="{submission.get_absolute_url()}">{submission.title} <span class="mid-grey-text">#{submission.id}</span></a>'
 
     if links:
         for sid, link in links.items():
-            value = re.sub(fr'(?<!\w){sid}(?!\w)', link, value)
+            value = re.sub(rf"(?<!\w){sid}(?!\w)", link, value)
 
     return mark_safe(value)
 
diff --git a/hypha/apply/funds/templatetags/table_tags.py b/hypha/apply/funds/templatetags/table_tags.py
index 7b0f5a34b844bf918e2519bc0e24e5a8efde8639..17d732bb59ce57761b80774dce4762a65fa24123 100644
--- a/hypha/apply/funds/templatetags/table_tags.py
+++ b/hypha/apply/funds/templatetags/table_tags.py
@@ -15,5 +15,4 @@ def row_from_record(row, record):
 
 @register.simple_tag
 def total_num_of_pages(total_no_of_rows, per_page):
-    return math.ceil(total_no_of_rows/per_page)
-
+    return math.ceil(total_no_of_rows / per_page)
diff --git a/hypha/apply/funds/templatetags/workflow_tags.py b/hypha/apply/funds/templatetags/workflow_tags.py
index ebb13a9b241440b1051f753e8a08e5f0a0c891e1..f518e85611635c024ad3623ff8501fa5cd81e69f 100644
--- a/hypha/apply/funds/templatetags/workflow_tags.py
+++ b/hypha/apply/funds/templatetags/workflow_tags.py
@@ -6,15 +6,15 @@ register = template.Library()
 def check_permission(user, perm, submission):
     if submission.is_archive:
         return False
-    perm_method = getattr(submission.phase.permissions, f'can_{perm}', lambda x: False)
+    perm_method = getattr(submission.phase.permissions, f"can_{perm}", lambda x: False)
     return perm_method(user)
 
 
 @register.filter
 def has_edit_perm(user, submission):
-    return check_permission(user, 'edit', submission)
+    return check_permission(user, "edit", submission)
 
 
 @register.filter
 def has_review_perm(user, submission):
-    return check_permission(user, 'review', submission)
+    return check_permission(user, "review", submission)
diff --git a/hypha/apply/funds/tests/factories/blocks.py b/hypha/apply/funds/tests/factories/blocks.py
index e4c7d4a0a71903a051df2dffcd20f93e14bd1304..cb03d2dd3908765e37d123fe13b672fa09c24380 100644
--- a/hypha/apply/funds/tests/factories/blocks.py
+++ b/hypha/apply/funds/tests/factories/blocks.py
@@ -12,25 +12,31 @@ from hypha.apply.stream_forms.testing.factories import (
 )
 from hypha.apply.utils.testing.factories import RichTextFieldBlockFactory
 
-__all__ = ['CustomFormFieldsFactory', 'TitleBlockFactory', 'EmailBlockFactory', 'FullNameBlockFactory', 'ValueFieldBlockFactory']
+__all__ = [
+    "CustomFormFieldsFactory",
+    "TitleBlockFactory",
+    "EmailBlockFactory",
+    "FullNameBlockFactory",
+    "ValueFieldBlockFactory",
+]
 
 
 class TitleBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('sentence')
+    default_value = factory.Faker("sentence")
 
     class Meta:
         model = blocks.TitleBlock
 
 
 class EmailBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('email')
+    default_value = factory.Faker("email")
 
     class Meta:
         model = blocks.EmailBlock
 
 
 class FullNameBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('name')
+    default_value = factory.Faker("name")
 
     class Meta:
         model = blocks.FullNameBlock
@@ -63,51 +69,71 @@ class AddressFieldBlockFactory(FormFieldBlockFactory):
     def make_answer(cls, params=None):
         if not params:
             params = {}
-        return json.dumps({
-            'country': 'GB',
-            'thoroughfare': factory.Faker('street_name').evaluate(None, None, dict(params, locale=None)),
-            'premise': factory.Faker('building_number').evaluate(None, None, dict(params, locale=None)),
-            'localityname': factory.Faker('city').evaluate(None, None, dict(params, locale=None)),
-            'administrativearea': factory.Faker('city').evaluate(None, None, dict(params, locale=None)),
-            'postalcode': 'SW1 4AQ',
-        })
+        return json.dumps(
+            {
+                "country": "GB",
+                "thoroughfare": factory.Faker("street_name").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                "premise": factory.Faker("building_number").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                "localityname": factory.Faker("city").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                "administrativearea": factory.Faker("city").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                "postalcode": "SW1 4AQ",
+            }
+        )
 
     @classmethod
     def make_form_answer(cls, params=None):
         if params is None:
-            params = ''
+            params = ""
         try:
             address = json.loads(params)
         except TypeError:
             if not params:
                 params = {}
             return {
-                'country': 'GB',
-                'thoroughfare': factory.Faker('street_name').evaluate(None, None, dict(params, locale=None)),
-                'premise': factory.Faker('building_number').evaluate(None, None, dict(params, locale=None)),
-                'locality': {
-                    'localityname': factory.Faker('city').evaluate(None, None, dict(params, locale=None)),
-                    'administrativearea': factory.Faker('city').evaluate(None, None, dict(params, locale=None)),
-                    'postal_code': 'SW1 4AQ',
-                }
+                "country": "GB",
+                "thoroughfare": factory.Faker("street_name").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                "premise": factory.Faker("building_number").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                "locality": {
+                    "localityname": factory.Faker("city").evaluate(
+                        None, None, dict(params, locale=None)
+                    ),
+                    "administrativearea": factory.Faker("city").evaluate(
+                        None, None, dict(params, locale=None)
+                    ),
+                    "postal_code": "SW1 4AQ",
+                },
             }
 
-        address['locality'] = {
-            'localityname': address.pop('localityname'),
-            'administrativearea': address.pop('administrativearea'),
-            'postalcode': address.pop('postalcode'),
+        address["locality"] = {
+            "localityname": address.pop("localityname"),
+            "administrativearea": address.pop("administrativearea"),
+            "postalcode": address.pop("postalcode"),
         }
         return address
 
 
-CustomFormFieldsFactory = StreamFieldUUIDFactory({
-    **BLOCK_FACTORY_DEFINITION,
-    'duration': DurationBlockFactory,
-    'title': TitleBlockFactory,
-    'value': ValueFieldBlockFactory,
-    'email': EmailBlockFactory,
-    'address': AddressFieldBlockFactory,
-    'full_name': FullNameBlockFactory,
-    'text_markup': ParagraphBlockFactory,
-    'rich_text': RichTextFieldBlockFactory,
-})
+CustomFormFieldsFactory = StreamFieldUUIDFactory(
+    {
+        **BLOCK_FACTORY_DEFINITION,
+        "duration": DurationBlockFactory,
+        "title": TitleBlockFactory,
+        "value": ValueFieldBlockFactory,
+        "email": EmailBlockFactory,
+        "address": AddressFieldBlockFactory,
+        "full_name": FullNameBlockFactory,
+        "text_markup": ParagraphBlockFactory,
+        "rich_text": RichTextFieldBlockFactory,
+    }
+)
diff --git a/hypha/apply/funds/tests/factories/models.py b/hypha/apply/funds/tests/factories/models.py
index 9da35a9b8fbf14a428183e84ddfc1036d963ee95..e285b65ddd90573f5a142f400161e90177db2adb 100644
--- a/hypha/apply/funds/tests/factories/models.py
+++ b/hypha/apply/funds/tests/factories/models.py
@@ -39,27 +39,27 @@ from hypha.apply.users.tests.factories import (
 from . import blocks
 
 __all__ = [
-    'FundTypeFactory',
-    'ApplicationBaseFormFactory',
-    'ApplicationFormFactory',
-    'ApplicationRevisionFactory',
-    'ApplicationSubmissionFactory',
-    'AssignedReviewersFactory',
-    'AssignedWithRoleReviewersFactory',
-    'InvitedToProposalFactory',
-    'RoundFactory',
-    'RoundBaseFormFactory',
-    'LabFactory',
-    'LabBaseFormFactory',
-    'LabSubmissionFactory',
-    'RequestForPartnersFactory',
-    'ScreeningStatusFactory',
-    'SealedRoundFactory',
-    'SealedSubmissionFactory',
-    'ReviewerRoleFactory',
-    'TodayRoundFactory',
-    'workflow_for_stages',
-    'ReminderFactory',
+    "FundTypeFactory",
+    "ApplicationBaseFormFactory",
+    "ApplicationFormFactory",
+    "ApplicationRevisionFactory",
+    "ApplicationSubmissionFactory",
+    "AssignedReviewersFactory",
+    "AssignedWithRoleReviewersFactory",
+    "InvitedToProposalFactory",
+    "RoundFactory",
+    "RoundBaseFormFactory",
+    "LabFactory",
+    "LabBaseFormFactory",
+    "LabSubmissionFactory",
+    "RequestForPartnersFactory",
+    "ScreeningStatusFactory",
+    "SealedRoundFactory",
+    "SealedSubmissionFactory",
+    "ReviewerRoleFactory",
+    "TodayRoundFactory",
+    "workflow_for_stages",
+    "ReminderFactory",
 ]
 
 
@@ -77,11 +77,13 @@ class AbstractApplicationFactory(wagtail_factories.PageFactory):
     class Params:
         workflow_stages = 1
 
-    title = factory.Faker('sentence')
+    title = factory.Faker("sentence")
     parent = factory.SubFactory(ApplyHomePageFactory)
 
     # Will need to update how the stages are identified as Fund Page changes
-    workflow_name = factory.LazyAttribute(lambda o: workflow_for_stages(o.workflow_stages))
+    workflow_name = factory.LazyAttribute(
+        lambda o: workflow_for_stages(o.workflow_stages)
+    )
 
     @factory.post_generation
     def forms(self, create, extracted, **kwargs):
@@ -112,12 +114,16 @@ class RequestForPartnersFactory(AbstractApplicationFactory):
 class AbstractRelatedFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         abstract = True
-    form = factory.SubFactory('hypha.apply.funds.tests.factories.ApplicationFormFactory')
+
+    form = factory.SubFactory(
+        "hypha.apply.funds.tests.factories.ApplicationFormFactory"
+    )
 
 
 class ApplicationBaseFormFactory(AbstractRelatedFormFactory):
     class Meta:
         model = ApplicationBaseForm
+
     application = factory.SubFactory(FundTypeFactory)
 
 
@@ -125,7 +131,7 @@ class ApplicationFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ApplicationForm
 
-    name = factory.Faker('word')
+    name = factory.Faker("word")
     form_fields = blocks.CustomFormFieldsFactory
 
 
@@ -136,16 +142,26 @@ class RoundFactory(wagtail_factories.PageFactory):
     class Params:
         now = factory.Trait(
             start_date=factory.LazyFunction(datetime.date.today),
-            end_date=factory.LazyFunction(lambda: datetime.date.today() + datetime.timedelta(days=7)),
+            end_date=factory.LazyFunction(
+                lambda: datetime.date.today() + datetime.timedelta(days=7)
+            ),
         )
         closed = factory.Trait(
-            start_date=factory.LazyFunction(lambda: datetime.date.today() - datetime.timedelta(days=7)),
-            end_date=factory.LazyFunction(lambda: datetime.date.today() - datetime.timedelta(days=1)),
+            start_date=factory.LazyFunction(
+                lambda: datetime.date.today() - datetime.timedelta(days=7)
+            ),
+            end_date=factory.LazyFunction(
+                lambda: datetime.date.today() - datetime.timedelta(days=1)
+            ),
         )
 
-    title = factory.Sequence('Round {}'.format)
-    start_date = factory.Sequence(lambda n: datetime.date.today() + datetime.timedelta(days=7 * n + 1))
-    end_date = factory.Sequence(lambda n: datetime.date.today() + datetime.timedelta(days=7 * (n + 1)))
+    title = factory.Sequence("Round {}".format)
+    start_date = factory.Sequence(
+        lambda n: datetime.date.today() + datetime.timedelta(days=7 * n + 1)
+    )
+    end_date = factory.Sequence(
+        lambda n: datetime.date.today() + datetime.timedelta(days=7 * (n + 1))
+    )
     lead = factory.SubFactory(StaffFactory)
     parent = factory.SubFactory(FundTypeFactory)
 
@@ -172,12 +188,15 @@ class SealedRoundFactory(RoundFactory):
 
 class TodayRoundFactory(RoundFactory):
     start_date = factory.LazyFunction(datetime.date.today)
-    end_date = factory.LazyFunction(lambda: datetime.date.today() + datetime.timedelta(days=7))
+    end_date = factory.LazyFunction(
+        lambda: datetime.date.today() + datetime.timedelta(days=7)
+    )
 
 
 class RoundBaseFormFactory(AbstractRelatedFormFactory):
     class Meta:
         model = RoundBaseForm
+
     round = factory.SubFactory(RoundFactory)
 
 
@@ -206,6 +225,7 @@ class LabFactory(AbstractApplicationFactory):
 class LabBaseFormFactory(AbstractRelatedFormFactory):
     class Meta:
         model = LabBaseForm
+
     lab = factory.SubFactory(LabFactory)
 
 
@@ -219,21 +239,19 @@ class ApplicationSubmissionFactory(factory.django.DjangoModelFactory):
 
     class Params:
         workflow_stages = 1
-        rejected = factory.Trait(
-            status='rejected'
-        )
+        rejected = factory.Trait(status="rejected")
         with_external_review = False
 
     form_fields = blocks.CustomFormFieldsFactory
     form_data = factory.SubFactory(
         ApplicationFormDataFactory,
-        form_fields=factory.SelfAttribute('..form_fields'),
+        form_fields=factory.SelfAttribute("..form_fields"),
     )
-    page = factory.SelfAttribute('.round.fund')
+    page = factory.SelfAttribute(".round.fund")
     round = factory.SubFactory(
         RoundFactory,
-        workflow_name=factory.SelfAttribute('..workflow_name'),
-        lead=factory.SelfAttribute('..lead'),
+        workflow_name=factory.SelfAttribute("..workflow_name"),
+        lead=factory.SelfAttribute("..lead"),
     )
     user = factory.SubFactory(ApplicantFactory)
     lead = factory.SubFactory(StaffFactory)
@@ -261,17 +279,19 @@ class ReviewerRoleFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ReviewerRole
 
-    name = factory.Faker('word')
+    name = factory.Faker("word")
     order = factory.Sequence(lambda n: n)
 
 
 class AssignedReviewersFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = AssignedReviewers
-        django_get_or_create = ('submission', 'reviewer')
+        django_get_or_create = ("submission", "reviewer")
 
     class Params:
-        staff = factory.Trait(type=factory.SubFactory(GroupFactory, name=STAFF_GROUP_NAME))
+        staff = factory.Trait(
+            type=factory.SubFactory(GroupFactory, name=STAFF_GROUP_NAME)
+        )
 
     submission = factory.SubFactory(ApplicationSubmissionFactory)
     role = None
@@ -287,16 +307,16 @@ class InvitedToProposalFactory(ApplicationSubmissionFactory):
     class Params:
         workflow_stages = 2
         draft = factory.Trait(
-            status='draft_proposal',
+            status="draft_proposal",
         )
 
-    status = 'proposal_discussion'
+    status = "proposal_discussion"
     previous = factory.RelatedFactory(
         ApplicationSubmissionFactory,
-        'next',
-        round=factory.SelfAttribute('..round'),
-        page=factory.SelfAttribute('..page'),
-        status='invited_to_proposal',
+        "next",
+        round=factory.SelfAttribute("..round"),
+        page=factory.SelfAttribute("..page"),
+        status="invited_to_proposal",
     )
 
 
@@ -304,8 +324,8 @@ class SealedSubmissionFactory(ApplicationSubmissionFactory):
     page = factory.SubFactory(RequestForPartnersFactory)
     round = factory.SubFactory(
         SealedRoundFactory,
-        workflow_name=factory.SelfAttribute('..workflow_name'),
-        lead=factory.SelfAttribute('..lead'),
+        workflow_name=factory.SelfAttribute("..workflow_name"),
+        lead=factory.SelfAttribute("..lead"),
         now=True,
     )
 
@@ -319,10 +339,12 @@ class ApplicationRevisionFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ApplicationRevision
 
-    submission = factory.SubFactory('hypha.apply.funds.tests.factories.ApplicationSubmissionFactory')
+    submission = factory.SubFactory(
+        "hypha.apply.funds.tests.factories.ApplicationSubmissionFactory"
+    )
     form_data = factory.SubFactory(
         ApplicationFormDataFactory,
-        form_fields=factory.SelfAttribute('..submission.form_fields'),
+        form_fields=factory.SelfAttribute("..submission.form_fields"),
         for_factory=ApplicationSubmissionFactory,
         clean=True,
     )
@@ -331,7 +353,8 @@ class ApplicationRevisionFactory(factory.django.DjangoModelFactory):
 class AbstractReviewFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         abstract = True
-    form = factory.SubFactory('hypha.apply.review.tests.factories.ReviewFormFactory')
+
+    form = factory.SubFactory("hypha.apply.review.tests.factories.ReviewFormFactory")
 
 
 class ApplicationBaseReviewFormFactory(AbstractReviewFormFactory):
@@ -367,7 +390,11 @@ class ReminderFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Reminder
 
-    submission = factory.SubFactory('hypha.apply.funds.tests.factories.ApplicationSubmissionFactory')
+    submission = factory.SubFactory(
+        "hypha.apply.funds.tests.factories.ApplicationSubmissionFactory"
+    )
     user = factory.SubFactory(StaffFactory)
-    time = factory.Sequence(lambda n: timezone.now() + datetime.timedelta(days=7 * n + 1))
+    time = factory.Sequence(
+        lambda n: timezone.now() + datetime.timedelta(days=7 * n + 1)
+    )
     action = factory.Iterator(["reviewers_review"])
diff --git a/hypha/apply/funds/tests/models/test_roundsandlabs.py b/hypha/apply/funds/tests/models/test_roundsandlabs.py
index f1c8c5a7b189b1ae6aaddcc251ead7d9cf6c45e8..bed5a705ada1e51185b6e4453fab902da099d6e7 100644
--- a/hypha/apply/funds/tests/models/test_roundsandlabs.py
+++ b/hypha/apply/funds/tests/models/test_roundsandlabs.py
@@ -39,10 +39,12 @@ class BaseRoundsAndLabTestCase:
         qs = RoundsAndLabs.objects.with_progress()
         fetched_obj = qs.first()
         self.assertEqual(fetched_obj.lead, obj.lead.full_name)
-        self.assertEqual(fetched_obj.start_date, getattr(obj, 'start_date', None))
-        self.assertEqual(fetched_obj.end_date, getattr(obj, 'end_date', None))
+        self.assertEqual(fetched_obj.start_date, getattr(obj, "start_date", None))
+        self.assertEqual(fetched_obj.end_date, getattr(obj, "end_date", None))
         self.assertEqual(fetched_obj.parent_path, obj.get_parent().path)
-        self.assertEqual(fetched_obj.fund, getattr(getattr(obj, 'fund', None), 'title', None))
+        self.assertEqual(
+            fetched_obj.fund, getattr(getattr(obj, "fund", None), "title", None)
+        )
 
     def test_active(self):
         obj = self.base_factory()
@@ -82,7 +84,7 @@ class BaseRoundsAndLabTestCase:
 class TestForLab(BaseRoundsAndLabTestCase, TestCase):
     base_factory = LabFactory
     submission_factory = LabSubmissionFactory
-    relation_to_app = 'page'
+    relation_to_app = "page"
 
     # Specific tests as labs and round have very different behaviour here
     def test_new(self):
@@ -104,7 +106,7 @@ class TestForLab(BaseRoundsAndLabTestCase, TestCase):
 class TestForRound(BaseRoundsAndLabTestCase, TestCase):
     base_factory = RoundFactory
     submission_factory = ApplicationSubmissionFactory
-    relation_to_app = 'round'
+    relation_to_app = "round"
 
     # Specific tests as labs and round have very different behaviour here
     def test_new(self):
diff --git a/hypha/apply/funds/tests/test_admin_form.py b/hypha/apply/funds/tests/test_admin_form.py
index 2ab76c8e1f0c828b2072f5f9f957d30b26edd1a9..31181affc07da5db44b751bd707a2f938f33de01 100644
--- a/hypha/apply/funds/tests/test_admin_form.py
+++ b/hypha/apply/funds/tests/test_admin_form.py
@@ -14,8 +14,8 @@ from .factories import ApplicationFormFactory, FundTypeFactory, workflow_for_sta
 
 def formset_base(field, total, delete, factory, same=False, form_stage_info=None):
     base_data = {
-        f'{field}-TOTAL_FORMS': total + delete,
-        f'{field}-INITIAL_FORMS': 0,
+        f"{field}-TOTAL_FORMS": total + delete,
+        f"{field}-INITIAL_FORMS": 0,
     }
 
     required_forms = total + delete
@@ -28,31 +28,79 @@ def formset_base(field, total, delete, factory, same=False, form_stage_info=None
     deleted = 0
     for i, form in enumerate(application_forms):
         should_delete = deleted < delete
-        base_data.update({
-            f'{field}-{i}-form': form.id,
-            f'{field}-{i}-ORDER': i,
-            f'{field}-{i}-DELETE': should_delete,
-        })
+        base_data.update(
+            {
+                f"{field}-{i}-form": form.id,
+                f"{field}-{i}-ORDER": i,
+                f"{field}-{i}-DELETE": should_delete,
+            }
+        )
         if form_stage_info:
             # form_stage_info contains stage number for selected application forms
             stage = form_stage_info[i]
-            base_data[f'{field}-{i}-stage'] = stage
+            base_data[f"{field}-{i}-stage"] = stage
         deleted += 1
 
     return base_data
 
 
-def form_data(num_appl_forms=0, num_review_forms=0, num_determination_forms=0, num_external_review_forms=0, num_project_approval_form=0, num_project_sow_form=0, delete=0, stages=1, same_forms=False, form_stage_info=None):
+def form_data(
+    num_appl_forms=0,
+    num_review_forms=0,
+    num_determination_forms=0,
+    num_external_review_forms=0,
+    num_project_approval_form=0,
+    num_project_sow_form=0,
+    delete=0,
+    stages=1,
+    same_forms=False,
+    form_stage_info=None,
+):
     if form_stage_info is None:
         form_stage_info = [1]
     form_data = formset_base(
-        'forms', num_appl_forms, delete, same=same_forms, factory=ApplicationFormFactory,
-        form_stage_info=form_stage_info)
-    review_form_data = formset_base('review_forms', num_review_forms, False, same=same_forms, factory=ReviewFormFactory)
-    external_review_form_data = formset_base('external_review_forms', num_external_review_forms, True, same=same_forms, factory=ReviewFormFactory)
-    determination_form_data = formset_base('determination_forms', num_determination_forms, False, same=same_forms, factory=DeterminationFormFactory)
-    project_approval_form_data = formset_base('approval_forms', num_project_approval_form, False, same=same_forms, factory=ProjectApprovalFormFactory)
-    project_sow_form_data = formset_base('sow_forms', num_project_sow_form, False, same=same_forms, factory=ProjectSOWFormFactory)
+        "forms",
+        num_appl_forms,
+        delete,
+        same=same_forms,
+        factory=ApplicationFormFactory,
+        form_stage_info=form_stage_info,
+    )
+    review_form_data = formset_base(
+        "review_forms",
+        num_review_forms,
+        False,
+        same=same_forms,
+        factory=ReviewFormFactory,
+    )
+    external_review_form_data = formset_base(
+        "external_review_forms",
+        num_external_review_forms,
+        True,
+        same=same_forms,
+        factory=ReviewFormFactory,
+    )
+    determination_form_data = formset_base(
+        "determination_forms",
+        num_determination_forms,
+        False,
+        same=same_forms,
+        factory=DeterminationFormFactory,
+    )
+    project_approval_form_data = formset_base(
+        "approval_forms",
+        num_project_approval_form,
+        False,
+        same=same_forms,
+        factory=ProjectApprovalFormFactory,
+    )
+    project_sow_form_data = formset_base(
+        "sow_forms",
+        num_project_sow_form,
+        False,
+        same=same_forms,
+        factory=ProjectSOWFormFactory,
+    )
 
     form_data.update(review_form_data)
     form_data.update(external_review_form_data)
@@ -61,14 +109,13 @@ def form_data(num_appl_forms=0, num_review_forms=0, num_determination_forms=0, n
     form_data.update(project_sow_form_data)
 
     fund_data = factory.build(dict, FACTORY_CLASS=FundTypeFactory)
-    fund_data['workflow_name'] = workflow_for_stages(stages)
+    fund_data["workflow_name"] = workflow_for_stages(stages)
 
     form_data.update(fund_data)
     return form_data
 
 
 class TestWorkflowFormAdminForm(TestCase):
-
     def submit_data(self, data):
         form_class = FundType.get_edit_handler().get_form_class()
         return form_class(data=data)
@@ -76,61 +123,104 @@ class TestWorkflowFormAdminForm(TestCase):
     def test_doesnt_validates_with_no_form(self):
         form = self.submit_data(form_data())
         self.assertFalse(form.is_valid())
-        self.assertTrue(form.errors['__all__'])
+        self.assertTrue(form.errors["__all__"])
 
     def test_validates_with_one_form_one_stage(self):
         form = self.submit_data(form_data(1, 1, 1, 0, 1))
         self.assertTrue(form.is_valid(), form.errors.as_text())
 
     def test_validates_with_one_form_one_stage_with_deleted(self):
-        form = self.submit_data(form_data(1, 1, 1, 0, 1, delete=1, form_stage_info=[2, 1]))
+        form = self.submit_data(
+            form_data(1, 1, 1, 0, 1, delete=1, form_stage_info=[2, 1])
+        )
         self.assertTrue(form.is_valid(), form.errors.as_text())
 
     def test_doesnt_validates_with_two_forms_one_stage(self):
         form = self.submit_data(form_data(2, 2, 2, 0, 1, form_stage_info=[1, 2]))
         self.assertFalse(form.is_valid())
-        self.assertTrue(form.errors['__all__'])
-        formset_errors = form.formsets['forms'].errors
+        self.assertTrue(form.errors["__all__"])
+        formset_errors = form.formsets["forms"].errors
         # First form is ok
         self.assertFalse(formset_errors[0])
         # second form is too many
-        self.assertTrue(formset_errors[1]['form'])
+        self.assertTrue(formset_errors[1]["form"])
 
     def test_can_save_two_forms(self):
-        form = self.submit_data(form_data(2, 2, 2, 0, 1, stages=2, form_stage_info=[1, 2]))
+        form = self.submit_data(
+            form_data(2, 2, 2, 0, 1, stages=2, form_stage_info=[1, 2])
+        )
         self.assertTrue(form.is_valid())
 
     def test_can_save_multiple_forms_stage_two(self):
-        form = self.submit_data(form_data(3, 2, 2, 0, 1, stages=2, form_stage_info=[1, 2, 2]))
+        form = self.submit_data(
+            form_data(3, 2, 2, 0, 1, stages=2, form_stage_info=[1, 2, 2])
+        )
         self.assertTrue(form.is_valid())
 
     def test_doesnt_validates_with_two_first_stage_forms_in_two_stage(self):
-        form = self.submit_data(form_data(2, 2, 2, 0, 1, stages=2, form_stage_info=[1, 1]))
+        form = self.submit_data(
+            form_data(2, 2, 2, 0, 1, stages=2, form_stage_info=[1, 1])
+        )
         self.assertFalse(form.is_valid())
-        self.assertTrue(form.errors['__all__'])
+        self.assertTrue(form.errors["__all__"])
 
     def test_validate_external_review_form(self):
-        form = self.submit_data(form_data(1, 1, 1, num_external_review_forms=1, num_project_approval_form=1, stages=1))
+        form = self.submit_data(
+            form_data(
+                1,
+                1,
+                1,
+                num_external_review_forms=1,
+                num_project_approval_form=1,
+                stages=1,
+            )
+        )
         self.assertTrue(form.is_valid(), form.errors.as_text())
 
     def test_validates_without_external_review_form(self):
-        form = self.submit_data(form_data(1, 1, 1, num_external_review_forms=0, num_project_approval_form=1, stages=1))
+        form = self.submit_data(
+            form_data(
+                1,
+                1,
+                1,
+                num_external_review_forms=0,
+                num_project_approval_form=1,
+                stages=1,
+            )
+        )
         self.assertTrue(form.is_valid(), form.errors.as_text())
 
     def test_doesnt_validates_with_multiple_external_review_form(self):
-        form = self.submit_data(form_data(1, 1, 1, num_external_review_forms=2, num_project_approval_form=1, stages=1))
+        form = self.submit_data(
+            form_data(
+                1,
+                1,
+                1,
+                num_external_review_forms=2,
+                num_project_approval_form=1,
+                stages=1,
+            )
+        )
         self.assertFalse(form.is_valid(), form.errors.as_text())
 
     def test_validate_project_approval_form(self):
-        form = self.submit_data(form_data(1, 1, 1, 0, num_project_approval_form=1, stages=1))
+        form = self.submit_data(
+            form_data(1, 1, 1, 0, num_project_approval_form=1, stages=1)
+        )
         self.assertTrue(form.is_valid(), form.errors.as_text())
 
     def test_does_validates_without_project_approval_form(self):
-        form = self.submit_data(form_data(1, 1, 1, 0, num_project_approval_form=0, stages=1))
+        form = self.submit_data(
+            form_data(1, 1, 1, 0, num_project_approval_form=0, stages=1)
+        )
         self.assertTrue(form.is_valid(), form.errors.as_text())
 
     def test_doesnt_validates_with_multiple_project_approval_form(self):
-        form = self.submit_data(form_data(1, 1, 1, 0, num_project_approval_form=2, stages=1))
+        form = self.submit_data(
+            form_data(1, 1, 1, 0, num_project_approval_form=2, stages=1)
+        )
         self.assertFalse(form.is_valid(), form.errors.as_text())
-        form = self.submit_data(form_data(1, 1, 1, 0, num_project_approval_form=2, stages=2))
+        form = self.submit_data(
+            form_data(1, 1, 1, 0, num_project_approval_form=2, stages=2)
+        )
         self.assertFalse(form.is_valid(), form.errors.as_text())
diff --git a/hypha/apply/funds/tests/test_admin_views.py b/hypha/apply/funds/tests/test_admin_views.py
index 37d492782d0be98778130bcd185ee844984e3ee6..39036e89a04f365c85e52af7a7356eef509bdc6d 100644
--- a/hypha/apply/funds/tests/test_admin_views.py
+++ b/hypha/apply/funds/tests/test_admin_views.py
@@ -15,16 +15,16 @@ from .test_admin_form import form_data
 
 
 def create_form_fields_data(blocks):
-    parent_field = 'form_fields'
+    parent_field = "form_fields"
     form_fields_dict = {}
-    form_fields_dict[f'{parent_field}-count'] = [str(len(blocks))]
+    form_fields_dict[f"{parent_field}-count"] = [str(len(blocks))]
     for index, block_name in enumerate(blocks):
-        form_fields_dict[f'{parent_field}-{index}-deleted'] = ['']
-        form_fields_dict[f'{parent_field}-{index}-order'] = [str(index)]
-        form_fields_dict[f'{parent_field}-{index}-type'] = [str(block_name)]
+        form_fields_dict[f"{parent_field}-{index}-deleted"] = [""]
+        form_fields_dict[f"{parent_field}-{index}-order"] = [str(index)]
+        form_fields_dict[f"{parent_field}-{index}-type"] = [str(block_name)]
 
         for field_name, field_value in blocks[block_name].items():
-            form_fields_dict[f'{parent_field}-{index}-value-{field_name}'] = field_value
+            form_fields_dict[f"{parent_field}-{index}-value-{field_name}"] = field_value
 
     return form_fields_dict
 
@@ -35,11 +35,23 @@ class TestFundCreationView(TestCase):
         cls.user = SuperUserFactory()
         cls.home = ApplyHomePageFactory()
 
-    def create_page(self, appl_forms=1, review_forms=1, determination_forms=1, external_review_form=0, project_approval_form=1, stages=1, same_forms=False, form_stage_info=None):
+    def create_page(
+        self,
+        appl_forms=1,
+        review_forms=1,
+        determination_forms=1,
+        external_review_form=0,
+        project_approval_form=1,
+        stages=1,
+        same_forms=False,
+        form_stage_info=None,
+    ):
         if form_stage_info is None:
             form_stage_info = [1]
         self.client.force_login(self.user)
-        url = reverse('wagtailadmin_pages:add', args=('funds', 'fundtype', self.home.id))
+        url = reverse(
+            "wagtailadmin_pages:add", args=("funds", "fundtype", self.home.id)
+        )
 
         data = form_data(
             appl_forms,
@@ -51,15 +63,15 @@ class TestFundCreationView(TestCase):
             stages=stages,
             form_stage_info=form_stage_info,
         )
-        data['action-publish'] = True
+        data["action-publish"] = True
 
         response = self.client.post(url, data=data, secure=True, follow=True)
         try:
             # If the form is present there was an error - report it
-            form = response.context['form']
+            form = response.context["form"]
             self.assertTrue(form.is_valid(), form.errors.as_text())
         except KeyError:
-            self.assertContains(response, 'success')
+            self.assertContains(response, "success")
 
         self.home.refresh_from_db()
         fund = self.home.get_children().first()
@@ -92,7 +104,9 @@ class TestFundCreationView(TestCase):
         self.assertEqual(fund.determination_forms.count(), 2)
 
     def test_can_create_multi_phase_fund_reuse_forms(self):
-        fund = self.create_page(2, 2, 2, same_forms=True, stages=2, form_stage_info=[1, 2])
+        fund = self.create_page(
+            2, 2, 2, same_forms=True, stages=2, form_stage_info=[1, 2]
+        )
         self.assertEqual(fund.forms.count(), 2)
         self.assertEqual(fund.review_forms.count(), 2)
         self.assertEqual(fund.determination_forms.count(), 2)
@@ -109,7 +123,7 @@ class TestRoundIndexView(WagtailTestUtils, TestCase):
         self.round = RoundFactory()
 
     def test_application_links(self):
-        response = self.client.get('/admin/funds/round/', follow=True)
+        response = self.client.get("/admin/funds/round/", follow=True)
 
         application_links = [
             f'<a href="/admin/funds/applicationform/edit/{app.form.id}/">{app}</a>'
@@ -119,19 +133,21 @@ class TestRoundIndexView(WagtailTestUtils, TestCase):
         self.assertContains(response, applications_cell, html=True)
 
     def test_number_of_rounds(self):
-        response = self.client.get('/admin/funds/round/', follow=True)
+        response = self.client.get("/admin/funds/round/", follow=True)
 
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.context_data["result_count"], 1)
 
     def test_review_form_links(self):
-        response = self.client.get('/admin/funds/round/', follow=True)
+        response = self.client.get("/admin/funds/round/", follow=True)
 
         review_form_links = [
             f'<a href="/admin/review/reviewform/edit/{review.form.id}/">{review}</a>'
             for review in self.round.review_forms.all()
         ]
-        review_form_cell = f'<td class="field-review_forms title">{"".join(review_form_links)}</td>'
+        review_form_cell = (
+            f'<td class="field-review_forms title">{"".join(review_form_links)}</td>'
+        )
         self.assertContains(response, review_form_cell, html=True)
 
 
@@ -140,106 +156,114 @@ class TestCreateApplicationFormView(TestCase):
     def setUpTestData(cls):
         cls.user = SuperUserFactory()
         cls.label_help_text_data = {
-            'field_label': factory.Faker('sentence').evaluate(None, None, {'locale': None}),
-            'help_text': factory.Faker('sentence').evaluate(None, None, {'locale': None})
+            "field_label": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
+            "help_text": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
         }
-        cls.name = factory.Faker('name').evaluate(None, None, {'locale': None})
+        cls.name = factory.Faker("name").evaluate(None, None, {"locale": None})
 
     def create_page(self, data):
         self.client.force_login(self.user)
-        url = reverse('funds_applicationform_modeladmin_create')
+        url = reverse("funds_applicationform_modeladmin_create")
         response = self.client.post(url, data=data, secure=True, follow=True)
         return response
 
     def test_name_field_required(self):
-        data = {'name': ['']}
+        data = {"name": [""]}
         form_field_data = create_form_fields_data(
             {
-                'title': self.label_help_text_data,
-                'email': self.label_help_text_data,
-                'full_name': self.label_help_text_data,
+                "title": self.label_help_text_data,
+                "email": self.label_help_text_data,
+                "full_name": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'This field is required.'
-        for message in get_messages(response.context['request']):
+        expected_message = "This field is required."
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(ApplicationForm.objects.count(), 0)
 
     def test_title_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'email': self.label_help_text_data,
-                'full_name': self.label_help_text_data,
+                "email": self.label_help_text_data,
+                "full_name": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Title'
-        for message in get_messages(response.context['request']):
+        expected_message = "You are missing the following required fields: Title"
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(ApplicationForm.objects.count(), 0)
 
     def test_email_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'title': self.label_help_text_data,
-                'full_name': self.label_help_text_data,
+                "title": self.label_help_text_data,
+                "full_name": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Email'
-        for message in get_messages(response.context['request']):
+        expected_message = "You are missing the following required fields: Email"
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(ApplicationForm.objects.count(), 0)
 
     def test_full_name_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'title': self.label_help_text_data,
-                'email': self.label_help_text_data,
+                "title": self.label_help_text_data,
+                "email": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Full Name'
-        for message in get_messages(response.context['request']):
+        expected_message = "You are missing the following required fields: Full Name"
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(ApplicationForm.objects.count(), 0)
 
     def test_field_label_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'title': {},
-                'email': {},
-                'full_name': {},
+                "title": {},
+                "email": {},
+                "full_name": {},
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_messages_list = ['Label cannot be empty for Application title', 'Label cannot be empty for Email', 'Label cannot be empty for Full name']
-        for message in get_messages(response.context['request']):
+        expected_messages_list = [
+            "Label cannot be empty for Application title",
+            "Label cannot be empty for Email",
+            "Label cannot be empty for Full name",
+        ]
+        for message in get_messages(response.context["request"]):
             self.assertIn(str(message.message).strip(), expected_messages_list)
         self.assertEqual(ApplicationForm.objects.count(), 0)
 
     def test_form_creation(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'title': self.label_help_text_data,
-                'email': self.label_help_text_data,
-                'full_name': self.label_help_text_data,
+                "title": self.label_help_text_data,
+                "email": self.label_help_text_data,
+                "full_name": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
diff --git a/hypha/apply/funds/tests/test_forms.py b/hypha/apply/funds/tests/test_forms.py
index eb8615f649ad9d757b52e0ad386bf2d854dbe99f..389fe9d6dc95a6b0a0d9543eef31f399936ec290 100644
--- a/hypha/apply/funds/tests/test_forms.py
+++ b/hypha/apply/funds/tests/test_forms.py
@@ -47,12 +47,16 @@ class TestReviewerFormQueries(TestCase):
 
         form = UpdateReviewersForm(user=user, instance=submission)
 
-        AssignedWithRoleReviewersFactory(role=roles[0], submission=submission, reviewer=staff[0], staff=True)
-        AssignedWithRoleReviewersFactory(role=roles[1], submission=submission, reviewer=staff[1], staff=True)
+        AssignedWithRoleReviewersFactory(
+            role=roles[0], submission=submission, reviewer=staff[0], staff=True
+        )
+        AssignedWithRoleReviewersFactory(
+            role=roles[1], submission=submission, reviewer=staff[1], staff=True
+        )
 
         data = {}
         for field, user in zip(form.fields, staff, strict=False):
-            if field.startswith('role'):
+            if field.startswith("role"):
                 data[field] = user.id
             else:
                 data[field] = None
@@ -84,7 +88,7 @@ class TestReviewerFormQueries(TestCase):
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[0])
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[1])
 
-        data = {'reviewer_reviewers': [reviewer.id for reviewer in reviewers[2:]]}
+        data = {"reviewer_reviewers": [reviewer.id for reviewer in reviewers[2:]]}
 
         form = UpdateReviewersForm(data, user=user, instance=submission)
 
@@ -109,7 +113,7 @@ class TestReviewerFormQueries(TestCase):
         ReviewFactory(submission=submission, author__reviewer=reviewers[0])
         ReviewFactory(submission=submission, author__reviewer=reviewers[1])
 
-        data = {'reviewer_reviewers': [reviewer.id for reviewer in reviewers[2:]]}
+        data = {"reviewer_reviewers": [reviewer.id for reviewer in reviewers[2:]]}
 
         form = UpdateReviewersForm(data, user=user, instance=submission)
 
diff --git a/hypha/apply/funds/tests/test_models.py b/hypha/apply/funds/tests/test_models.py
index e79ce64451e0723ced1f72218fde31c2be9b1fc8..6259dc7afbb7e39cbcd9947a89fac3db90b11c39 100644
--- a/hypha/apply/funds/tests/test_models.py
+++ b/hypha/apply/funds/tests/test_models.py
@@ -41,14 +41,16 @@ class TestFundModel(TestCase):
         self.fund = FundTypeFactory(parent=None)
 
     def test_can_access_workflow_class(self):
-        self.assertEqual(self.fund.workflow_name, 'single')
+        self.assertEqual(self.fund.workflow_name, "single")
         self.assertEqual(self.fund.workflow, Request)
 
     def test_no_open_rounds(self):
         self.assertIsNone(self.fund.open_round)
 
     def test_open_ended_round(self):
-        open_round = RoundFactory(start_date=date.today(), end_date=None, parent=self.fund)
+        open_round = RoundFactory(
+            start_date=date.today(), end_date=None, parent=self.fund
+        )
         self.assertEqual(self.fund.open_round, open_round)
 
     def test_normal_round(self):
@@ -87,7 +89,7 @@ class TestRoundModelDates(TestCase):
         self.fund = FundTypeFactory(parent=None)
 
     def make_round(self, **kwargs):
-        data = {'parent': self.fund}
+        data = {"parent": self.fund}
         data.update(kwargs)
         return RoundFactory(**data)
 
@@ -171,7 +173,9 @@ class TestRoundModelWorkflowAndForms(TestCase):
 
     def test_forms_are_copied_to_new_rounds(self):
         self.round.save()
-        for round_form, fund_form in itertools.zip_longest(self.round.forms.all(), self.fund.forms.all()):
+        for round_form, fund_form in itertools.zip_longest(
+            self.round.forms.all(), self.fund.forms.all()
+        ):
             self.assertEqual(round_form.fields, fund_form.fields)
             self.assertEqual(round_form.sort_order, fund_form.sort_order)
 
@@ -184,18 +188,20 @@ class TestRoundModelWorkflowAndForms(TestCase):
         new_field = CustomFormFieldsFactory.generate(None, {})
         form.form_fields = new_field
         form.save()
-        for round_form, fund_form in itertools.zip_longest(self.round.forms.all(), self.fund.forms.all()):
+        for round_form, fund_form in itertools.zip_longest(
+            self.round.forms.all(), self.fund.forms.all()
+        ):
             self.assertNotEqual(round_form, fund_form)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 @override_settings(FORCE_LOGIN_FOR_APPLICATION=False)
 class TestFormSubmission(TestCase):
     def setUp(self):
         self.User = get_user_model()
 
-        self.email = 'test@test.com'
-        self.name = 'My Name'
+        self.email = "test@test.com"
+        self.name = "My Name"
 
         fund = FundTypeFactory()
 
@@ -204,7 +210,15 @@ class TestFormSubmission(TestCase):
         self.round_page = RoundFactory(parent=fund, now=True)
         self.lab_page = LabFactory(lead=self.round_page.lead)
 
-    def submit_form(self, page=None, email=None, name=None, draft=None, user=None, ignore_errors=False):
+    def submit_form(
+        self,
+        page=None,
+        email=None,
+        name=None,
+        draft=None,
+        user=None,
+        ignore_errors=False,
+    ):
         user = user or AnonymousUser()
         page = page or self.round_page
 
@@ -218,9 +232,9 @@ class TestFormSubmission(TestCase):
             if isinstance(field.block, FullNameBlock):
                 data[field.id] = self.name if name is None else name
             if draft:
-                data['draft'] = 'Save draft'
+                data["draft"] = "Save draft"
 
-        request = make_request(user, data, method='post', site=self.site)
+        request = make_request(user, data, method="post", site=self.site)
 
         if page.get_parent().id != self.site.root_page.id:
             # Its a fund
@@ -230,7 +244,7 @@ class TestFormSubmission(TestCase):
 
         if not ignore_errors:
             # Check the data we submit is correct
-            self.assertNotContains(response, 'errors')
+            self.assertNotContains(response, "errors")
         return response
 
     def test_workflow_and_draft(self):
@@ -290,7 +304,7 @@ class TestFormSubmission(TestCase):
         self.assertEqual(ApplicationSubmission.objects.first().user, user)
 
     def test_associated_if_another_user_exists(self):
-        email = 'another@email.com'
+        email = "another@email.com"
         self.submit_form()
         # Someone else submits a form
         self.submit_form(email=email)
@@ -298,13 +312,17 @@ class TestFormSubmission(TestCase):
         # Lead + 2 x applicant
         self.assertEqual(self.User.objects.count(), 3)
 
-        first_user, second_user = self.User.objects.get(email=self.email), self.User.objects.get(email=email)
+        first_user, second_user = self.User.objects.get(
+            email=self.email
+        ), self.User.objects.get(email=email)
         self.assertEqual(ApplicationSubmission.objects.count(), 2)
         self.assertEqual(ApplicationSubmission.objects.first().user, first_user)
         self.assertEqual(ApplicationSubmission.objects.last().user, second_user)
 
     def test_associated_if_logged_in(self):
-        user, _ = self.User.objects.get_or_create(email=self.email, defaults={'full_name': self.name})
+        user, _ = self.User.objects.get_or_create(
+            email=self.email, defaults={"full_name": self.name}
+        )
 
         # Lead + Applicant
         self.assertEqual(self.User.objects.count(), 2)
@@ -319,12 +337,14 @@ class TestFormSubmission(TestCase):
 
     # This will need to be updated when we hide user information contextually
     def test_can_submit_if_blank_user_data_even_if_logged_in(self):
-        user, _ = self.User.objects.get_or_create(email=self.email, defaults={'full_name': self.name})
+        user, _ = self.User.objects.get_or_create(
+            email=self.email, defaults={"full_name": self.name}
+        )
 
         # Lead + applicant
         self.assertEqual(self.User.objects.count(), 2)
 
-        response = self.submit_form(email='', name='', user=user, ignore_errors=True)
+        response = self.submit_form(email="", name="", user=user, ignore_errors=True)
         self.assertEqual(response.status_code, 200)
 
         # Lead + applicant
@@ -338,9 +358,9 @@ class TestFormSubmission(TestCase):
         self.assertEqual(submission.user.email, self.email)
 
     def test_valid_email(self):
-        email = 'not_a_valid_email@'
+        email = "not_a_valid_email@"
         response = self.submit_form(email=email, ignore_errors=True)
-        self.assertContains(response, 'Enter a valid email address')
+        self.assertContains(response, "Enter a valid email address")
 
     @override_settings(SEND_MESSAGES=True)
     def test_email_sent_to_user_on_submission_fund(self):
@@ -365,7 +385,7 @@ class TestApplicationSubmission(TestCase):
         return instance.__class__.objects.get(id=instance.id)
 
     def test_can_get_required_block_names(self):
-        email = 'test@test.com'
+        email = "test@test.com"
         submission = self.make_submission(user__email=email)
         self.assertEqual(submission.email, email)
 
@@ -375,7 +395,7 @@ class TestApplicationSubmission(TestCase):
         submission_b = self.make_submission(round=submission_a.round)
         submissions = [submission_a, submission_b]
         self.assertEqual(
-            list(ApplicationSubmission.objects.order_by('id')),
+            list(ApplicationSubmission.objects.order_by("id")),
             submissions,
         )
 
@@ -384,28 +404,30 @@ class TestApplicationSubmission(TestCase):
         submission_b = self.make_submission(round=submission_a.round)
         submissions = [submission_b, submission_a]
         self.assertEqual(
-            list(ApplicationSubmission.objects.order_by('-id')),
+            list(ApplicationSubmission.objects.order_by("-id")),
             submissions,
         )
 
     def test_richtext_in_char_is_removed_for_search(self):
-        text = 'I am text'
-        rich_text = f'<b>{text}</b>'
+        text = "I am text"
+        rich_text = f"<b>{text}</b>"
         submission = self.make_submission(form_data__char=rich_text)
         self.assertNotIn(rich_text, submission.search_data)
         self.assertIn(text, submission.search_data)
 
     def test_richtext_is_removed_for_search(self):
-        text = 'I am text'
-        rich_text = f'<b>{text}</b>'
+        text = "I am text"
+        rich_text = f"<b>{text}</b>"
         submission = self.make_submission(form_data__rich_text=rich_text)
         self.assertNotIn(rich_text, submission.search_data)
         self.assertIn(text, submission.search_data)
 
     def test_choices_added_for_search(self):
-        choices = ['blah', 'foo']
-        submission = self.make_submission(form_fields__radios__choices=choices, form_data__radios=['blah'])
-        self.assertIn('blah', submission.search_data)
+        choices = ["blah", "foo"]
+        submission = self.make_submission(
+            form_fields__radios__choices=choices, form_data__radios=["blah"]
+        )
+        self.assertIn("blah", submission.search_data)
 
     def test_number_not_in_search(self):
         value = 12345
@@ -413,9 +435,9 @@ class TestApplicationSubmission(TestCase):
         self.assertNotIn(str(value), submission.search_data)
 
     def test_file_gets_uploaded(self):
-        filename = 'file_name.png'
+        filename = "file_name.png"
         submission = self.make_submission(form_data__image__filename=filename)
-        path = os.path.join(settings.MEDIA_ROOT, 'submission', str(submission.id))
+        path = os.path.join(settings.MEDIA_ROOT, "submission", str(submission.id))
 
         # Check we created the top level folder
         self.assertTrue(os.path.isdir(path))
@@ -432,14 +454,13 @@ class TestApplicationSubmission(TestCase):
 
         def check_generated_file_path(file_to_test, file_id):
             file_path_generated = file_to_test.generate_filename()
-            file_path_required = os.path.join('submission', str(submission.id), str(file_id), file_to_test.basename)
+            file_path_required = os.path.join(
+                "submission", str(submission.id), str(file_id), file_to_test.basename
+            )
 
             self.assertEqual(file_path_generated, file_path_required)
 
         for file_id in submission.file_field_ids:
-
-
-
             file_response = submission.data(file_id)
             if isinstance(file_response, list):
                 for stream_file in file_response:
@@ -455,7 +476,7 @@ class TestApplicationSubmission(TestCase):
 
     def test_create_revision_on_data_change(self):
         submission = ApplicationSubmissionFactory()
-        submission.form_data['title'] = 'My Awesome Title'
+        submission.form_data["title"] = "My Awesome Title"
         new_data = submission.form_data
         submission.create_revision()
         submission = self.refresh(submission)
@@ -474,8 +495,8 @@ class TestApplicationSubmission(TestCase):
 
     def test_can_get_draft_data(self):
         submission = ApplicationSubmissionFactory()
-        title = 'My new title'
-        submission.form_data['title'] = title
+        title = "My new title"
+        submission.form_data["title"] = title
         submission.create_revision(draft=True)
         self.assertEqual(submission.revisions.count(), 2)
 
@@ -492,13 +513,13 @@ class TestApplicationSubmission(TestCase):
 
     def test_draft_updated(self):
         submission = ApplicationSubmissionFactory()
-        title = 'My new title'
-        submission.form_data['title'] = title
+        title = "My new title"
+        submission.form_data["title"] = title
         submission.create_revision(draft=True)
         self.assertEqual(submission.revisions.count(), 2)
 
-        title = 'My even newer title'
-        submission.form_data['title'] = title
+        title = "My even newer title"
+        submission.form_data["title"] = title
 
         submission.create_revision(draft=True)
         self.assertEqual(submission.revisions.count(), 2)
@@ -511,14 +532,14 @@ class TestApplicationSubmission(TestCase):
         self.assertTrue(submission.in_final_stage)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestSubmissionRenderMethods(TestCase):
     def test_named_blocks_not_included_in_answers(self):
         submission = ApplicationSubmissionFactory()
         answers = submission.output_answers()
         for name in submission.named_blocks:
             field = submission.field(name)
-            self.assertNotIn(field.value['field_label'], answers)
+            self.assertNotIn(field.value["field_label"], answers)
 
     def test_normal_answers_included_in_answers(self):
         submission = ApplicationSubmissionFactory()
@@ -526,10 +547,10 @@ class TestSubmissionRenderMethods(TestCase):
         for field_name in submission.question_field_ids:
             if field_name not in submission.named_blocks:
                 field = submission.field(field_name)
-                self.assertIn(field.value['field_label'], answers)
+                self.assertIn(field.value["field_label"], answers)
 
     def test_paragraph_not_rendered_in_answers(self):
-        rich_text_label = 'My rich text label!'
+        rich_text_label = "My rich text label!"
         submission = ApplicationSubmissionFactory(
             form_fields__text_markup__value=rich_text_label
         )
@@ -540,13 +561,13 @@ class TestSubmissionRenderMethods(TestCase):
         submission = ApplicationSubmissionFactory()
 
         # the user didn't respond
-        del submission.form_data['value']
+        del submission.form_data["value"]
 
         # value doesnt sneak into raw_data
-        self.assertTrue('value' not in submission.raw_data)
+        self.assertTrue("value" not in submission.raw_data)
 
         # value field_id gone
-        field_id = submission.get_definitive_id('value')
+        field_id = submission.get_definitive_id("value")
         self.assertTrue(field_id not in submission.raw_data)
 
         # value attr is None
@@ -558,11 +579,12 @@ class TestSubmissionRenderMethods(TestCase):
 
         def file_url_in_answers(file_to_test, file_id):
             url = reverse(
-                'apply:submissions:serve_private_media', kwargs={
-                    'pk': submission.pk,
-                    'field_id': file_id,
-                    'file_name': file_to_test.basename,
-                }
+                "apply:submissions:serve_private_media",
+                kwargs={
+                    "pk": submission.pk,
+                    "field_id": file_id,
+                    "file_name": file_to_test.basename,
+                },
             )
             self.assertIn(url, answers)
 
@@ -581,16 +603,16 @@ class TestRequestForPartners(TestCase):
         rfp = RequestForPartnersFactory()
         request = make_request(site=rfp.get_site())
         response = rfp.serve(request)
-        self.assertContains(response, 'not accepting')
-        self.assertNotContains(response, 'Submit')
+        self.assertContains(response, "not accepting")
+        self.assertNotContains(response, "Submit")
 
     def test_form_when_round(self):
         rfp = RequestForPartnersFactory()
         TodayRoundFactory(parent=rfp)
         request = make_request(site=rfp.get_site())
         response = rfp.serve(request)
-        self.assertNotContains(response, 'not accepting')
-        self.assertContains(response, 'Submit')
+        self.assertNotContains(response, "not accepting")
+        self.assertContains(response, "Submit")
 
 
 class TestForTableQueryset(TestCase):
@@ -635,8 +657,12 @@ class TestForTableQueryset(TestCase):
         submission = ApplicationSubmissionFactory()
         review_one = ReviewFactory(submission=submission)
         review_two = ReviewFactory(submission=submission)
-        ReviewOpinionFactory(opinion_disagree=True, review=review_one, author__reviewer=staff)
-        ReviewOpinionFactory(opinion_agree=True, review=review_two, author__reviewer=staff)
+        ReviewOpinionFactory(
+            opinion_disagree=True, review=review_one, author__reviewer=staff
+        )
+        ReviewOpinionFactory(
+            opinion_agree=True, review=review_two, author__reviewer=staff
+        )
         qs = ApplicationSubmission.objects.for_table(user=staff)
         submission = qs[0]
         self.assertEqual(submission.opinion_disagree, 1)
@@ -649,12 +675,19 @@ class TestForTableQueryset(TestCase):
         staff = StaffFactory()
         submission = ApplicationSubmissionFactory()
 
-        review = ReviewFactory(submission=submission, author__reviewer=staff, author__staff=True)
+        review = ReviewFactory(
+            submission=submission, author__reviewer=staff, author__staff=True
+        )
         opinion = ReviewOpinionFactory(opinion_disagree=True, review=review)
 
         # Another pair of review/opinion
         review_two = ReviewFactory(author=opinion.author, submission=submission)
-        ReviewOpinionFactory(opinion_disagree=True, author__reviewer=staff, author__staff=True, review=review_two)
+        ReviewOpinionFactory(
+            opinion_disagree=True,
+            author__reviewer=staff,
+            author__staff=True,
+            review=review_two,
+        )
 
         qs = ApplicationSubmission.objects.for_table(user=staff)
         submission = qs[0]
@@ -672,7 +705,7 @@ class TestForTableQueryset(TestCase):
 
         ReviewFactory(submission=submission_two)
 
-        qs = ApplicationSubmission.objects.order_by('pk').for_table(user=staff)
+        qs = ApplicationSubmission.objects.order_by("pk").for_table(user=staff)
         submission = qs[0]
         self.assertEqual(submission, submission_one)
         self.assertEqual(submission.opinion_disagree, 1)
@@ -690,7 +723,6 @@ class TestForTableQueryset(TestCase):
 
 
 class TestReminderModel(TestCase):
-
     def test_can_save_reminder(self):
         submission = ApplicationSubmissionFactory()
         reminder = ReminderFactory(submission=submission)
@@ -703,7 +735,10 @@ class TestReminderModel(TestCase):
 
     def test_reminder_action_message(self):
         reminder = ReminderFactory()
-        self.assertEqual(reminder.action_message, Reminder.ACTION_MESSAGE[f'{reminder.action}-{reminder.medium}'])
+        self.assertEqual(
+            reminder.action_message,
+            Reminder.ACTION_MESSAGE[f"{reminder.action}-{reminder.medium}"],
+        )
 
 
 class TestAssignedReviewersQuerySet(TestCase):
diff --git a/hypha/apply/funds/tests/test_tags.py b/hypha/apply/funds/tests/test_tags.py
index fc8630b81a660ba40cdc1cac4034974cb89fe79c..4a4de66e3d1c50653ae71d648042064c00132244 100644
--- a/hypha/apply/funds/tests/test_tags.py
+++ b/hypha/apply/funds/tests/test_tags.py
@@ -4,17 +4,24 @@ from django.test import TestCase, override_settings
 from hypha.apply.funds.tests.factories import ApplicationSubmissionFactory
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestTemplateTags(TestCase):
     def test_markdown_tags(self):
-        template = Template('{% load markdown_tags %}{{ content|markdown|safe }}')
-        context = Context({'content': 'Lorem ipsum **dolor** sit amet.'})
+        template = Template("{% load markdown_tags %}{{ content|markdown|safe }}")
+        context = Context({"content": "Lorem ipsum **dolor** sit amet."})
         output = template.render(context)
-        self.assertEqual(output, '<p>Lorem ipsum <strong>dolor</strong> sit amet.</p>\n')
+        self.assertEqual(
+            output, "<p>Lorem ipsum <strong>dolor</strong> sit amet.</p>\n"
+        )
 
     def test_submission_tags(self):
         submission = ApplicationSubmissionFactory()
-        template = Template('{% load submission_tags %}{{ content|submission_links|safe }}')
-        context = Context({'content': f'Lorem ipsum dolor #{submission.id} sit amet.'})
+        template = Template(
+            "{% load submission_tags %}{{ content|submission_links|safe }}"
+        )
+        context = Context({"content": f"Lorem ipsum dolor #{submission.id} sit amet."})
         output = template.render(context)
-        self.assertEqual(output, f'Lorem ipsum dolor <a href="{submission.get_absolute_url()}">{submission.title} <span class="mid-grey-text">#{submission.id}</span></a> sit amet.')
+        self.assertEqual(
+            output,
+            f'Lorem ipsum dolor <a href="{submission.get_absolute_url()}">{submission.title} <span class="mid-grey-text">#{submission.id}</span></a> sit amet.',
+        )
diff --git a/hypha/apply/funds/tests/test_views.py b/hypha/apply/funds/tests/test_views.py
index 93699d3e6b93ef784846ca9cca93ff2b766aebd0..054c9df1121a24f2843f868a1c07ce05a5d9c4fb 100644
--- a/hypha/apply/funds/tests/test_views.py
+++ b/hypha/apply/funds/tests/test_views.py
@@ -62,11 +62,11 @@ def prepare_form_data(submission, **kwargs):
 
 
 class BaseSubmissionViewTestCase(BaseViewTestCase):
-    url_name = 'funds:submissions:{}'
-    base_view_name = 'detail'
+    url_name = "funds:submissions:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
 
 class TestStaffSubmissionView(BaseSubmissionViewTestCase):
@@ -94,26 +94,38 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         self.assertContains(response, submission.title)
 
     def test_can_progress_phase(self):
-        next_status = 'internal_review'
-        self.post_page(self.submission, {'form-submitted-progress_form': '', 'action': next_status})
+        next_status = "internal_review"
+        self.post_page(
+            self.submission, {"form-submitted-progress_form": "", "action": next_status}
+        )
 
         submission = self.refresh(self.submission)
         self.assertEqual(submission.status, next_status)
 
     def test_redirected_to_determination(self):
-        submission = ApplicationSubmissionFactory(status='concept_review_discussion', workflow_stages=2, lead=self.user)
-        response = self.post_page(submission, {'form-submitted-progress_form': '', 'action': 'invited_to_proposal'})
+        submission = ApplicationSubmissionFactory(
+            status="concept_review_discussion", workflow_stages=2, lead=self.user
+        )
+        response = self.post_page(
+            submission,
+            {"form-submitted-progress_form": "", "action": "invited_to_proposal"},
+        )
 
         # Invited for proposal is a a determination, so this will redirect to the determination form.
-        url = self.url_from_pattern('funds:submissions:determinations:form', kwargs={'submission_pk': submission.id})
+        url = self.url_from_pattern(
+            "funds:submissions:determinations:form",
+            kwargs={"submission_pk": submission.id},
+        )
         self.assertRedirects(response, f"{url}?action=invited_to_proposal")
 
     def test_new_form_after_progress(self):
-        submission = ApplicationSubmissionFactory(status='invited_to_proposal', workflow_stages=2, lead=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="invited_to_proposal", workflow_stages=2, lead=self.user
+        )
         stage = submission.stage
         DeterminationFactory(submission=submission, accepted=True)
 
-        request = make_request(self.user, method='get', site=submission.page.get_site())
+        request = make_request(self.user, method="get", site=submission.page.get_site())
         submission.progress_stage_when_possible(self.user, request)
 
         submission = self.refresh(submission)
@@ -121,50 +133,59 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
 
         self.assertNotEqual(stage, new_stage)
 
-        get_forms = submission.get_from_parent('get_defined_fields')
+        get_forms = submission.get_from_parent("get_defined_fields")
         self.assertEqual(submission.form_fields, get_forms(new_stage))
         self.assertNotEqual(submission.form_fields, get_forms(stage))
 
     def test_cant_progress_stage_if_not_lead(self):
-        submission = ApplicationSubmissionFactory(status='concept_review_discussion', workflow_stages=2)
-        self.post_page(submission, {'form-submitted-progress_form': '', 'action': 'invited_to_proposal'})
+        submission = ApplicationSubmissionFactory(
+            status="concept_review_discussion", workflow_stages=2
+        )
+        self.post_page(
+            submission,
+            {"form-submitted-progress_form": "", "action": "invited_to_proposal"},
+        )
 
         submission = self.refresh(submission)
 
-        self.assertEqual(submission.status, 'concept_review_discussion')
+        self.assertEqual(submission.status, "concept_review_discussion")
         self.assertIsNone(submission.next)
 
     def test_not_redirected_if_determination_submitted(self):
         submission = ApplicationSubmissionFactory(lead=self.user)
         DeterminationFactory(submission=submission, rejected=True, submitted=True)
 
-        self.post_page(submission, {'form-submitted-progress_form': '', 'action': 'rejected'})
+        self.post_page(
+            submission, {"form-submitted-progress_form": "", "action": "rejected"}
+        )
 
         submission = self.refresh(submission)
-        self.assertEqual(submission.status, 'rejected')
+        self.assertEqual(submission.status, "rejected")
 
     def test_not_redirected_if_wrong_determination_selected(self):
         submission = ApplicationSubmissionFactory(lead=self.user)
         DeterminationFactory(submission=submission, accepted=True, submitted=True)
 
-        response = self.post_page(submission, {'form-submitted-progress_form': '', 'action': 'rejected'})
-        self.assertContains(response, 'you tried to progress')
+        response = self.post_page(
+            submission, {"form-submitted-progress_form": "", "action": "rejected"}
+        )
+        self.assertContains(response, "you tried to progress")
 
         submission = self.refresh(submission)
-        self.assertNotEqual(submission.status, 'accepted')
-        self.assertNotEqual(submission.status, 'rejected')
+        self.assertNotEqual(submission.status, "accepted")
+        self.assertNotEqual(submission.status, "rejected")
 
     def test_cant_access_edit_button_when_applicant_editing(self):
-        submission = ApplicationSubmissionFactory(status='more_info')
+        submission = ApplicationSubmissionFactory(status="more_info")
         response = self.get_page(submission)
-        self.assertNotContains(response, self.url(submission, 'edit', absolute=False))
+        self.assertNotContains(response, self.url(submission, "edit", absolute=False))
 
     def test_can_access_edit_button(self):
         response = self.get_page(self.submission)
-        self.assertContains(response, self.url(self.submission, 'edit', absolute=False))
+        self.assertContains(response, self.url(self.submission, "edit", absolute=False))
 
     def test_can_access_edit(self):
-        response = self.get_page(self.submission, 'edit')
+        response = self.get_page(self.submission, "edit")
         self.assertContains(response, self.submission.title)
 
     def test_previous_and_next_appears_on_page(self):
@@ -177,9 +198,9 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
 
     def test_can_edit_submission(self):
         old_status = self.submission.status
-        new_title = 'A new Title'
+        new_title = "A new Title"
         data = prepare_form_data(self.submission, title=new_title)
-        response = self.post_page(self.submission, {'submit': True, **data}, 'edit')
+        response = self.post_page(self.submission, {"submit": True, **data}, "edit")
 
         url = self.url(self.submission)
 
@@ -193,7 +214,7 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
     def test_not_included_fields_render(self):
         submission = ApplicationSubmissionFactory(form_fields__exclude__checkbox=True)
         response = self.get_page(submission)
-        self.assertNotContains(response, 'check_one')
+        self.assertNotContains(response, "check_one")
 
     def test_can_screen_submission(self):
         ScreeningStatus.objects.all().delete()
@@ -206,7 +227,13 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         screening_outcome2.save()
         self.submission.screening_statuses.clear()
         self.submission.screening_statuses.add(screening_outcome2)
-        self.post_page(self.submission, {'form-submitted-screening_form': '', 'screening_statuses': [screening_outcome1.id, screening_outcome2.id]})
+        self.post_page(
+            self.submission,
+            {
+                "form-submitted-screening_form": "",
+                "screening_statuses": [screening_outcome1.id, screening_outcome2.id],
+            },
+        )
         submission = self.refresh(self.submission)
         self.assertEqual(submission.screening_statuses.count(), 2)
 
@@ -223,7 +250,7 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         screening_outcome2.save()
         self.submission.screening_statuses.clear()
         response = self.get_page(self.submission)
-        self.assertContains(response, 'Screening decision')
+        self.assertContains(response, "Screening decision")
 
     def test_cant_view_submission_screening_block(self):
         """
@@ -232,50 +259,65 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         ScreeningStatus.objects.all().delete()
         self.submission.screening_statuses.clear()
         response = self.get_page(self.submission)
-        self.assertNotContains(response, 'Screening decision')
+        self.assertNotContains(response, "Screening decision")
 
     def test_can_create_project(self):
         # check submission doesn't already have a Project
-        with self.assertRaisesMessage(Project.DoesNotExist, 'ApplicationSubmission has no project.'):
+        with self.assertRaisesMessage(
+            Project.DoesNotExist, "ApplicationSubmission has no project."
+        ):
             self.submission.project  # noqa: B018
 
-        self.post_page(self.submission, {
-            'form-submitted-project_form': '',
-            'project_lead': self.user.id,
-            'submission': self.submission.id,
-        })
+        self.post_page(
+            self.submission,
+            {
+                "form-submitted-project_form": "",
+                "project_lead": self.user.id,
+                "submission": self.submission.id,
+            },
+        )
 
-        project = Project.objects.order_by('-pk').first()
+        project = Project.objects.order_by("-pk").first()
         submission = ApplicationSubmission.objects.get(pk=self.submission.pk)
 
-        self.assertTrue(hasattr(submission, 'project'))
+        self.assertTrue(hasattr(submission, "project"))
         self.assertEqual(submission.project.id, project.id)
 
     def test_can_see_add_determination_primary_action(self):
         def assert_add_determination_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string=pattern)
+            )
             self.assertEqual(len(buttons), 1)
 
-        submission = ApplicationSubmissionFactory(status='determination')
+        submission = ApplicationSubmissionFactory(status="determination")
 
         # Phase: ready-for-determination, no determination
         # "Add determination" should be displayed
-        assert_add_determination_displayed(submission, 'Add determination')
+        assert_add_determination_displayed(submission, "Add determination")
 
         # Phase: ready-for-determination, draft determination
         # "Complete draft determination" should be displayed
-        DeterminationFactory(submission=submission, author=self.user, accepted=True, submitted=False)
-        assert_add_determination_displayed(submission, 'Complete draft determination')
+        DeterminationFactory(
+            submission=submission, author=self.user, accepted=True, submitted=False
+        )
+        assert_add_determination_displayed(submission, "Complete draft determination")
 
     def test_cant_see_add_determination_primary_action(self):
         def assert_add_determination_not_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string=pattern)
+            )
             self.assertEqual(len(buttons), 0)
 
         submission = ApplicationSubmissionFactory()
@@ -283,15 +325,19 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         # Phase: received / in_discussion
         # "Add determination" should not be displayed
         # "Complete draft determination" should not be displayed
-        assert_add_determination_not_displayed(submission, 'Add determination')
-        assert_add_determination_not_displayed(submission, 'Complete draft determination')
+        assert_add_determination_not_displayed(submission, "Add determination")
+        assert_add_determination_not_displayed(
+            submission, "Complete draft determination"
+        )
 
         # Phase: accepted
         # "Add determination" should not be displayed
         # "Complete draft determination" should not be displayed
-        submission.perform_transition('accepted', self.user)
-        assert_add_determination_not_displayed(submission, 'Add determination')
-        assert_add_determination_not_displayed(submission, 'Complete draft determination')
+        submission.perform_transition("accepted", self.user)
+        assert_add_determination_not_displayed(submission, "Add determination")
+        assert_add_determination_not_displayed(
+            submission, "Complete draft determination"
+        )
 
     def test_screen_application_primary_action_is_displayed(self):
         ScreeningStatus.objects.all().delete()
@@ -303,52 +349,72 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         self.submission.screening_statuses.clear()
         self.submission.screening_statuses.add(screening_outcome)
         response = self.get_page(self.submission)
-        buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', string='Screen application')
+        buttons = (
+            BeautifulSoup(response.content, "html5lib")
+            .find(class_="sidebar")
+            .find_all("a", string="Screen application")
+        )
         self.assertEqual(len(buttons), 1)
         self.submission.screening_statuses.clear()
 
     def test_screen_application_primary_action_is_not_displayed(self):
         response = self.get_page(self.submission)
-        buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', string='Screen application')
+        buttons = (
+            BeautifulSoup(response.content, "html5lib")
+            .find(class_="sidebar")
+            .find_all("a", string="Screen application")
+        )
         self.assertEqual(len(buttons), 0)
 
     def test_can_see_create_review_primary_action(self):
         def assert_create_review_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string=pattern)
+            )
             self.assertEqual(len(buttons), 1)
 
-        submission = ApplicationSubmissionFactory(with_external_review=True, status='ext_internal_review')
+        submission = ApplicationSubmissionFactory(
+            with_external_review=True, status="ext_internal_review"
+        )
 
         # Phase: internal_review, no review
         # "Add a review" should be displayed
-        assert_create_review_displayed(submission, 'Add a review')
+        assert_create_review_displayed(submission, "Add a review")
 
         # Phase: internal_review, draft review created
         # "Complete draft review" should be displayed
-        review = ReviewFactory(submission=submission, author__reviewer=self.user, is_draft=True)
-        assert_create_review_displayed(submission, 'Complete draft review')
+        review = ReviewFactory(
+            submission=submission, author__reviewer=self.user, is_draft=True
+        )
+        assert_create_review_displayed(submission, "Complete draft review")
         review.delete()
 
         # Phase: external_review, no review
         # "Add a review" should be displayed
-        submission.perform_transition('ext_post_review_discussion', self.user)
-        submission.perform_transition('ext_external_review', self.user)
-        assert_create_review_displayed(submission, 'Add a review')
+        submission.perform_transition("ext_post_review_discussion", self.user)
+        submission.perform_transition("ext_external_review", self.user)
+        assert_create_review_displayed(submission, "Add a review")
 
         # Phase: external_review, draft review created
         # "Complete draft review" should be displayed
         ReviewFactory(submission=submission, author__reviewer=self.user, is_draft=True)
-        assert_create_review_displayed(submission, 'Complete draft review')
+        assert_create_review_displayed(submission, "Complete draft review")
 
     def test_cant_see_create_review_primary_action(self):
         def assert_create_review_not_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string=pattern)
+            )
             self.assertEqual(len(buttons), 0)
 
         submission = ApplicationSubmissionFactory(with_external_review=True)
@@ -356,32 +422,36 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         # Phase: received / in_discussion
         # "Add a review" should not be displayed
         # "Complete draft review" should not be displayed
-        assert_create_review_not_displayed(submission, 'Add a review')
-        assert_create_review_not_displayed(submission, 'Complete draft review')
+        assert_create_review_not_displayed(submission, "Add a review")
+        assert_create_review_not_displayed(submission, "Complete draft review")
 
         # Phase: internal_review, review completed
         # "Add a review" should not be displayed
         # "Update draft review" should not be displayed
-        submission.perform_transition('ext_internal_review', self.user)
+        submission.perform_transition("ext_internal_review", self.user)
         ReviewFactory(submission=submission, author__reviewer=self.user, is_draft=False)
-        assert_create_review_not_displayed(submission, 'Add a review')
-        assert_create_review_not_displayed(submission, 'Complete draft review')
+        assert_create_review_not_displayed(submission, "Add a review")
+        assert_create_review_not_displayed(submission, "Complete draft review")
 
         # Phase: external_review, review completed
         # "Add a review" should not be displayed
         # "Update draft review" should not be displayed
-        submission.perform_transition('ext_post_review_discussion', self.user)
-        submission.perform_transition('ext_external_review', self.user)
-        assert_create_review_not_displayed(submission, 'Add a review')
-        assert_create_review_not_displayed(submission, 'Complete draft review')
+        submission.perform_transition("ext_post_review_discussion", self.user)
+        submission.perform_transition("ext_external_review", self.user)
+        assert_create_review_not_displayed(submission, "Add a review")
+        assert_create_review_not_displayed(submission, "Complete draft review")
 
     def test_can_see_assign_reviewers_primary_action(self):
         def assert_assign_reviewers_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--primary', string='Assign reviewers')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="sidebar")
+                .find_all("a", class_="button--primary", string="Assign reviewers")
+            )
             self.assertEqual(len(buttons), 1)
 
-        submission = ApplicationSubmissionFactory(status='internal_review')
+        submission = ApplicationSubmissionFactory(status="internal_review")
         reviewer_role_a = ReviewerRoleFactory()
         reviewer_role_b = ReviewerRoleFactory()
 
@@ -391,24 +461,36 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
 
         # Phase: internal_review - not all reviewer types assigned
         # Assign reviewers should be displayed
-        AssignedReviewersFactory(submission=submission, reviewer=ReviewerFactory(), role=reviewer_role_a)
+        AssignedReviewersFactory(
+            submission=submission, reviewer=ReviewerFactory(), role=reviewer_role_a
+        )
         assert_assign_reviewers_displayed(submission)
 
         # Phase: external_review - no reviewers assigned
         # Assign reviewers should be displayed
-        submission = ApplicationSubmissionFactory(with_external_review=True, status='ext_external_review')
+        submission = ApplicationSubmissionFactory(
+            with_external_review=True, status="ext_external_review"
+        )
         assert_assign_reviewers_displayed(submission)
 
         # Phase: external_review - all reviewers types assigned
         # Assign reviewers should still be displayed
-        AssignedReviewersFactory(submission=submission, reviewer=ReviewerFactory(), role=reviewer_role_a)
-        AssignedReviewersFactory(submission=submission, reviewer=ReviewerFactory(), role=reviewer_role_b)
+        AssignedReviewersFactory(
+            submission=submission, reviewer=ReviewerFactory(), role=reviewer_role_a
+        )
+        AssignedReviewersFactory(
+            submission=submission, reviewer=ReviewerFactory(), role=reviewer_role_b
+        )
         assert_assign_reviewers_displayed(submission)
 
     def test_cant_see_assign_reviewers_primary_action(self):
         def assert_assign_reviewers_not_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--primary', string='Assign reviewers')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="sidebar")
+                .find_all("a", class_="button--primary", string="Assign reviewers")
+            )
             self.assertEqual(len(buttons), 0)
 
         submission = ApplicationSubmissionFactory()
@@ -419,13 +501,19 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
 
         # Phase: internal_review - all reviewer types assigned
         # Assign reviewers should not be displayed
-        AssignedReviewersFactory(submission=submission, reviewer=ReviewerFactory(), role=reviewer_role)
+        AssignedReviewersFactory(
+            submission=submission, reviewer=ReviewerFactory(), role=reviewer_role
+        )
         assert_assign_reviewers_not_displayed(submission)
 
     def test_can_see_assign_reviewers_secondary_action(self):
         def assert_assign_reviewers_secondary_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--white', string='Reviewers')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="sidebar")
+                .find_all("a", class_="button--white", string="Reviewers")
+            )
             self.assertEqual(len(buttons), 1)
 
         submission = ApplicationSubmissionFactory()
@@ -435,33 +523,47 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         assert_assign_reviewers_secondary_displayed(submission)
 
         # Phase: internal_review - no reviewers assigned
-        submission.perform_transition('internal_review', self.user)
+        submission.perform_transition("internal_review", self.user)
         assert_assign_reviewers_secondary_displayed(submission)
 
         # Phase: internal_review - all reviewer types assigned
-        AssignedReviewersFactory(submission=submission, reviewer=ReviewerFactory(), role=reviewer_role)
+        AssignedReviewersFactory(
+            submission=submission, reviewer=ReviewerFactory(), role=reviewer_role
+        )
         assert_assign_reviewers_secondary_displayed(submission)
 
     def test_can_see_view_determination_primary_action(self):
         def assert_view_determination_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string='View determination')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string="View determination")
+            )
             self.assertEqual(len(buttons), 1)
 
         # Phase: accepted
-        submission = ApplicationSubmissionFactory(status='accepted')
-        DeterminationFactory(submission=submission, author=self.user, accepted=True, submitted=True)
+        submission = ApplicationSubmissionFactory(status="accepted")
+        DeterminationFactory(
+            submission=submission, author=self.user, accepted=True, submitted=True
+        )
         assert_view_determination_displayed(submission)
 
         # Phase: rejected
-        submission = ApplicationSubmissionFactory(status='rejected')
-        DeterminationFactory(submission=submission, author=self.user, rejected=True, submitted=True)
+        submission = ApplicationSubmissionFactory(status="rejected")
+        DeterminationFactory(
+            submission=submission, author=self.user, rejected=True, submitted=True
+        )
         assert_view_determination_displayed(submission)
 
     def test_cant_see_view_determination_primary_action(self):
         def assert_view_determination_not_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string='View determination')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string="View determination")
+            )
             self.assertEqual(len(buttons), 0)
 
         # Phase: received / in_discussion
@@ -469,19 +571,21 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         assert_view_determination_not_displayed(submission)
 
         # Phase: ready-for-determination, no determination
-        submission.perform_transition('determination', self.user)
+        submission.perform_transition("determination", self.user)
         assert_view_determination_not_displayed(submission)
 
         # Phase: ready-for-determination, draft determination
-        DeterminationFactory(submission=submission, author=self.user, accepted=True, submitted=False)
+        DeterminationFactory(
+            submission=submission, author=self.user, accepted=True, submitted=False
+        )
         assert_view_determination_not_displayed(submission)
 
     def test_cant_see_application_draft_status(self):
         factory = RequestFactory()
-        submission = ApplicationSubmissionFactory(status='draft')
+        submission = ApplicationSubmissionFactory(status="draft")
         ProjectFactory(submission=submission)
 
-        request = factory.get(f'/submission/{submission.pk}')
+        request = factory.get(f"/submission/{submission.pk}")
         request.user = StaffFactory()
 
         with self.assertRaises(Http404):
@@ -490,10 +594,10 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
     def test_applicant_can_see_application_draft_status(self):
         factory = RequestFactory()
         user = ApplicantFactory()
-        submission = ApplicationSubmissionFactory(status='draft', user=user)
+        submission = ApplicationSubmissionFactory(status="draft", user=user)
         ProjectFactory(submission=submission)
 
-        request = factory.get(f'/submission/{submission.pk}')
+        request = factory.get(f"/submission/{submission.pk}")
         request.user = user
 
         response = SubmissionDetailView.as_view()(request, pk=submission.pk)
@@ -515,12 +619,12 @@ class TestReviewersUpdateView(BaseSubmissionViewTestCase):
         if reviewers is None:
             reviewers = []
         data = {
-            'form-submitted-reviewer_form': '',
-            'reviewer_reviewers': [r.id for r in reviewers]
+            "form-submitted-reviewer_form": "",
+            "reviewer_reviewers": [r.id for r in reviewers],
         }
         data.update(
             **{
-                f'role_reviewer_{str(role.id)}': reviewer.id
+                f"role_reviewer_{str(role.id)}": reviewer.id
                 for role, reviewer in zip(self.roles, reviewer_roles, strict=False)
             }
         )
@@ -535,13 +639,17 @@ class TestReviewersUpdateView(BaseSubmissionViewTestCase):
 
     def test_lead_can_change_staff_single(self):
         submission = ApplicationSubmissionFactory(lead=self.user)
-        AssignedWithRoleReviewersFactory(role=self.roles[0], submission=submission, reviewer=self.staff[0])
+        AssignedWithRoleReviewersFactory(
+            role=self.roles[0], submission=submission, reviewer=self.staff[0]
+        )
         self.assertCountEqual(submission.reviewers.all(), [self.staff[0]])
 
         self.post_form(submission, reviewer_roles=[self.staff[1]])
 
         self.assertCountEqual(submission.reviewers.all(), [self.staff[1]])
-        self.assertEqual(submission.assigned.with_roles().first().reviewer, self.staff[1])
+        self.assertEqual(
+            submission.assigned.with_roles().first().reviewer, self.staff[1]
+        )
 
     def test_lead_cant_add_reviewers_single(self):
         submission = ApplicationSubmissionFactory(lead=self.user)
@@ -590,10 +698,14 @@ class TestReviewersUpdateView(BaseSubmissionViewTestCase):
 
     def test_lead_can_change_role_reviewer_and_review_remains(self):
         submission = ApplicationSubmissionFactory()
-        AssignedWithRoleReviewersFactory(role=self.roles[0], submission=submission, reviewer=self.staff[0])
+        AssignedWithRoleReviewersFactory(
+            role=self.roles[0], submission=submission, reviewer=self.staff[0]
+        )
 
         # Add a review from that staff reviewer
-        ReviewFactory(submission=submission, author__reviewer=self.staff[0], author__staff=True)
+        ReviewFactory(
+            submission=submission, author__reviewer=self.staff[0], author__staff=True
+        )
 
         # Assign a different reviewer to the same role
         self.post_form(submission, reviewer_roles=[self.staff[1]])
@@ -604,7 +716,9 @@ class TestReviewersUpdateView(BaseSubmissionViewTestCase):
     def test_can_be_made_role_and_not_duplciated(self):
         submission = ApplicationSubmissionFactory()
 
-        ReviewFactory(submission=submission, author__reviewer=self.staff[0], author__staff=True)
+        ReviewFactory(
+            submission=submission, author__reviewer=self.staff[0], author__staff=True
+        )
 
         self.post_form(submission, reviewer_roles=[self.staff[0]])
         self.assertCountEqual(submission.reviewers.all(), [self.staff[0]])
@@ -638,7 +752,9 @@ class TestReviewerSubmissionView(BaseSubmissionViewTestCase):
         self.applicant = ApplicantFactory()
         self.reviewer_role = ReviewerRoleFactory()
         apply_site = ApplySiteFactory()
-        self.reviewer_settings, _ = ReviewerSettings.objects.get_or_create(site_id=apply_site.id)
+        self.reviewer_settings, _ = ReviewerSettings.objects.get_or_create(
+            site_id=apply_site.id
+        )
         self.reviewer_settings.use_settings = True
         self.reviewer_settings.save()
 
@@ -646,123 +762,172 @@ class TestReviewerSubmissionView(BaseSubmissionViewTestCase):
         def assert_add_determination_not_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = BeautifulSoup(response.content, "html5lib").find_all(
+                "a", class_="button--primary", string=pattern
+            )
             self.assertEqual(len(buttons), 0)
 
-        submission = ApplicationSubmissionFactory(status='determination', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="determination", user=self.applicant, reviewers=[self.user]
+        )
 
         # Phase: ready-for-determination, no determination
         # "Add determination" should not be displayed
         # "Complete draft determination" should not be displayed
-        assert_add_determination_not_displayed(submission, 'Add determination')
-        assert_add_determination_not_displayed(submission, 'Complete draft determination')
+        assert_add_determination_not_displayed(submission, "Add determination")
+        assert_add_determination_not_displayed(
+            submission, "Complete draft determination"
+        )
 
         # Phase: ready-for-determination, draft determination
         # "Add determination" should not be displayed
         # "Complete draft determination" should not be displayed
         DeterminationFactory(submission=submission, accepted=True, submitted=False)
-        assert_add_determination_not_displayed(submission, 'Add determination')
-        assert_add_determination_not_displayed(submission, 'Complete draft determination')
+        assert_add_determination_not_displayed(submission, "Add determination")
+        assert_add_determination_not_displayed(
+            submission, "Complete draft determination"
+        )
 
     def test_can_see_create_review_primary_action(self):
         def assert_create_review_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string=pattern)
+            )
             self.assertEqual(len(buttons), 1)
 
-        submission = ApplicationSubmissionFactory(with_external_review=True, status='ext_external_review', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            with_external_review=True,
+            status="ext_external_review",
+            user=self.applicant,
+            reviewers=[self.user],
+        )
 
         # Phase: external_review, no review
         # "Add a review" should be displayed
-        submission.perform_transition('ext_post_review_discussion', self.user)
-        submission.perform_transition('ext_external_review', self.user)
-        assert_create_review_displayed(submission, 'Add a review')
+        submission.perform_transition("ext_post_review_discussion", self.user)
+        submission.perform_transition("ext_external_review", self.user)
+        assert_create_review_displayed(submission, "Add a review")
 
         # Phase: external_review, draft review created
         # "Complete draft review" should be displayed
         ReviewFactory(submission=submission, author__reviewer=self.user, is_draft=True)
-        assert_create_review_displayed(submission, 'Complete draft review')
+        assert_create_review_displayed(submission, "Complete draft review")
 
     def test_cant_see_create_review_primary_action(self):
         def assert_create_review_not_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = BeautifulSoup(response.content, "html5lib").find_all(
+                "a", class_="button--primary", string=pattern
+            )
             self.assertEqual(len(buttons), 0)
 
-        submission = ApplicationSubmissionFactory(with_external_review=True, user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            with_external_review=True, user=self.applicant, reviewers=[self.user]
+        )
 
         # Phase: received / in_discussion
         # "Add a review" should not be displayed
         # "Complete draft review" should not be displayed
-        assert_create_review_not_displayed(submission, 'Add a review')
-        assert_create_review_not_displayed(submission, 'Complete draft review')
+        assert_create_review_not_displayed(submission, "Add a review")
+        assert_create_review_not_displayed(submission, "Complete draft review")
 
         # Phase: internal_review, only viewable by staff users
         # "Add a review" should not be displayed
         # "Update draft review" should not be displayed
-        submission.perform_transition('ext_internal_review', self.user)
-        assert_create_review_not_displayed(submission, 'Add a review')
-        assert_create_review_not_displayed(submission, 'Complete draft review')
+        submission.perform_transition("ext_internal_review", self.user)
+        assert_create_review_not_displayed(submission, "Add a review")
+        assert_create_review_not_displayed(submission, "Complete draft review")
 
         # Phase: external_review, review completed
         # "Add a review" should not be displayed
         # "Update draft review" should not be displayed
-        submission.perform_transition('ext_post_review_discussion', self.user)
-        submission.perform_transition('ext_external_review', self.user)
+        submission.perform_transition("ext_post_review_discussion", self.user)
+        submission.perform_transition("ext_external_review", self.user)
         ReviewFactory(submission=submission, author__reviewer=self.user, is_draft=False)
-        assert_create_review_not_displayed(submission, 'Add a review')
-        assert_create_review_not_displayed(submission, 'Complete draft review')
+        assert_create_review_not_displayed(submission, "Add a review")
+        assert_create_review_not_displayed(submission, "Complete draft review")
 
     def test_cant_see_assign_reviewers_primary_action(self):
-        submission = ApplicationSubmissionFactory(status='internal_review', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="internal_review", user=self.applicant, reviewers=[self.user]
+        )
         response = self.get_page(submission)
 
-        buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--primary', string='Assign reviewers')
+        buttons = (
+            BeautifulSoup(response.content, "html5lib")
+            .find(class_="sidebar")
+            .find_all("a", class_="button--primary", string="Assign reviewers")
+        )
         self.assertEqual(len(buttons), 0)
 
     def test_cant_see_assign_reviewers_secondary_action(self):
-        submission = ApplicationSubmissionFactory(status='internal_review', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="internal_review", user=self.applicant, reviewers=[self.user]
+        )
         response = self.get_page(submission)
-        buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--white', string='Reviewers')
+        buttons = (
+            BeautifulSoup(response.content, "html5lib")
+            .find(class_="sidebar")
+            .find_all("a", class_="button--white", string="Reviewers")
+        )
         self.assertEqual(len(buttons), 0)
 
     def test_can_see_view_determination_primary_action(self):
         def assert_view_determination_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string='View determination')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string="View determination")
+            )
             self.assertEqual(len(buttons), 1)
 
         # Phase: accepted
-        submission = ApplicationSubmissionFactory(status='accepted', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="accepted", user=self.applicant, reviewers=[self.user]
+        )
         DeterminationFactory(submission=submission, accepted=True, submitted=True)
         assert_view_determination_displayed(submission)
 
         # Phase: rejected
-        submission = ApplicationSubmissionFactory(status='rejected', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="rejected", user=self.applicant, reviewers=[self.user]
+        )
         DeterminationFactory(submission=submission, rejected=True, submitted=True)
         assert_view_determination_displayed(submission)
 
     def test_cant_see_view_determination_primary_action(self):
         def assert_view_determination_not_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--primary', string='View determination')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="sidebar")
+                .find_all("a", class_="button--primary", string="View determination")
+            )
             self.assertEqual(len(buttons), 0)
 
         # Phase: received / in_discussion
-        submission = ApplicationSubmissionFactory(user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            user=self.applicant, reviewers=[self.user]
+        )
         assert_view_determination_not_displayed(submission)
 
         # Phase: ready-for-determination, no determination
-        submission.perform_transition('determination', self.user)
+        submission.perform_transition("determination", self.user)
         assert_view_determination_not_displayed(submission)
 
         # Phase: ready-for-determination, draft determination
-        DeterminationFactory(submission=submission, author=self.user, accepted=True, submitted=False)
+        DeterminationFactory(
+            submission=submission, author=self.user, accepted=True, submitted=False
+        )
         assert_view_determination_not_displayed(submission)
 
     def test_can_access_any_submission(self):
@@ -774,11 +939,13 @@ class TestReviewerSubmissionView(BaseSubmissionViewTestCase):
         self.assertEqual(response.status_code, 200)
 
     def test_can_only_access_reviewed_submission(self):
-        self.reviewer_settings.submission = 'reviewed'
-        self.reviewer_settings.state = 'all'
-        self.reviewer_settings.outcome = 'all'
+        self.reviewer_settings.submission = "reviewed"
+        self.reviewer_settings.state = "all"
+        self.reviewer_settings.outcome = "all"
         self.reviewer_settings.save()
-        submission = ApplicationSubmissionFactory(user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            user=self.applicant, reviewers=[self.user]
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 403)
 
@@ -787,9 +954,9 @@ class TestReviewerSubmissionView(BaseSubmissionViewTestCase):
         self.assertEqual(response.status_code, 200)
 
     def test_can_only_access_external_review_or_higher_submission(self):
-        self.reviewer_settings.submission = 'all'
-        self.reviewer_settings.state = 'ext_state_or_higher'
-        self.reviewer_settings.outcome = 'all'
+        self.reviewer_settings.submission = "all"
+        self.reviewer_settings.state = "ext_state_or_higher"
+        self.reviewer_settings.outcome = "all"
         self.reviewer_settings.assigned = False
         self.reviewer_settings.save()
 
@@ -797,67 +964,85 @@ class TestReviewerSubmissionView(BaseSubmissionViewTestCase):
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 403)
 
-        submission = ApplicationSubmissionFactory(with_external_review=True, user=self.applicant)
-        submission.perform_transition('ext_internal_review', self.user)
-        submission.perform_transition('ext_post_review_discussion', self.user)
-        submission.perform_transition('ext_external_review', self.user)
+        submission = ApplicationSubmissionFactory(
+            with_external_review=True, user=self.applicant
+        )
+        submission.perform_transition("ext_internal_review", self.user)
+        submission.perform_transition("ext_post_review_discussion", self.user)
+        submission.perform_transition("ext_external_review", self.user)
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 200)
 
     def test_cant_access_dismissed_submission(self):
-        self.reviewer_settings.submission = 'all'
-        self.reviewer_settings.state = 'all'
-        self.reviewer_settings.outcome = 'all'
+        self.reviewer_settings.submission = "all"
+        self.reviewer_settings.state = "all"
+        self.reviewer_settings.outcome = "all"
         self.reviewer_settings.assigned = False
         self.reviewer_settings.save()
 
-        submission = ApplicationSubmissionFactory(status='rejected', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="rejected", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 200)
 
-        self.reviewer_settings.outcome = 'all_except_dismissed'
+        self.reviewer_settings.outcome = "all_except_dismissed"
         self.reviewer_settings.save()
-        submission = ApplicationSubmissionFactory(status='rejected', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="rejected", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 403)
 
     def test_can_only_access_accepted_submission(self):
-        self.reviewer_settings.submission = 'all'
-        self.reviewer_settings.state = 'all'
+        self.reviewer_settings.submission = "all"
+        self.reviewer_settings.state = "all"
         self.reviewer_settings.save()
 
-        submission = ApplicationSubmissionFactory(status='rejected', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="rejected", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 200)
 
-        self.reviewer_settings.outcome = 'accepted'
+        self.reviewer_settings.outcome = "accepted"
         self.reviewer_settings.save()
-        submission = ApplicationSubmissionFactory(status='rejected', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="rejected", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 403)
 
-        submission = ApplicationSubmissionFactory(status='accepted', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="accepted", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 200)
 
     def test_can_only_access_assigned_submission(self):
-        self.reviewer_settings.submission = 'all'
-        self.reviewer_settings.state = 'all'
-        self.reviewer_settings.outcome = 'all'
+        self.reviewer_settings.submission = "all"
+        self.reviewer_settings.state = "all"
+        self.reviewer_settings.outcome = "all"
         self.reviewer_settings.save()
 
-        submission = ApplicationSubmissionFactory(status='accepted', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="accepted", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 200)
 
         self.reviewer_settings.assigned = True
         self.reviewer_settings.save()
 
-        submission = ApplicationSubmissionFactory(status='accepted', user=self.applicant)
+        submission = ApplicationSubmissionFactory(
+            status="accepted", user=self.applicant
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 403)
 
-        submission = ApplicationSubmissionFactory(status='accepted', user=self.applicant, reviewers=[self.user])
+        submission = ApplicationSubmissionFactory(
+            status="accepted", user=self.applicant, reviewers=[self.user]
+        )
         response = self.get_page(submission)
         self.assertEqual(response.status_code, 200)
 
@@ -870,7 +1055,9 @@ class TestApplicantSubmissionView(BaseSubmissionViewTestCase):
     def setUp(self):
         super().setUp()
         self.submission = ApplicationSubmissionFactory(user=self.user)
-        self.draft_proposal_submission = InvitedToProposalFactory(user=self.user, draft=True)
+        self.draft_proposal_submission = InvitedToProposalFactory(
+            user=self.user, draft=True
+        )
 
     def __setUp__(self):
         self.refresh(self.submission)
@@ -896,49 +1083,59 @@ class TestApplicantSubmissionView(BaseSubmissionViewTestCase):
         self.assertEqual(response.status_code, 403)
 
     def test_get_edit_link_when_editable(self):
-        submission = ApplicationSubmissionFactory(user=self.user, status='more_info')
+        submission = ApplicationSubmissionFactory(user=self.user, status="more_info")
         response = self.get_page(submission)
-        self.assertContains(response, 'Edit')
-        self.assertContains(response, self.url(submission, 'edit', absolute=False))
-        self.assertNotContains(response, 'Congratulations')
+        self.assertContains(response, "Edit")
+        self.assertContains(response, self.url(submission, "edit", absolute=False))
+        self.assertNotContains(response, "Congratulations")
 
     def test_get_congratulations_draft_proposal(self):
         response = self.get_page(self.draft_proposal_submission)
-        self.assertContains(response, 'Congratulations')
+        self.assertContains(response, "Congratulations")
 
     def test_can_edit_own_submission(self):
-        response = self.get_page(self.draft_proposal_submission, 'edit')
+        response = self.get_page(self.draft_proposal_submission, "edit")
         self.assertContains(response, self.draft_proposal_submission.title)
 
     def test_can_submit_submission(self):
         old_status = self.draft_proposal_submission.status
 
-        data = prepare_form_data(self.draft_proposal_submission, title='This is different')
+        data = prepare_form_data(
+            self.draft_proposal_submission, title="This is different"
+        )
 
-        response = self.post_page(self.draft_proposal_submission, {'submit': True, **data}, 'edit')
+        response = self.post_page(
+            self.draft_proposal_submission, {"submit": True, **data}, "edit"
+        )
 
-        url = self.url_from_pattern('funds:submissions:detail', kwargs={'pk': self.draft_proposal_submission.id})
+        url = self.url_from_pattern(
+            "funds:submissions:detail", kwargs={"pk": self.draft_proposal_submission.id}
+        )
 
         self.assertRedirects(response, url)
         submission = self.refresh(self.draft_proposal_submission)
         self.assertNotEqual(old_status, submission.status)
 
     def test_gets_draft_on_edit_submission(self):
-        draft_revision = ApplicationRevisionFactory(submission=self.draft_proposal_submission)
+        draft_revision = ApplicationRevisionFactory(
+            submission=self.draft_proposal_submission
+        )
         self.draft_proposal_submission.draft_revision = draft_revision
         self.draft_proposal_submission.save()
 
-        response = self.get_page(self.draft_proposal_submission, 'edit')
-        self.assertDictEqual(response.context['object'].form_data, draft_revision.form_data)
+        response = self.get_page(self.draft_proposal_submission, "edit")
+        self.assertDictEqual(
+            response.context["object"].form_data, draft_revision.form_data
+        )
 
     def test_cant_edit_submission_incorrect_state(self):
         submission = InvitedToProposalFactory(user=self.user)
-        response = self.get_page(submission, 'edit')
+        response = self.get_page(submission, "edit")
         self.assertEqual(response.status_code, 403)
 
     def test_cant_edit_other_submission(self):
         submission = InvitedToProposalFactory(draft=True)
-        response = self.get_page(submission, 'edit')
+        response = self.get_page(submission, "edit")
         self.assertEqual(response.status_code, 403)
 
     def test_cant_screen_submission(self):
@@ -947,44 +1144,60 @@ class TestApplicantSubmissionView(BaseSubmissionViewTestCase):
         and that they don't see the screening decision form.
         """
         screening_outcome = ScreeningStatusFactory()
-        response = self.post_page(self.submission, {'form-submitted-screening_form': '', 'screening_statuses': [screening_outcome.id]})
-        self.assertNotIn('screening_form', response.context_data)
+        response = self.post_page(
+            self.submission,
+            {
+                "form-submitted-screening_form": "",
+                "screening_statuses": [screening_outcome.id],
+            },
+        )
+        self.assertNotIn("screening_form", response.context_data)
         submission = self.refresh(self.submission)
         self.assertNotIn(screening_outcome, submission.screening_statuses.all())
 
     def test_cant_see_screening_status_block(self):
         response = self.get_page(self.submission)
-        self.assertNotContains(response, 'Screening decision')
+        self.assertNotContains(response, "Screening decision")
 
     def test_cant_see_add_determination_primary_action(self):
         def assert_add_determination_not_displayed(submission, button_text):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(rf'\s*{button_text}\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(rf"\s*{button_text}\s*")
+            buttons = BeautifulSoup(response.content, "html5lib").find_all(
+                "a", class_="button--primary", string=pattern
+            )
             self.assertEqual(len(buttons), 0)
 
-        submission = ApplicationSubmissionFactory(status='determination', user=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="determination", user=self.user
+        )
 
         # Phase: ready-for-determination, no determination
         # "Add determination" should not be displayed
         # "Complete draft determination" should not be displayed
-        assert_add_determination_not_displayed(submission, 'Add determination')
-        assert_add_determination_not_displayed(submission, 'Complete draft determination')
+        assert_add_determination_not_displayed(submission, "Add determination")
+        assert_add_determination_not_displayed(
+            submission, "Complete draft determination"
+        )
 
         # Phase: ready-for-determination, draft determination
         # "Add determination" should not be displayed
         # "Complete draft determination" should not be displayed
         DeterminationFactory(submission=submission, accepted=True, submitted=False)
-        assert_add_determination_not_displayed(submission, 'Add determination')
-        assert_add_determination_not_displayed(submission, 'Complete draft determination')
+        assert_add_determination_not_displayed(submission, "Add determination")
+        assert_add_determination_not_displayed(
+            submission, "Complete draft determination"
+        )
 
     def test_cant_see_create_review_primary_action(self):
         def assert_create_review_not_displayed(submission):
             response = self.get_page(submission)
             # Ignore whitespace (including line breaks) in button text
-            pattern = re.compile(r'\s*Add a review\s*')
-            buttons = BeautifulSoup(response.content, 'html5lib').find_all('a', class_='button--primary', string=pattern)
+            pattern = re.compile(r"\s*Add a review\s*")
+            buttons = BeautifulSoup(response.content, "html5lib").find_all(
+                "a", class_="button--primary", string=pattern
+            )
             self.assertEqual(len(buttons), 0)
 
         submission = ApplicationSubmissionFactory(user=self.user)
@@ -996,43 +1209,63 @@ class TestApplicantSubmissionView(BaseSubmissionViewTestCase):
         # Phase: internal_review
         # "Add a review" should not be displayed
         staff_user = StaffFactory()
-        submission.perform_transition('internal_review', staff_user)
+        submission.perform_transition("internal_review", staff_user)
         assert_create_review_not_displayed(submission)
 
     def test_cant_see_assign_reviewers_primary_action(self):
-        submission = ApplicationSubmissionFactory(status='internal_review', user=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="internal_review", user=self.user
+        )
         ReviewerRoleFactory()
         response = self.get_page(submission)
-        buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--primary', string='Assign reviewers')
+        buttons = (
+            BeautifulSoup(response.content, "html5lib")
+            .find(class_="sidebar")
+            .find_all("a", class_="button--primary", string="Assign reviewers")
+        )
         self.assertEqual(len(buttons), 0)
 
     def test_cant_see_assign_reviewers_secondary_action(self):
-        submission = ApplicationSubmissionFactory(status='internal_review', user=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="internal_review", user=self.user
+        )
         ReviewerRoleFactory()
         response = self.get_page(submission)
-        buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--white', string='Reviewers')
+        buttons = (
+            BeautifulSoup(response.content, "html5lib")
+            .find(class_="sidebar")
+            .find_all("a", class_="button--white", string="Reviewers")
+        )
         self.assertEqual(len(buttons), 0)
 
     def test_can_see_view_determination_primary_action(self):
         def assert_view_determination_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='js-actions-sidebar').find_all('a', class_='button--primary', string='View determination')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="js-actions-sidebar")
+                .find_all("a", class_="button--primary", string="View determination")
+            )
             self.assertEqual(len(buttons), 1)
 
         # Phase: accepted
-        submission = ApplicationSubmissionFactory(status='accepted', user=self.user)
+        submission = ApplicationSubmissionFactory(status="accepted", user=self.user)
         DeterminationFactory(submission=submission, accepted=True, submitted=True)
         assert_view_determination_displayed(submission)
 
         # Phase: rejected
-        submission = ApplicationSubmissionFactory(status='rejected', user=self.user)
+        submission = ApplicationSubmissionFactory(status="rejected", user=self.user)
         DeterminationFactory(submission=submission, rejected=True, submitted=True)
         assert_view_determination_displayed(submission)
 
     def test_cant_see_view_determination_primary_action(self):
         def assert_view_determination_not_displayed(submission):
             response = self.get_page(submission)
-            buttons = BeautifulSoup(response.content, 'html5lib').find(class_='sidebar').find_all('a', class_='button--primary', string='View determination')
+            buttons = (
+                BeautifulSoup(response.content, "html5lib")
+                .find(class_="sidebar")
+                .find_all("a", class_="button--primary", string="View determination")
+            )
             self.assertEqual(len(buttons), 0)
 
         # Phase: received / in_discussion
@@ -1040,7 +1273,7 @@ class TestApplicantSubmissionView(BaseSubmissionViewTestCase):
         assert_view_determination_not_displayed(submission)
 
         # Phase: ready-for-determination, no determination
-        submission.perform_transition('determination', self.user)
+        submission.perform_transition("determination", self.user)
         assert_view_determination_not_displayed(submission)
 
         # Phase: ready-for-determination, draft determination
@@ -1052,18 +1285,20 @@ class TestRevisionsView(BaseSubmissionViewTestCase):
     user_factory = ApplicantFactory
 
     def test_create_revisions_on_submit(self):
-        submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2, user=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2, user=self.user
+        )
         old_data = submission.form_data.copy()
 
-        new_title = 'New title'
+        new_title = "New title"
         new_data = prepare_form_data(submission, title=new_title)
 
-        self.post_page(submission, {'submit': True, **new_data}, 'edit')
+        self.post_page(submission, {"submit": True, **new_data}, "edit")
 
         submission = self.refresh(submission)
 
         self.maxDiff = None
-        self.assertEqual(submission.status, 'proposal_discussion')
+        self.assertEqual(submission.status, "proposal_discussion")
         self.assertEqual(submission.revisions.count(), 2)
         self.assertDictEqual(submission.revisions.last().form_data, old_data)
         self.assertDictEqual(submission.live_revision.form_data, submission.form_data)
@@ -1071,38 +1306,46 @@ class TestRevisionsView(BaseSubmissionViewTestCase):
         self.assertEqual(submission.title, new_title)
 
     def test_dont_update_live_revision_on_save(self):
-        submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2, user=self.user)
+        submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2, user=self.user
+        )
         old_data = submission.form_data.copy()
 
-        new_data = prepare_form_data(submission, title='New title')
+        new_data = prepare_form_data(submission, title="New title")
 
-        self.post_page(submission, {'save': True, **new_data}, 'edit')
+        self.post_page(submission, {"save": True, **new_data}, "edit")
 
         submission = self.refresh(submission)
 
         self.maxDiff = None
-        self.assertEqual(submission.status, 'draft_proposal')
+        self.assertEqual(submission.status, "draft_proposal")
         self.assertEqual(submission.revisions.count(), 2)
-        self.assertDictEqual(submission.draft_revision.form_data, submission.from_draft().form_data)
+        self.assertDictEqual(
+            submission.draft_revision.form_data, submission.from_draft().form_data
+        )
         self.assertEqual(submission.draft_revision.author, self.user)
         self.assertDictEqual(submission.live_revision.form_data, old_data)
 
     def test_existing_draft_edit_and_submit(self):
-        submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2, user=self.user)
-        draft_data = prepare_form_data(submission, title='A new title')
+        submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2, user=self.user
+        )
+        draft_data = prepare_form_data(submission, title="A new title")
 
-        self.post_page(submission, {'save': True, **draft_data}, 'edit')
+        self.post_page(submission, {"save": True, **draft_data}, "edit")
 
         submission = self.refresh(submission)
 
-        newer_title = 'Newer title'
+        newer_title = "Newer title"
         draft_data = prepare_form_data(submission, title=newer_title)
-        self.post_page(submission, {'submit': True, **draft_data}, 'edit')
+        self.post_page(submission, {"submit": True, **draft_data}, "edit")
 
         submission = self.refresh(submission)
 
         self.maxDiff = None
-        self.assertDictEqual(submission.draft_revision.form_data, submission.from_draft().form_data)
+        self.assertDictEqual(
+            submission.draft_revision.form_data, submission.from_draft().form_data
+        )
         self.assertDictEqual(submission.live_revision.form_data, submission.form_data)
         self.assertEqual(submission.revisions.count(), 2)
 
@@ -1110,19 +1353,21 @@ class TestRevisionsView(BaseSubmissionViewTestCase):
 
 
 class TestRevisionCompare(BaseSubmissionViewTestCase):
-    base_view_name = 'revisions:compare'
+    base_view_name = "revisions:compare"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'submission_pk': instance.pk,
-            'to': instance.live_revision.id,
-            'from': instance.revisions.last().id,
+            "submission_pk": instance.pk,
+            "to": instance.live_revision.id,
+            "from": instance.revisions.last().id,
         }
 
     def test_renders_with_all_the_diffs(self):
         submission = ApplicationSubmissionFactory()
-        new_data = ApplicationSubmissionFactory(round=submission.round, form_fields=submission.form_fields).form_data
+        new_data = ApplicationSubmissionFactory(
+            round=submission.round, form_fields=submission.form_fields
+        ).form_data
 
         submission.form_data = new_data
 
@@ -1133,11 +1378,11 @@ class TestRevisionCompare(BaseSubmissionViewTestCase):
 
 
 class TestRevisionList(BaseSubmissionViewTestCase):
-    base_view_name = 'revisions:list'
+    base_view_name = "revisions:list"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.pk}
+        return {"submission_pk": instance.pk}
 
     def test_list_doesnt_include_draft(self):
         submission = ApplicationSubmissionFactory()
@@ -1147,21 +1392,25 @@ class TestRevisionList(BaseSubmissionViewTestCase):
 
         response = self.get_page(submission)
 
-        self.assertNotIn(draft_revision, response.context['object_list'])
+        self.assertNotIn(draft_revision, response.context["object_list"])
 
     def test_get_in_correct_order(self):
         submission = ApplicationSubmissionFactory()
 
         revision = ApplicationRevisionFactory(submission=submission)
-        ApplicationRevision.objects.filter(id=revision.id).update(timestamp=timezone.now() - timedelta(days=1))
+        ApplicationRevision.objects.filter(id=revision.id).update(
+            timestamp=timezone.now() - timedelta(days=1)
+        )
 
         revision_older = ApplicationRevisionFactory(submission=submission)
-        ApplicationRevision.objects.filter(id=revision_older.id).update(timestamp=timezone.now() - timedelta(days=2))
+        ApplicationRevision.objects.filter(id=revision_older.id).update(
+            timestamp=timezone.now() - timedelta(days=2)
+        )
 
         response = self.get_page(submission)
 
         self.assertSequenceEqual(
-            response.context['object_list'],
+            response.context["object_list"],
             [submission.live_revision, revision, revision_older],
         )
 
@@ -1172,14 +1421,18 @@ class TestStaffSealedView(BaseSubmissionViewTestCase):
     def test_redirected_to_sealed(self):
         submission = SealedSubmissionFactory()
         response = self.get_page(submission)
-        url = self.url_from_pattern('funds:submissions:sealed', kwargs={'pk': submission.id})
+        url = self.url_from_pattern(
+            "funds:submissions:sealed", kwargs={"pk": submission.id}
+        )
         self.assertRedirects(response, url)
 
     def test_cant_post_to_sealed(self):
         submission = SealedSubmissionFactory()
-        response = self.post_page(submission, {'some': 'data'}, 'sealed')
+        response = self.post_page(submission, {"some": "data"}, "sealed")
         # Because of the redirect chain the url returned is not absolute
-        url = self.url_from_pattern('funds:submissions:sealed', kwargs={'pk': submission.id}, absolute=False)
+        url = self.url_from_pattern(
+            "funds:submissions:sealed", kwargs={"pk": submission.id}, absolute=False
+        )
         self.assertRedirects(response, url)
 
     def test_non_sealed_unaffected(self):
@@ -1189,8 +1442,10 @@ class TestStaffSealedView(BaseSubmissionViewTestCase):
 
     def test_non_sealed_redirected_away(self):
         submission = ApplicationSubmissionFactory()
-        response = self.get_page(submission, 'sealed')
-        url = self.url_from_pattern('funds:submissions:detail', kwargs={'pk': submission.id})
+        response = self.get_page(submission, "sealed")
+        url = self.url_from_pattern(
+            "funds:submissions:detail", kwargs={"pk": submission.id}
+        )
         self.assertRedirects(response, url)
 
 
@@ -1200,28 +1455,32 @@ class TestSuperUserSealedView(BaseSubmissionViewTestCase):
     def test_redirected_to_sealed(self):
         submission = SealedSubmissionFactory()
         response = self.get_page(submission)
-        url = self.url_from_pattern('funds:submissions:sealed', kwargs={'pk': submission.id})
+        url = self.url_from_pattern(
+            "funds:submissions:sealed", kwargs={"pk": submission.id}
+        )
         self.assertRedirects(response, url)
 
     def test_can_post_to_sealed(self):
         submission = SealedSubmissionFactory()
-        response = self.post_page(submission, {}, 'sealed')
-        url = self.url_from_pattern('funds:submissions:detail', kwargs={'pk': submission.id})
+        response = self.post_page(submission, {}, "sealed")
+        url = self.url_from_pattern(
+            "funds:submissions:detail", kwargs={"pk": submission.id}
+        )
         self.assertRedirects(response, url)
 
     def test_peeking_is_logged(self):
         submission = SealedSubmissionFactory()
-        self.post_page(submission, {}, 'sealed')
+        self.post_page(submission, {}, "sealed")
 
-        self.assertTrue('peeked' in self.client.session)
-        self.assertTrue(str(submission.id) in self.client.session['peeked'])
+        self.assertTrue("peeked" in self.client.session)
+        self.assertTrue(str(submission.id) in self.client.session["peeked"])
         self.assertEqual(Activity.objects.count(), 1)
-        self.assertTrue('sealed' in Activity.objects.first().message)
+        self.assertTrue("sealed" in Activity.objects.first().message)
 
     def test_not_asked_again(self):
         submission = SealedSubmissionFactory()
 
-        self.post_page(submission, {}, 'sealed')
+        self.post_page(submission, {}, "sealed")
 
         # Now request the page again
         response = self.get_page(submission)
@@ -1231,12 +1490,12 @@ class TestSuperUserSealedView(BaseSubmissionViewTestCase):
         sealed_round = SealedRoundFactory()
         first, second = SealedSubmissionFactory.create_batch(2, round=sealed_round)
 
-        self.post_page(first, {}, 'sealed')
-        self.post_page(second, {}, 'sealed')
+        self.post_page(first, {}, "sealed")
+        self.post_page(second, {}, "sealed")
 
-        self.assertTrue('peeked' in self.client.session)
-        self.assertTrue(str(first.id) in self.client.session['peeked'])
-        self.assertTrue(str(second.id) in self.client.session['peeked'])
+        self.assertTrue("peeked" in self.client.session)
+        self.assertTrue(str(first.id) in self.client.session["peeked"])
+        self.assertTrue(str(second.id) in self.client.session["peeked"])
 
 
 class TestSuperUserSubmissionView(BaseSubmissionViewTestCase):
@@ -1261,7 +1520,13 @@ class TestSuperUserSubmissionView(BaseSubmissionViewTestCase):
         screening_outcome2.save()
         self.submission.screening_statuses.clear()
         self.submission.screening_statuses.add(screening_outcome2)
-        self.post_page(self.submission, {'form-submitted-screening_form': '', 'screening_statuses': [screening_outcome1.id, screening_outcome2.id]})
+        self.post_page(
+            self.submission,
+            {
+                "form-submitted-screening_form": "",
+                "screening_statuses": [screening_outcome1.id, screening_outcome2.id],
+            },
+        )
         submission = self.refresh(self.submission)
         self.assertEqual(submission.screening_statuses.count(), 2)
 
@@ -1280,13 +1545,21 @@ class TestSuperUserSubmissionView(BaseSubmissionViewTestCase):
         screening_outcome2.default = True
         screening_outcome2.save()
         submission.screening_statuses.add(screening_outcome2)
-        response = self.post_page(submission, {'form-submitted-screening_form': '', 'screening_statuses': [screening_outcome1.id, screening_outcome2.id]})
+        response = self.post_page(
+            submission,
+            {
+                "form-submitted-screening_form": "",
+                "screening_statuses": [screening_outcome1.id, screening_outcome2.id],
+            },
+        )
         submission = self.refresh(submission)
-        self.assertEqual(response.context_data['screening_form'].should_show, True)
+        self.assertEqual(response.context_data["screening_form"].should_show, True)
         self.assertEqual(submission.screening_statuses.count(), 2)
 
         # Check that an activity was created that should only be viewable internally
-        activity = Activity.objects.filter(message__contains='Screening decision').first()
+        activity = Activity.objects.filter(
+            message__contains="Screening decision"
+        ).first()
         self.assertEqual(activity.visibility, TEAM)
 
 
@@ -1296,7 +1569,7 @@ class TestSubmissionDetailSimplifiedView(TestCase):
         submission = ApplicationSubmissionFactory()
         ProjectFactory(submission=submission)
 
-        request = factory.get(f'/submission/{submission.pk}')
+        request = factory.get(f"/submission/{submission.pk}")
         request.user = StaffFactory()
 
         response = SubmissionDetailSimplifiedView.as_view()(request, pk=submission.pk)
@@ -1310,7 +1583,7 @@ class TestSubmissionDetailSimplifiedView(TestCase):
         factory = RequestFactory()
         submission = ApplicationSubmissionFactory()
 
-        request = factory.get(f'/submission/{submission.pk}')
+        request = factory.get(f"/submission/{submission.pk}")
         request.user = StaffFactory()
 
         with self.assertRaises(Http404):
@@ -1322,17 +1595,17 @@ class TestSubmissionDetailSimplifiedView(TestCase):
 
 
 class BaseSubmissionFileViewTestCase(BaseViewTestCase):
-    url_name = 'funds:submissions:{}'
-    base_view_name = 'serve_private_media'
+    url_name = "funds:submissions:{}"
+    base_view_name = "serve_private_media"
 
     def get_kwargs(self, instance):
         document_fields = list(instance.file_field_ids)
         field_id = document_fields[0]
         document = instance.data(field_id)
         return {
-            'pk': instance.pk,
-            'field_id': field_id,
-            'file_name': document.basename,
+            "pk": instance.pk,
+            "field_id": field_id,
+            "file_name": document.basename,
         }
 
 
@@ -1371,15 +1644,15 @@ class TestAnonSubmissionFileView(BaseSubmissionFileViewTestCase):
         self.assertEqual(response.status_code, 200)
         self.assertEqual(len(response.redirect_chain), 2)
         for path, _ in response.redirect_chain:
-            self.assertIn(reverse('users_public:login'), path)
+            self.assertIn(reverse("users_public:login"), path)
 
 
 class BaseProjectDeleteTestCase(BaseViewTestCase):
-    url_name = 'funds:submissions:reminders:{}'
-    base_view_name = 'delete'
+    url_name = "funds:submissions:reminders:{}"
+    base_view_name = "delete"
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id, 'submission_pk': instance.submission.id}
+        return {"pk": instance.id, "submission_pk": instance.submission.id}
 
 
 class TestStaffReminderDeleteView(BaseProjectDeleteTestCase):
@@ -1393,7 +1666,7 @@ class TestStaffReminderDeleteView(BaseProjectDeleteTestCase):
     def test_confirm_message(self):
         reminder = ReminderFactory()
         response = self.get_page(reminder)
-        self.assertContains(response, 'Are you sure you want to delete')
+        self.assertContains(response, "Are you sure you want to delete")
         self.assertEqual(response.status_code, 200)
 
 
@@ -1406,31 +1679,41 @@ class TestUserReminderDeleteView(BaseProjectDeleteTestCase):
         self.assertEqual(response.status_code, 403)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestReviewerLeaderboard(TestCase):
     def test_applicant_cannot_access_reviewer_leaderboard(self):
         self.client.force_login(ApplicantFactory())
-        response = self.client.get('/apply/submissions/reviews/', follow=True, secure=True)
+        response = self.client.get(
+            "/apply/submissions/reviews/", follow=True, secure=True
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_community_reviewer_cannot_access_reviewer_leaderboard(self):
         self.client.force_login(CommunityReviewerFactory())
-        response = self.client.get('/apply/submissions/reviews/', follow=True, secure=True)
+        response = self.client.get(
+            "/apply/submissions/reviews/", follow=True, secure=True
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_partner_cannot_access_reviewer_leaderboard(self):
         self.client.force_login(PartnerFactory())
-        response = self.client.get('/apply/submissions/reviews/', follow=True, secure=True)
+        response = self.client.get(
+            "/apply/submissions/reviews/", follow=True, secure=True
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_reviewer_cannot_access_leader_board(self):
         self.client.force_login(ReviewerFactory())
-        response = self.client.get('/apply/submissions/reviews/', follow=True, secure=True)
+        response = self.client.get(
+            "/apply/submissions/reviews/", follow=True, secure=True
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_staff_can_access_leaderboard(self):
         self.client.force_login(StaffFactory())
-        response = self.client.get('/apply/submissions/reviews/', follow=True, secure=True)
+        response = self.client.get(
+            "/apply/submissions/reviews/", follow=True, secure=True
+        )
         self.assertEqual(response.status_code, 200)
 
 
@@ -1450,12 +1733,12 @@ class TestUpdateReviewersMixin(BaseSubmissionViewTestCase):
         if reviewers is None:
             reviewers = []
         data = {
-            'form-submitted-reviewer_form': '',
-            'reviewer_reviewers': [r.id for r in reviewers]
+            "form-submitted-reviewer_form": "",
+            "reviewer_reviewers": [r.id for r in reviewers],
         }
         data.update(
             **{
-                f'role_reviewer_{str(role.id)}': reviewer.id
+                f"role_reviewer_{str(role.id)}": reviewer.id
                 for role, reviewer in zip(self.roles, reviewer_roles, strict=False)
             }
         )
@@ -1467,10 +1750,7 @@ class TestUpdateReviewersMixin(BaseSubmissionViewTestCase):
         submission = ApplicationSubmission.objects.get(id=submission.id)
 
         # Submission state shouldn't change when all_reviewer_roles_not_assigned
-        self.assertEqual(
-            submission.status,
-            INITIAL_STATE
-        )
+        self.assertEqual(submission.status, INITIAL_STATE)
 
     def test_submission_transition_to_internal_review(self):
         submission = ApplicationSubmissionFactory(lead=self.user, status=INITIAL_STATE)
@@ -1479,17 +1759,15 @@ class TestUpdateReviewersMixin(BaseSubmissionViewTestCase):
 
         # Automatically transition the application to "Internal review".
         self.assertEqual(
-            submission.status,
-            submission.workflow.stepped_phases[2][0].name
+            submission.status, submission.workflow.stepped_phases[2][0].name
         )
 
     def test_submission_transition_to_proposal_internal_review(self):
-        submission = ApplicationSubmissionFactory(lead=self.user, status='proposal_discussion', workflow_stages=2)
+        submission = ApplicationSubmissionFactory(
+            lead=self.user, status="proposal_discussion", workflow_stages=2
+        )
         self.post_form(submission, reviewer_roles=[self.staff[0], self.staff[1]])
         submission = ApplicationSubmission.objects.get(id=submission.id)
 
         # Automatically transition the application to "Internal review".
-        self.assertEqual(
-            submission.status,
-            'proposal_internal_review'
-        )
+        self.assertEqual(submission.status, "proposal_internal_review")
diff --git a/hypha/apply/funds/tests/views/test_batch_progress.py b/hypha/apply/funds/tests/views/test_batch_progress.py
index 5326d0fbe8660a0928786e3f46f7ac45de592be4..be42de8077e80d7078192d876050205e93da5fda 100644
--- a/hypha/apply/funds/tests/views/test_batch_progress.py
+++ b/hypha/apply/funds/tests/views/test_batch_progress.py
@@ -11,14 +11,14 @@ from hypha.apply.utils.testing.tests import BaseViewTestCase
 
 
 class BaseBatchProgressViewTestCase(BaseViewTestCase):
-    url_name = 'funds:submissions:{}'
-    base_view_name = 'list'
+    url_name = "funds:submissions:{}"
+    base_view_name = "list"
 
     def data(self, action, submissions):
         return {
-            'form-submitted-batch_progress_form': 'Update',
-            'action': action,
-            'submissions': ','.join([str(submission.id) for submission in submissions]),
+            "form-submitted-batch_progress_form": "Update",
+            "action": action,
+            "submissions": ",".join([str(submission.id) for submission in submissions]),
         }
 
 
@@ -27,82 +27,92 @@ class StaffTestCase(BaseBatchProgressViewTestCase):
 
     def test_can_progress_application(self):
         submission = ApplicationSubmissionFactory()
-        action = 'open-review'
+        action = "open-review"
         self.post_page(data=self.data(action, [submission]))
         submission = self.refresh(submission)
-        self.assertEqual(submission.status, 'internal_review')
+        self.assertEqual(submission.status, "internal_review")
 
     def test_can_progress_multiple_applications(self):
         submissions = ApplicationSubmissionFactory.create_batch(3)
-        action = 'open-review'
+        action = "open-review"
         self.post_page(data=self.data(action, submissions))
 
         self.assertCountEqual(
             [self.refresh(submission).status for submission in submissions],
-            ['internal_review'] * 3,
+            ["internal_review"] * 3,
         )
 
     def test_cant_progress_in_incorrect_state(self):
         submission = ApplicationSubmissionFactory()
-        action = 'close-review'
+        action = "close-review"
         self.post_page(data=self.data(action, [submission]))
         submission = self.refresh(submission)
-        self.assertEqual(submission.status, 'in_discussion')
+        self.assertEqual(submission.status, "in_discussion")
 
     def test_can_progress_one_in_mixed_state(self):
         bad_submission = ApplicationSubmissionFactory()
-        good_submission = ApplicationSubmissionFactory(status='internal_review')
-        action = 'close-review'
+        good_submission = ApplicationSubmissionFactory(status="internal_review")
+        action = "close-review"
         self.post_page(data=self.data(action, [good_submission, bad_submission]))
         good_submission = self.refresh(good_submission)
         bad_submission = self.refresh(bad_submission)
-        self.assertEqual(bad_submission.status, 'in_discussion')
-        self.assertEqual(good_submission.status, 'post_review_discussion')
+        self.assertEqual(bad_submission.status, "in_discussion")
+        self.assertEqual(good_submission.status, "post_review_discussion")
 
     def test_can_progress_different_states(self):
         submission = ApplicationSubmissionFactory()
         other_submission = InvitedToProposalFactory()
-        action = 'open-review'
+        action = "open-review"
         self.post_page(data=self.data(action, [submission, other_submission]))
         submission = self.refresh(submission)
         other_submission = self.refresh(other_submission)
-        self.assertEqual(submission.status, 'internal_review')
-        self.assertEqual(other_submission.status, 'proposal_internal_review')
+        self.assertEqual(submission.status, "internal_review")
+        self.assertEqual(other_submission.status, "proposal_internal_review")
 
     def test_mixed_determine_notifies(self):
         submission = ApplicationSubmissionFactory()
-        dismissed_submission = ApplicationSubmissionFactory(status='rejected')
-        DeterminationFactory(submission=dismissed_submission, rejected=True, submitted=True)
-        action = 'dismiss'
-        response = self.post_page(data=self.data(action, [submission, dismissed_submission]))
-        self.assertEqual(len(response.context['messages']), 1)
+        dismissed_submission = ApplicationSubmissionFactory(status="rejected")
+        DeterminationFactory(
+            submission=dismissed_submission, rejected=True, submitted=True
+        )
+        action = "dismiss"
+        response = self.post_page(
+            data=self.data(action, [submission, dismissed_submission])
+        )
+        self.assertEqual(len(response.context["messages"]), 1)
 
     def test_determine_redirects(self):
         submission = ApplicationSubmissionFactory()
-        action = 'dismiss'
+        action = "dismiss"
         response = self.post_page(data=self.data(action, [submission]))
-        redirect_url = self.url_from_pattern('apply:submissions:determinations:batch', absolute=False)
-        self.assertEqual(response.request['PATH_INFO'][:len(redirect_url)], redirect_url)
+        redirect_url = self.url_from_pattern(
+            "apply:submissions:determinations:batch", absolute=False
+        )
+        self.assertEqual(
+            response.request["PATH_INFO"][: len(redirect_url)], redirect_url
+        )
 
-    @mock.patch('hypha.apply.funds.views.messenger')
+    @mock.patch("hypha.apply.funds.views.messenger")
     def test_messenger_not_called_with_failed(self, patched):
         submission = ApplicationSubmissionFactory()
-        action = 'close-review'
+        action = "close-review"
         self.post_page(data=self.data(action, [submission]))
         patched.assert_called_once()
         _, _, kwargs = patched.mock_calls[0]
-        self.assertQuerysetEqual(kwargs['sources'], ApplicationSubmission.objects.none())
+        self.assertQuerysetEqual(
+            kwargs["sources"], ApplicationSubmission.objects.none()
+        )
 
-    @mock.patch('hypha.apply.funds.views.messenger')
+    @mock.patch("hypha.apply.funds.views.messenger")
     def test_messenger_with_submission_in_review(self, patched):
         submission = ApplicationSubmissionFactory()
-        action = 'open-review'
+        action = "open-review"
         self.post_page(data=self.data(action, [submission]))
         self.assertEqual(patched.call_count, 2)
         _, _, kwargs = patched.mock_calls[0]
-        self.assertCountEqual(kwargs['sources'], [submission])
+        self.assertCountEqual(kwargs["sources"], [submission])
         _, _, kwargs = patched.mock_calls[1]
-        self.assertCountEqual(kwargs['sources'], [submission])
+        self.assertCountEqual(kwargs["sources"], [submission])
 
 
 class ReivewersTestCase(BaseBatchProgressViewTestCase):
diff --git a/hypha/apply/funds/tests/views/test_batch_reviewers.py b/hypha/apply/funds/tests/views/test_batch_reviewers.py
index b1145156f166a6cd0132885aec30be6176adf488..0ce01e4bfab977d1b2555246f6118d435b65d4c2 100644
--- a/hypha/apply/funds/tests/views/test_batch_reviewers.py
+++ b/hypha/apply/funds/tests/views/test_batch_reviewers.py
@@ -9,8 +9,8 @@ from hypha.apply.utils.testing.tests import BaseViewTestCase
 
 
 class BaseBatchReviewerTestCase(BaseViewTestCase):
-    url_name = 'funds:submissions:{}'
-    base_view_name = 'list'
+    url_name = "funds:submissions:{}"
+    base_view_name = "list"
     submissions = []
     staff = None
     reviewers = []
@@ -25,13 +25,13 @@ class BaseBatchReviewerTestCase(BaseViewTestCase):
 
     def data(self, reviewer_roles, submissions):
         data = {
-            'form-submitted-batch_reviewer_form': 'Update',
-            'submissions': ','.join([str(submission.id) for submission in submissions]),
+            "form-submitted-batch_reviewer_form": "Update",
+            "submissions": ",".join([str(submission.id) for submission in submissions]),
         }
 
         data.update(
             **{
-                f'role_reviewer_{str(role.id)}': reviewer.id
+                f"role_reviewer_{str(role.id)}": reviewer.id
                 for role, reviewer in zip(self.roles, reviewer_roles, strict=False)
             }
         )
@@ -51,8 +51,12 @@ class StaffTestCase(BaseBatchReviewerTestCase):
             self.assertEqual(submission.assigned.first().role, self.roles[0])
 
     def test_can_reassign_role_reviewers(self):
-        AssignedWithRoleReviewersFactory(reviewer=self.staff[1], submission=self.submissions[0], role=self.roles[0])
-        AssignedWithRoleReviewersFactory(reviewer=self.staff[1], submission=self.submissions[1], role=self.roles[0])
+        AssignedWithRoleReviewersFactory(
+            reviewer=self.staff[1], submission=self.submissions[0], role=self.roles[0]
+        )
+        AssignedWithRoleReviewersFactory(
+            reviewer=self.staff[1], submission=self.submissions[1], role=self.roles[0]
+        )
         submissions = self.submissions[0:2]
         reviewer_roles = [self.staff[0]]
         self.post_page(data=self.data(reviewer_roles, submissions))
@@ -62,8 +66,12 @@ class StaffTestCase(BaseBatchReviewerTestCase):
             self.assertEqual(submission.assigned.first().role, self.roles[0])
 
     def test_can_reassign_from_other_role_reviewers(self):
-        AssignedWithRoleReviewersFactory(reviewer=self.staff[0], submission=self.submissions[0], role=self.roles[1])
-        AssignedWithRoleReviewersFactory(reviewer=self.staff[0], submission=self.submissions[1], role=self.roles[1])
+        AssignedWithRoleReviewersFactory(
+            reviewer=self.staff[0], submission=self.submissions[0], role=self.roles[1]
+        )
+        AssignedWithRoleReviewersFactory(
+            reviewer=self.staff[0], submission=self.submissions[1], role=self.roles[1]
+        )
         submissions = self.submissions[0:2]
         reviewer_roles = [self.staff[0]]
         self.post_page(data=self.data(reviewer_roles, submissions))
@@ -73,14 +81,26 @@ class StaffTestCase(BaseBatchReviewerTestCase):
             self.assertEqual(submission.assigned.first().role, self.roles[0])
 
     def test_doesnt_remove_if_already_reviewed(self):
-        AssignedWithRoleReviewersFactory(reviewer=self.staff[1], submission=self.submissions[0], role=self.roles[0])
-        ReviewFactory(author__reviewer=self.staff[1], author__staff=True, submission=self.submissions[0], draft=False)
-        ReviewFactory(author__reviewer=self.staff[1], author__staff=True, submission=self.submissions[1], draft=False)
+        AssignedWithRoleReviewersFactory(
+            reviewer=self.staff[1], submission=self.submissions[0], role=self.roles[0]
+        )
+        ReviewFactory(
+            author__reviewer=self.staff[1],
+            author__staff=True,
+            submission=self.submissions[0],
+            draft=False,
+        )
+        ReviewFactory(
+            author__reviewer=self.staff[1],
+            author__staff=True,
+            submission=self.submissions[1],
+            draft=False,
+        )
         submissions = self.submissions[0:2]
         reviewer_roles = [self.staff[0]]
         self.post_page(data=self.data(reviewer_roles, submissions))
         for submission in submissions:
             self.assertEqual(submission.assigned.count(), 2)
-            reviewers = submission.assigned.values_list('reviewer', flat=True)
+            reviewers = submission.assigned.values_list("reviewer", flat=True)
             self.assertIn(self.staff[0].pk, reviewers)
             self.assertIn(self.staff[1].pk, reviewers)
diff --git a/hypha/apply/funds/tests/views/test_rounds.py b/hypha/apply/funds/tests/views/test_rounds.py
index 4607b78fa907d97ee7db8139c448c1ff5d3e26a4..69c68299c9f40a86dc61d2cb59ea5c49fc86002e 100644
--- a/hypha/apply/funds/tests/views/test_rounds.py
+++ b/hypha/apply/funds/tests/views/test_rounds.py
@@ -4,8 +4,8 @@ from hypha.apply.utils.testing.tests import BaseViewTestCase
 
 
 class BaseAllRoundsViewTestCase(BaseViewTestCase):
-    url_name = 'funds:rounds:{}'
-    base_view_name = 'list'
+    url_name = "funds:rounds:{}"
+    base_view_name = "list"
 
 
 class TestStaffRoundPage(BaseAllRoundsViewTestCase):
@@ -33,14 +33,14 @@ class TestApplicantRoundPage(BaseAllRoundsViewTestCase):
 
 
 class ByRoundTestCase(BaseViewTestCase):
-    url_name = 'apply:rounds:{}'
-    base_view_name = 'detail'
+    url_name = "apply:rounds:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
         try:
-            return {'pk': instance.id}
+            return {"pk": instance.id}
         except AttributeError:
-            return {'pk': instance['id']}
+            return {"pk": instance["id"]}
 
 
 class TestStaffSubmissionByRound(ByRoundTestCase):
@@ -63,7 +63,7 @@ class TestStaffSubmissionByRound(ByRoundTestCase):
         self.assertEqual(response.status_code, 404)
 
     def test_cant_access_non_existing_page(self):
-        response = self.get_page({'id': 555})
+        response = self.get_page({"id": 555})
         self.assertEqual(response.status_code, 404)
 
 
@@ -87,5 +87,5 @@ class TestApplicantSubmissionByRound(ByRoundTestCase):
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_non_existing_page(self):
-        response = self.get_page({'id': 555})
+        response = self.get_page({"id": 555})
         self.assertEqual(response.status_code, 403)
diff --git a/hypha/apply/funds/urls.py b/hypha/apply/funds/urls.py
index d241b31757ab44638a3419659d75f75b1bd7c44f..87809e3ec21201d688c934a7e032e91c34b2ac87 100644
--- a/hypha/apply/funds/urls.py
+++ b/hypha/apply/funds/urls.py
@@ -49,82 +49,186 @@ from .views_partials import (
     sub_menu_update_status,
 )
 
-revision_urls = ([
-    path('', RevisionListView.as_view(), name='list'),
-    path('compare/<int:to>/<int:from>/', RevisionCompareView.as_view(), name='compare'),
-], 'revisions')
+revision_urls = (
+    [
+        path("", RevisionListView.as_view(), name="list"),
+        path(
+            "compare/<int:to>/<int:from>/",
+            RevisionCompareView.as_view(),
+            name="compare",
+        ),
+    ],
+    "revisions",
+)
 
-reminders_urls = ([
-    path('<int:pk>/delete/', ReminderDeleteView.as_view(), name="delete"),
-], 'reminders')
+reminders_urls = (
+    [
+        path("<int:pk>/delete/", ReminderDeleteView.as_view(), name="delete"),
+    ],
+    "reminders",
+)
 
 
-app_name = 'funds'
+app_name = "funds"
 
-submission_urls = ([
-    path('', SubmissionOverviewView.as_view(), name="overview"),
-    path('all/', SubmissionListView.as_view(), name="list"),
-    path('all-beta/', submission_all_beta, name="list-beta"),
-    path('all-beta/bulk_archive/', bulk_archive_submissions, name="bulk-archive"),
-    path('all-beta/bulk_delete/', bulk_delete_submissions, name="bulk-delete"),
-    path('all-beta/bulk_update_status/', bulk_update_submissions_status, name="bulk-update-status"),
-    path('all-beta/submenu/funds/', sub_menu_funds, name="submenu-funds"),
-    path('all-beta/submenu/leads/', sub_menu_leads, name="submenu-leads"),
-    path('all-beta/submenu/rounds/', sub_menu_rounds, name="submenu-rounds"),
-    path('all-beta/submenu/reviewers/', sub_menu_reviewers, name="submenu-reviewers"),
-    path('all-beta/submenu/meta-terms/', sub_menu_meta_terms, name="submenu-meta-terms"),
-    path('all-beta/submenu/bulk-update-status/', sub_menu_update_status, name="submenu-update-status"),
-    path('all-beta/submenu/bulk-update-lead/', sub_menu_bulk_update_lead, name="submenu-bulk-update-lead"),
-    path('all-beta/submenu/bulk-update-reviewers/', sub_menu_bulk_update_reviewers, name="submenu-bulk-update-reviewers"),
-    path('all-beta/submenu/category-options/', sub_menu_category_options, name="submenu-category-options"),
-    path('all-beta/partials/review_decisions/', partial_reviews_decisions, name="partial-reviews-decisions"),
-    path('summary/', GroupingApplicationsListView.as_view(), name="summary"),
-    path('result/', SubmissionResultView.as_view(), name="result"),
-    path('flagged/', include([
-        path('', SubmissionUserFlaggedView.as_view(), name="flagged"),
-        path('staff/', SubmissionStaffFlaggedView.as_view(), name="staff_flagged"),
-    ])),
-    path('reviews/', include([
-        path('', ReviewerLeaderboard.as_view(), name="reviewer_leaderboard"),
-        path('<int:pk>/', ReviewerLeaderboardDetail.as_view(), name="reviewer_leaderboard_detail"),
-    ])),
-    path('awaiting_review/', AwaitingReviewSubmissionsListView.as_view(), name="awaiting_review"),
-    path('assignments/', include([
-        path('staff/', StaffAssignments.as_view(), name="staff_assignments"),
-    ])),
-    path('<int:pk>/', include([
-        path('', SubmissionDetailView.as_view(), name="detail"),
-        path('partial/activities/', partial_submission_activities, name="partial-activities"),
-        path('partial/reviews-card/', partial_reviews_card, name="partial-reviews-card"),
-        path('edit/', SubmissionEditView.as_view(), name="edit"),
-        path('sealed/', SubmissionSealedView.as_view(), name="sealed"),
-        path('simplified/', SubmissionDetailSimplifiedView.as_view(), name="simplified"),
-        path('download/', SubmissionDetailPDFView.as_view(), name="download"),
-        path('delete/', SubmissionDeleteView.as_view(), name="delete"),
-        path(
-            'documents/<uuid:field_id>/<str:file_name>',
-            SubmissionPrivateMediaView.as_view(), name='serve_private_media'
-        ),
-    ])),
-    path('<int:submission_pk>/', include([
-        path('', include('hypha.apply.review.urls', namespace="reviews")),
-        path('revisions/', include(revision_urls, namespace="revisions")),
-        path('reminders/', include(reminders_urls, namespace="reminders")),
-    ])),
-    path('', include('hypha.apply.determinations.urls', namespace="determinations")),
-    path('', include('hypha.apply.flags.urls', namespace="flags")),
-    path('<slug:status>/', SubmissionsByStatus.as_view(), name='status'),
-], 'submissions')
+submission_urls = (
+    [
+        path("", SubmissionOverviewView.as_view(), name="overview"),
+        path("all/", SubmissionListView.as_view(), name="list"),
+        path("all-beta/", submission_all_beta, name="list-beta"),
+        path("all-beta/bulk_archive/", bulk_archive_submissions, name="bulk-archive"),
+        path("all-beta/bulk_delete/", bulk_delete_submissions, name="bulk-delete"),
+        path(
+            "all-beta/bulk_update_status/",
+            bulk_update_submissions_status,
+            name="bulk-update-status",
+        ),
+        path("all-beta/submenu/funds/", sub_menu_funds, name="submenu-funds"),
+        path("all-beta/submenu/leads/", sub_menu_leads, name="submenu-leads"),
+        path("all-beta/submenu/rounds/", sub_menu_rounds, name="submenu-rounds"),
+        path(
+            "all-beta/submenu/reviewers/", sub_menu_reviewers, name="submenu-reviewers"
+        ),
+        path(
+            "all-beta/submenu/meta-terms/",
+            sub_menu_meta_terms,
+            name="submenu-meta-terms",
+        ),
+        path(
+            "all-beta/submenu/bulk-update-status/",
+            sub_menu_update_status,
+            name="submenu-update-status",
+        ),
+        path(
+            "all-beta/submenu/bulk-update-lead/",
+            sub_menu_bulk_update_lead,
+            name="submenu-bulk-update-lead",
+        ),
+        path(
+            "all-beta/submenu/bulk-update-reviewers/",
+            sub_menu_bulk_update_reviewers,
+            name="submenu-bulk-update-reviewers",
+        ),
+        path(
+            "all-beta/submenu/category-options/",
+            sub_menu_category_options,
+            name="submenu-category-options",
+        ),
+        path(
+            "all-beta/partials/review_decisions/",
+            partial_reviews_decisions,
+            name="partial-reviews-decisions",
+        ),
+        path("summary/", GroupingApplicationsListView.as_view(), name="summary"),
+        path("result/", SubmissionResultView.as_view(), name="result"),
+        path(
+            "flagged/",
+            include(
+                [
+                    path("", SubmissionUserFlaggedView.as_view(), name="flagged"),
+                    path(
+                        "staff/",
+                        SubmissionStaffFlaggedView.as_view(),
+                        name="staff_flagged",
+                    ),
+                ]
+            ),
+        ),
+        path(
+            "reviews/",
+            include(
+                [
+                    path(
+                        "", ReviewerLeaderboard.as_view(), name="reviewer_leaderboard"
+                    ),
+                    path(
+                        "<int:pk>/",
+                        ReviewerLeaderboardDetail.as_view(),
+                        name="reviewer_leaderboard_detail",
+                    ),
+                ]
+            ),
+        ),
+        path(
+            "awaiting_review/",
+            AwaitingReviewSubmissionsListView.as_view(),
+            name="awaiting_review",
+        ),
+        path(
+            "assignments/",
+            include(
+                [
+                    path(
+                        "staff/", StaffAssignments.as_view(), name="staff_assignments"
+                    ),
+                ]
+            ),
+        ),
+        path(
+            "<int:pk>/",
+            include(
+                [
+                    path("", SubmissionDetailView.as_view(), name="detail"),
+                    path(
+                        "partial/activities/",
+                        partial_submission_activities,
+                        name="partial-activities",
+                    ),
+                    path(
+                        "partial/reviews-card/",
+                        partial_reviews_card,
+                        name="partial-reviews-card",
+                    ),
+                    path("edit/", SubmissionEditView.as_view(), name="edit"),
+                    path("sealed/", SubmissionSealedView.as_view(), name="sealed"),
+                    path(
+                        "simplified/",
+                        SubmissionDetailSimplifiedView.as_view(),
+                        name="simplified",
+                    ),
+                    path(
+                        "download/", SubmissionDetailPDFView.as_view(), name="download"
+                    ),
+                    path("delete/", SubmissionDeleteView.as_view(), name="delete"),
+                    path(
+                        "documents/<uuid:field_id>/<str:file_name>",
+                        SubmissionPrivateMediaView.as_view(),
+                        name="serve_private_media",
+                    ),
+                ]
+            ),
+        ),
+        path(
+            "<int:submission_pk>/",
+            include(
+                [
+                    path("", include("hypha.apply.review.urls", namespace="reviews")),
+                    path("revisions/", include(revision_urls, namespace="revisions")),
+                    path("reminders/", include(reminders_urls, namespace="reminders")),
+                ]
+            ),
+        ),
+        path(
+            "", include("hypha.apply.determinations.urls", namespace="determinations")
+        ),
+        path("", include("hypha.apply.flags.urls", namespace="flags")),
+        path("<slug:status>/", SubmissionsByStatus.as_view(), name="status"),
+    ],
+    "submissions",
+)
 
-rounds_urls = ([
-    path('', RoundListView.as_view(), name="list"),
-    path('<int:pk>/', SubmissionsByRound.as_view(), name="detail"),
-    path('export/<int:pk>/', ExportSubmissionsByRound.as_view(), name="export"),
-], 'rounds')
+rounds_urls = (
+    [
+        path("", RoundListView.as_view(), name="list"),
+        path("<int:pk>/", SubmissionsByRound.as_view(), name="detail"),
+        path("export/<int:pk>/", ExportSubmissionsByRound.as_view(), name="export"),
+    ],
+    "rounds",
+)
 
 
 urlpatterns = [
-    path('submissions/', include(submission_urls)),
-    path('rounds/', include(rounds_urls)),
-    path('projects/', include(projects_urls)),
+    path("submissions/", include(submission_urls)),
+    path("rounds/", include(rounds_urls)),
+    path("projects/", include(projects_urls)),
 ]
diff --git a/hypha/apply/funds/utils.py b/hypha/apply/funds/utils.py
index 1cf0fd8377fcb292f625c3b79f455607a001a60c..6acf5f8e808e5ecaa28732ffc846183813f972dc 100644
--- a/hypha/apply/funds/utils.py
+++ b/hypha/apply/funds/utils.py
@@ -7,8 +7,8 @@ from .models.screening import ScreeningStatus
 
 def render_icon(image):
     if not image:
-        return ''
-    filter_spec = 'fill-20x20'
+        return ""
+    filter_spec = "fill-20x20"
     return generate_image_tag(image, filter_spec, html_class="icon mr-2 align-middle")
 
 
@@ -60,7 +60,7 @@ def model_form_initial(instance, fields=None, exclude=None):
     opts = instance._meta
     data = {}
     for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
-        if not getattr(f, 'editable', False):
+        if not getattr(f, "editable", False):
             continue
         if fields and f.name not in fields:
             continue
diff --git a/hypha/apply/funds/views.py b/hypha/apply/funds/views.py
index 5dfcb0aa7cb1b0b4125c3644085a58ae524ca776..087101453637e6e98c9bfa7d84f4d08324deb883 100644
--- a/hypha/apply/funds/views.py
+++ b/hypha/apply/funds/views.py
@@ -38,6 +38,7 @@ from django_tables2.views import SingleTableMixin
 from wagtail.models import Page
 
 from hypha.apply.activity.messaging import MESSAGES, messenger
+from hypha.apply.activity.models import Event
 from hypha.apply.activity.views import (
     ActivityContextMixin,
     CommentFormView,
@@ -94,6 +95,7 @@ from .models import (
 from .permissions import (
     can_access_archived_submissions,
     can_access_drafts,
+    can_export_submissions,
     has_permission,
 )
 from .tables import (
@@ -128,12 +130,12 @@ class SubmissionStatsMixin:
         review_my_count = submissions.reviewed_by(self.request.user).count()
 
         submission_value = submissions.current().value()
-        submission_sum = intcomma(submission_value.get('value__sum'))
-        submission_count = submission_value.get('value__count')
+        submission_sum = intcomma(submission_value.get("value__sum"))
+        submission_count = submission_value.get("value__count")
 
         submission_accepted = submissions.current_accepted()
         submission_accepted_value = submission_accepted.value()
-        submission_accepted_sum = intcomma(submission_accepted_value.get('value__sum'))
+        submission_accepted_sum = intcomma(submission_accepted_value.get("value__sum"))
         submission_accepted_count = submission_accepted.count()
 
         reviews = Review.objects.submitted()
@@ -156,18 +158,16 @@ class SubmissionStatsMixin:
 class BaseAdminSubmissionsTable(SingleTableMixin, FilterView):
     table_class = AdminSubmissionsTable
     filterset_class = SubmissionFilterAndSearch
-    filter_action = ''
-    search_action = ''
+    filter_action = ""
+    search_action = ""
     paginator_class = LazyPaginator
-    table_pagination = {'per_page': 25}
+    table_pagination = {"per_page": 25}
 
     excluded_fields = settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS
 
     @property
     def excluded(self):
-        return {
-            'exclude': self.excluded_fields
-        }
+        return {"exclude": self.excluded_fields}
 
     def get_table_kwargs(self, **kwargs):
         return {**self.excluded, **kwargs}
@@ -179,7 +179,9 @@ class BaseAdminSubmissionsTable(SingleTableMixin, FilterView):
         return new_kwargs
 
     def get_queryset(self):
-        submissions = self.filterset_class._meta.model.objects.current().for_table(self.request.user)
+        submissions = self.filterset_class._meta.model.objects.current().for_table(
+            self.request.user
+        )
 
         if not can_access_drafts(self.request.user):
             submissions = submissions.exclude_draft()
@@ -187,7 +189,7 @@ class BaseAdminSubmissionsTable(SingleTableMixin, FilterView):
         return submissions
 
     def get_context_data(self, **kwargs):
-        search_term = self.request.GET.get('query')
+        search_term = self.request.GET.get("query")
 
         return super().get_context_data(
             search_term=search_term,
@@ -197,38 +199,40 @@ class BaseAdminSubmissionsTable(SingleTableMixin, FilterView):
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class BatchUpdateLeadView(DelegatedViewMixin, FormView):
     form_class = BatchUpdateSubmissionLeadForm
-    context_name = 'batch_lead_form'
+    context_name = "batch_lead_form"
 
     def form_valid(self, form):
-        new_lead = form.cleaned_data['lead']
-        submissions = form.cleaned_data['submissions']
+        new_lead = form.cleaned_data["lead"]
+        submissions = form.cleaned_data["submissions"]
         services.bulk_update_lead(
             submissions=submissions,
             user=self.request.user,
             lead=new_lead,
-            request=self.request
+            request=self.request,
         )
         return super().form_valid(form)
 
     def form_invalid(self, form):
-        messages.error(self.request, mark_safe(_('Sorry something went wrong') + form.errors.as_ul()))
+        messages.error(
+            self.request,
+            mark_safe(_("Sorry something went wrong") + form.errors.as_ul()),
+        )
         return super().form_invalid(form)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class BatchUpdateReviewersView(DelegatedViewMixin, FormView):
     form_class = BatchUpdateReviewersForm
-    context_name = 'batch_reviewer_form'
+    context_name = "batch_reviewer_form"
 
     def form_valid(self, form):
-        submissions = form.cleaned_data['submissions']
-        external_reviewers = form.cleaned_data['external_reviewers']
+        submissions = form.cleaned_data["submissions"]
+        external_reviewers = form.cleaned_data["external_reviewers"]
         assigned_roles = {
-            role: form.cleaned_data[field]
-            for field, role in form.role_fields.items()
+            role: form.cleaned_data[field] for field, role in form.role_fields.items()
         }
         services.bulk_update_reviewers(
             submissions=submissions,
@@ -241,17 +245,20 @@ class BatchUpdateReviewersView(DelegatedViewMixin, FormView):
         return super().form_valid(form)
 
     def form_invalid(self, form):
-        messages.error(self.request, mark_safe(_('Sorry something went wrong') + form.errors.as_ul()))
+        messages.error(
+            self.request,
+            mark_safe(_("Sorry something went wrong") + form.errors.as_ul()),
+        )
         return super().form_invalid(form)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class BatchDeleteSubmissionView(DelegatedViewMixin, FormView):
     form_class = BatchDeleteSubmissionForm
-    context_name = 'batch_delete_submission_form'
+    context_name = "batch_delete_submission_form"
 
     def form_valid(self, form):
-        submissions = form.cleaned_data['submissions']
+        submissions = form.cleaned_data["submissions"]
         services.bulk_delete_submissions(
             submissions=submissions,
             user=self.request.user,
@@ -260,17 +267,20 @@ class BatchDeleteSubmissionView(DelegatedViewMixin, FormView):
         return super().form_valid(form)
 
     def form_invalid(self, form):
-        messages.error(self.request, mark_safe(_('Sorry something went wrong') + form.errors.as_ul()))
+        messages.error(
+            self.request,
+            mark_safe(_("Sorry something went wrong") + form.errors.as_ul()),
+        )
         return super().form_invalid(form)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class BatchArchiveSubmissionView(DelegatedViewMixin, FormView):
     form_class = BatchArchiveSubmissionForm
-    context_name = 'batch_archive_submission_form'
+    context_name = "batch_archive_submission_form"
 
     def form_valid(self, form):
-        submissions = form.cleaned_data['submissions']
+        submissions = form.cleaned_data["submissions"]
         services.bulk_archive_submissions(
             submissions=submissions,
             user=self.request.user,
@@ -279,23 +289,28 @@ class BatchArchiveSubmissionView(DelegatedViewMixin, FormView):
         return super().form_valid(form)
 
     def form_invalid(self, form):
-        messages.error(self.request, mark_safe(_('Sorry something went wrong') + form.errors.as_ul()))
+        messages.error(
+            self.request,
+            mark_safe(_("Sorry something went wrong") + form.errors.as_ul()),
+        )
         return super().form_invalid(form)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
     form_class = BatchProgressSubmissionForm
-    context_name = 'batch_progress_form'
+    context_name = "batch_progress_form"
 
     def form_valid(self, form):
-        submissions = form.cleaned_data['submissions']
-        transitions = form.cleaned_data.get('action')
+        submissions = form.cleaned_data["submissions"]
+        transitions = form.cleaned_data.get("action")
 
         try:
-            redirect = BatchDeterminationCreateView.should_redirect(self.request, submissions, transitions)
+            redirect = BatchDeterminationCreateView.should_redirect(
+                self.request, submissions, transitions
+            )
         except ValueError as e:
-            messages.warning(self.request, 'Could not determine: ' + str(e))
+            messages.warning(self.request, "Could not determine: " + str(e))
             return self.form_invalid(form)
         else:
             if redirect:
@@ -304,7 +319,10 @@ class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
         failed = []
         phase_changes = {}
         for submission in submissions:
-            valid_actions = {action for action, _ in submission.get_actions_for_user(self.request.user)}
+            valid_actions = {
+                action
+                for action, _ in submission.get_actions_for_user(self.request.user)
+            }
             old_phase = submission.phase
             try:
                 transition = (valid_actions & set(transitions)).pop()
@@ -322,11 +340,13 @@ class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
         if failed:
             messages.warning(
                 self.request,
-                _('Failed to update: ') +
-                ', '.join(str(submission) for submission in failed)
+                _("Failed to update: ")
+                + ", ".join(str(submission) for submission in failed),
             )
 
-        succeeded_submissions = submissions.exclude(id__in=[submission.id for submission in failed])
+        succeeded_submissions = submissions.exclude(
+            id__in=[submission.id for submission in failed]
+        )
         messenger(
             MESSAGES.BATCH_TRANSITION,
             user=self.request.user,
@@ -335,10 +355,7 @@ class BatchProgressSubmissionView(DelegatedViewMixin, FormView):
             related=phase_changes,
         )
 
-        ready_for_review = [
-            phase for phase in transitions
-            if phase in review_statuses
-        ]
+        ready_for_review = [phase for phase in transitions if phase in review_statuses]
         if ready_for_review:
             messenger(
                 MESSAGES.BATCH_READY_FOR_REVIEW,
@@ -355,74 +372,92 @@ class BaseReviewerSubmissionsTable(BaseAdminSubmissionsTable):
     filterset_class = SubmissionReviewerFilterAndSearch
 
     def get_queryset(self):
-        '''
+        """
         If use_settings variable is set for ReviewerSettings use settings
         parameters to filter submissions or return only reviewed_by as it
         was by default.
-        '''
+        """
         reviewer_settings = ReviewerSettings.for_request(self.request)
         if reviewer_settings.use_settings:
-            return super().get_queryset().for_reviewer_settings(
-                self.request.user, reviewer_settings
-            ).order_by('-submit_time')
+            return (
+                super()
+                .get_queryset()
+                .for_reviewer_settings(self.request.user, reviewer_settings)
+                .order_by("-submit_time")
+            )
         return super().get_queryset().reviewed_by(self.request.user)
 
 
+@method_decorator(login_required, name="dispatch")
 class AwaitingReviewSubmissionsListView(SingleTableMixin, ListView):
     model = ApplicationSubmission
     table_class = AdminSubmissionsTable
-    template_name = 'funds/submissions_awaiting_review.html'
+    template_name = "funds/submissions_awaiting_review.html"
     paginator_class = LazyPaginator
-    table_pagination = {'per_page': 25}
+    table_pagination = {"per_page": 25}
 
     excluded_fields = settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS
 
     @property
     def excluded(self):
-        return {
-            'exclude': self.excluded_fields
-        }
+        return {"exclude": self.excluded_fields}
 
     def get_table_kwargs(self, **kwargs):
         return {**self.excluded, **kwargs}
 
     def get_queryset(self):
-        submissions = ApplicationSubmission.objects.in_review_for(self.request.user).order_by('-submit_time')
+        submissions = ApplicationSubmission.objects.in_review_for(
+            self.request.user
+        ).order_by("-submit_time")
         return submissions.for_table(self.request.user)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class SubmissionOverviewView(BaseAdminSubmissionsTable):
-    template_name = 'funds/submissions_overview.html'
+    template_name = "funds/submissions_overview.html"
     table_class = SummarySubmissionsTable
     table_pagination = False
-    filter_action = reverse_lazy('funds:submissions:list')
-    search_action = reverse_lazy('funds:submissions:list')
+    filter_action = reverse_lazy("funds:submissions:list")
+    search_action = reverse_lazy("funds:submissions:list")
 
     def get_table_data(self):
         limit = 5
-        return super().get_table_data().order_by(F('last_update').desc(nulls_last=True))[:limit]
+        return (
+            super()
+            .get_table_data()
+            .order_by(F("last_update").desc(nulls_last=True))[:limit]
+        )
 
     def get_context_data(self, **kwargs):
         limit = 6
-        base_query = RoundsAndLabs.objects.with_progress().active().order_by('-end_date')
+        base_query = (
+            RoundsAndLabs.objects.with_progress().active().order_by("-end_date")
+        )
+        can_export = can_export_submissions(self.request.user)
         open_rounds = base_query.open()[:limit]
-        open_query = '?round_state=open'
+        open_query = "?round_state=open"
         closed_rounds = base_query.closed()[:limit]
-        closed_query = '?round_state=closed'
-        rounds_title = 'All Rounds and Labs'
+        closed_query = "?round_state=closed"
+        rounds_title = "All Rounds and Labs"
 
         status_counts = dict(
-            ApplicationSubmission.objects.current().values('status').annotate(
-                count=Count('status'),
-            ).values_list('status', 'count')
+            ApplicationSubmission.objects.current()
+            .values("status")
+            .annotate(
+                count=Count("status"),
+            )
+            .values_list("status", "count")
         )
 
         grouped_statuses = {
             status: {
-                'name': data['name'],
-                'count': sum(status_counts.get(status, 0) for status in data['statuses']),
-                'url': reverse_lazy("funds:submissions:status", kwargs={'status': status})
+                "name": data["name"],
+                "count": sum(
+                    status_counts.get(status, 0) for status in data["statuses"]
+                ),
+                "url": reverse_lazy(
+                    "funds:submissions:status", kwargs={"status": status}
+                ),
             }
             for status, data in PHASES_MAPPING.items()
         }
@@ -432,6 +467,7 @@ class SubmissionOverviewView(BaseAdminSubmissionsTable):
         return super().get_context_data(
             open_rounds=open_rounds,
             open_query=open_query,
+            can_export=can_export,
             closed_rounds=closed_rounds,
             closed_query=closed_query,
             rounds_title=rounds_title,
@@ -441,18 +477,25 @@ class SubmissionOverviewView(BaseAdminSubmissionsTable):
         )
 
     def get_staff_flagged(self):
-        qs = super().get_queryset().flagged_staff().order_by('-submit_time')
-        row_attrs = dict({'data-flag-type': 'staff'}, **SummarySubmissionsTable._meta.row_attrs)
+        qs = super().get_queryset().flagged_staff().order_by("-submit_time")
+        row_attrs = dict(
+            {"data-flag-type": "staff"}, **SummarySubmissionsTable._meta.row_attrs
+        )
 
         limit = 5
         return {
-            'table': SummarySubmissionsTable(qs[:limit], prefix='staff-flagged-', attrs={'class': 'all-submissions-table flagged-table'}, row_attrs=row_attrs),
-            'display_more': qs.count() > limit,
+            "table": SummarySubmissionsTable(
+                qs[:limit],
+                prefix="staff-flagged-",
+                attrs={"class": "all-submissions-table flagged-table"},
+                row_attrs=row_attrs,
+            ),
+            "display_more": qs.count() > limit,
         }
 
 
 class SubmissionAdminListView(BaseAdminSubmissionsTable, DelegateableListView):
-    template_name = 'funds/submissions.html'
+    template_name = "funds/submissions.html"
     form_views = [
         BatchUpdateLeadView,
         BatchUpdateReviewersView,
@@ -463,17 +506,23 @@ class SubmissionAdminListView(BaseAdminSubmissionsTable, DelegateableListView):
 
     def get_filterset_kwargs(self, filterset_class, **kwargs):
         new_kwargs = super().get_filterset_kwargs(filterset_class)
-        archived_kwargs = {'archived': self.request.GET.get('archived', 0)}
+        archived_kwargs = {"archived": self.request.GET.get("archived", 0)}
         new_kwargs.update(archived_kwargs)
         new_kwargs.update(kwargs)
         return new_kwargs
 
     def get_queryset(self):
-        if self.request.GET.get('archived'):
+        if self.request.GET.get("archived"):
             # if archived is in param, let archived filter handle the queryset as per its value.
-            submissions = self.filterset_class._meta.model.objects.include_archive().for_table(self.request.user)
+            submissions = (
+                self.filterset_class._meta.model.objects.include_archive().for_table(
+                    self.request.user
+                )
+            )
         else:
-            submissions = self.filterset_class._meta.model.objects.current().for_table(self.request.user)
+            submissions = self.filterset_class._meta.model.objects.current().for_table(
+                self.request.user
+            )
 
         if not can_access_drafts(self.request.user):
             submissions = submissions.exclude_draft()
@@ -489,16 +538,17 @@ class SubmissionAdminListView(BaseAdminSubmissionsTable, DelegateableListView):
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class GroupingApplicationsListView(TemplateView):
-    '''
+    """
     Template view for grouped submissions
-    '''
-    template_name = 'funds/grouped_application_list.html'
+    """
+
+    template_name = "funds/grouped_application_list.html"
 
 
 class SubmissionReviewerListView(BaseReviewerSubmissionsTable):
-    template_name = 'funds/submissions.html'
+    template_name = "funds/submissions.html"
 
 
 class SubmissionListView(ViewDispatcher):
@@ -506,45 +556,55 @@ class SubmissionListView(ViewDispatcher):
     reviewer_view = SubmissionReviewerListView
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class SubmissionStaffFlaggedView(BaseAdminSubmissionsTable):
-    template_name = 'funds/submissions_staff_flagged.html'
+    template_name = "funds/submissions_staff_flagged.html"
 
     def get_queryset(self):
-        return self.filterset_class._meta.model.objects.current().for_table(self.request.user).flagged_staff().order_by('-submit_time')
+        return (
+            self.filterset_class._meta.model.objects.current()
+            .for_table(self.request.user)
+            .flagged_staff()
+            .order_by("-submit_time")
+        )
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class SubmissionUserFlaggedView(UserPassesTestMixin, BaseAdminSubmissionsTable):
-    template_name = 'funds/submissions_user_flagged.html'
+    template_name = "funds/submissions_user_flagged.html"
 
     def get_queryset(self):
-        return self.filterset_class._meta.model.objects.current().for_table(self.request.user).flagged_by(self.request.user).order_by('-submit_time')
+        return (
+            self.filterset_class._meta.model.objects.current()
+            .for_table(self.request.user)
+            .flagged_by(self.request.user)
+            .order_by("-submit_time")
+        )
 
     def test_func(self):
         return self.request.user.is_apply_staff or self.request.user.is_reviewer
 
-@method_decorator(staff_required, name='dispatch')
-class ExportSubmissionsByRound(BaseAdminSubmissionsTable):
 
+@method_decorator(login_required, name="dispatch")
+class ExportSubmissionsByRound(UserPassesTestMixin, BaseAdminSubmissionsTable):
     def export_submissions(self, round_id):
         csv_stream = StringIO()
         writer = csv.writer(csv_stream)
-        header_row,values = [],[]
+        header_row, values = [], []
         index = 0
         check = False
 
         for submission in ApplicationSubmission.objects.filter(round=round_id):
             for field_id in submission.question_text_field_ids:
                 question_field = submission.serialize(field_id)
-                field_name = question_field['question']
-                field_value = question_field['answer']
+                field_name = question_field["question"]
+                field_value = question_field["answer"]
                 if field_id not in submission.named_blocks:
                     header_row.append(field_name) if not check else header_row
                     values.append(field_value)
                 else:
-                    header_row.insert(index,field_name) if not check else header_row
-                    values.insert(index,field_value)
+                    header_row.insert(index, field_name) if not check else header_row
+                    values.insert(index, field_value)
                     index = index + 1
 
             if not check:
@@ -560,7 +620,7 @@ class ExportSubmissionsByRound(BaseAdminSubmissionsTable):
 
     def get_queryset(self):
         try:
-            self.obj = Page.objects.get(pk=self.kwargs.get('pk')).specific
+            self.obj = Page.objects.get(pk=self.kwargs.get("pk")).specific
         except Page.DoesNotExist as exc:
             raise Http404(_("No Round or Lab found matching the query")) from exc
 
@@ -572,12 +632,16 @@ class ExportSubmissionsByRound(BaseAdminSubmissionsTable):
         self.get_queryset()
         csv_data = self.export_submissions(pk)
         response = HttpResponse(csv_data.readlines(), content_type="text/csv")
-        response['Content-Disposition'] = 'inline; filename=' + str(self.obj) + '.csv'
+        response["Content-Disposition"] = "inline; filename=" + str(self.obj) + ".csv"
         return response
 
-@method_decorator(staff_required, name='dispatch')
+    def test_func(self):
+        return can_export_submissions(self.request.user)
+
+
+@method_decorator(staff_required, name="dispatch")
 class SubmissionsByRound(BaseAdminSubmissionsTable, DelegateableListView):
-    template_name = 'funds/submissions_by_round.html'
+    template_name = "funds/submissions_by_round.html"
     form_views = [
         BatchUpdateLeadView,
         BatchUpdateReviewersView,
@@ -586,17 +650,17 @@ class SubmissionsByRound(BaseAdminSubmissionsTable, DelegateableListView):
         BatchArchiveSubmissionView,
     ]
 
-    excluded_fields = ['round', 'fund'] + settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS
+    excluded_fields = ["round", "fund"] + settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['round'] = self.obj
+        kwargs["round"] = self.obj
         return kwargs
 
     def get_queryset(self):
         # We want to only show lab or Rounds in this view, their base class is Page
         try:
-            self.obj = Page.objects.get(pk=self.kwargs.get('pk')).specific
+            self.obj = Page.objects.get(pk=self.kwargs.get("pk")).specific
         except Page.DoesNotExist as e:
             raise Http404(_("No Round or Lab found matching the query")) from e
 
@@ -608,9 +672,9 @@ class SubmissionsByRound(BaseAdminSubmissionsTable, DelegateableListView):
         return super().get_context_data(object=self.obj, **kwargs)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class SubmissionsByStatus(BaseAdminSubmissionsTable, DelegateableListView):
-    template_name = 'funds/submissions_by_status.html'
+    template_name = "funds/submissions_by_status.html"
     status_mapping = PHASES_MAPPING
     form_views = [
         BatchUpdateLeadView,
@@ -621,17 +685,19 @@ class SubmissionsByStatus(BaseAdminSubmissionsTable, DelegateableListView):
     ]
 
     def dispatch(self, request, *args, **kwargs):
-        self.status = kwargs.get('status')
+        self.status = kwargs.get("status")
         try:
             status_data = self.status_mapping[self.status]
         except KeyError:
             raise Http404(_("No statuses match the requested value")) from None
-        self.status_name = status_data['name']
-        self.statuses = status_data['statuses']
+        self.status_name = status_data["name"]
+        self.statuses = status_data["statuses"]
         return super().dispatch(request, *args, **kwargs)
 
     def get_filterset_kwargs(self, filterset_class, **kwargs):
-        return super().get_filterset_kwargs(filterset_class, limit_statuses=self.statuses, **kwargs)
+        return super().get_filterset_kwargs(
+            filterset_class, limit_statuses=self.statuses, **kwargs
+        )
 
     def get_queryset(self):
         return super().get_queryset().filter(status__in=self.statuses)
@@ -644,24 +710,28 @@ class SubmissionsByStatus(BaseAdminSubmissionsTable, DelegateableListView):
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ProgressSubmissionView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = ProgressSubmissionForm
-    context_name = 'progress_form'
+    context_name = "progress_form"
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
         return super(ProgressSubmissionView, self).dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
-        action = form.cleaned_data.get('action')
+        action = form.cleaned_data.get("action")
         # Defer to the determination form for any of the determination transitions
-        redirect = DeterminationCreateOrUpdateView.should_redirect(self.request, self.object, action)
+        redirect = DeterminationCreateOrUpdateView.should_redirect(
+            self.request, self.object, action
+        )
         if redirect:
             return redirect
 
@@ -669,15 +739,17 @@ class ProgressSubmissionView(DelegatedViewMixin, UpdateView):
         return super().form_valid(form)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class CreateProjectView(DelegatedViewMixin, CreateView):
-    context_name = 'project_form'
+    context_name = "project_form"
     form_class = CreateProjectForm
     model = Project
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_parent_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
@@ -699,19 +771,21 @@ class CreateProjectView(DelegatedViewMixin, CreateView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context['action_message'] = _('Project Created!')
+        context["action_message"] = _("Project Created!")
         return context
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ScreeningSubmissionView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = ScreeningSubmissionForm
-    context_name = 'screening_form'
+    context_name = "screening_form"
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
@@ -726,16 +800,16 @@ class ScreeningSubmissionView(DelegatedViewMixin, UpdateView):
             request=self.request,
             user=self.request.user,
             source=self.object,
-            related=', '.join([s.title for s in old.screening_statuses.all()]),
+            related=", ".join([s.title for s in old.screening_statuses.all()]),
         )
         return response
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class UnarchiveSubmissionView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = UnarchiveSubmissionForm
-    context_name = 'unarchive_form'
+    context_name = "unarchive_form"
 
     def form_valid(self, form):
         response = super().form_valid(form)
@@ -744,7 +818,7 @@ class UnarchiveSubmissionView(DelegatedViewMixin, UpdateView):
             MESSAGES.UNARCHIVE_SUBMISSION,
             request=self.request,
             user=self.request.user,
-            source=self.object
+            source=self.object,
         )
         return response
 
@@ -752,11 +826,11 @@ class UnarchiveSubmissionView(DelegatedViewMixin, UpdateView):
         return self.object.get_absolute_url()
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ArchiveSubmissionView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = ArchiveSubmissionForm
-    context_name = 'archive_form'
+    context_name = "archive_form"
 
     def form_valid(self, form):
         response = super().form_valid(form)
@@ -774,15 +848,17 @@ class ArchiveSubmissionView(DelegatedViewMixin, UpdateView):
         return self.object.get_absolute_url()
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class UpdateLeadView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = UpdateSubmissionLeadForm
-    context_name = 'lead_form'
+    context_name = "lead_form"
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
@@ -802,25 +878,24 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView):
         return response
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class UpdateReviewersView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = UpdateReviewersForm
-    context_name = 'reviewer_form'
+    context_name = "reviewer_form"
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
         return super(UpdateReviewersView, self).dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
-        old_reviewers = {
-            copy(reviewer)
-            for reviewer in form.instance.assigned.all()
-        }
+        old_reviewers = {copy(reviewer) for reviewer in form.instance.assigned.all()}
         response = super().form_valid(form)
 
         new_reviewers = set(form.instance.assigned.all())
@@ -831,30 +906,30 @@ class UpdateReviewersView(DelegatedViewMixin, UpdateView):
             MESSAGES.REVIEWERS_UPDATED,
             request=self.request,
             user=self.request.user,
-            source=self.kwargs['object'],
+            source=self.kwargs["object"],
             added=added,
             removed=removed,
         )
 
         # Update submission status if needed.
         services.set_status_after_reviewers_assigned(
-            submission=form.instance,
-            updated_by=self.request.user,
-            request=self.request
+            submission=form.instance, updated_by=self.request.user, request=self.request
         )
 
         return response
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class UpdatePartnersView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = UpdatePartnersForm
-    context_name = 'partner_form'
+    context_name = "partner_form"
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
@@ -872,7 +947,7 @@ class UpdatePartnersView(DelegatedViewMixin, UpdateView):
             MESSAGES.PARTNERS_UPDATED,
             request=self.request,
             user=self.request.user,
-            source=self.kwargs['object'],
+            source=self.kwargs["object"],
             added=added,
             removed=removed,
         )
@@ -881,7 +956,7 @@ class UpdatePartnersView(DelegatedViewMixin, UpdateView):
             MESSAGES.PARTNERS_UPDATED_PARTNER,
             request=self.request,
             user=self.request.user,
-            source=self.kwargs['object'],
+            source=self.kwargs["object"],
             added=added,
             removed=removed,
         )
@@ -889,30 +964,34 @@ class UpdatePartnersView(DelegatedViewMixin, UpdateView):
         return response
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class UpdateMetaTermsView(DelegatedViewMixin, UpdateView):
     model = ApplicationSubmission
     form_class = UpdateMetaTermsForm
-    context_name = 'meta_terms_form'
+    context_name = "meta_terms_form"
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
         return super(UpdateMetaTermsView, self).dispatch(request, *args, **kwargs)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReminderCreateView(DelegatedViewMixin, CreateView):
-    context_name = 'reminder_form'
+    context_name = "reminder_form"
     form_class = CreateReminderForm
     model = Reminder
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_parent_object()
-        permission, reason = has_permission('submission_edit', request.user, object=submission, raise_exception=False)
+        permission, reason = has_permission(
+            "submission_edit", request.user, object=submission, raise_exception=False
+        )
         if not permission:
             messages.warning(self.request, reason)
             return HttpResponseRedirect(submission.get_absolute_url())
@@ -932,13 +1011,15 @@ class ReminderCreateView(DelegatedViewMixin, CreateView):
         return response
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReminderDeleteView(DeleteView):
     model = Reminder
 
     def get_success_url(self):
-        submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
-        return reverse_lazy('funds:submissions:detail', args=(submission.id,))
+        submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
+        return reverse_lazy("funds:submissions:detail", args=(submission.id,))
 
     def delete(self, request, *args, **kwargs):
         reminder = self.get_object()
@@ -954,7 +1035,7 @@ class ReminderDeleteView(DeleteView):
 
 
 class AdminSubmissionDetailView(ActivityContextMixin, DelegateableView, DetailView):
-    template_name_suffix = '_admin_detail'
+    template_name_suffix = "_admin_detail"
     model = ApplicationSubmission
     form_views = [
         ArchiveSubmissionView,
@@ -972,18 +1053,26 @@ class AdminSubmissionDetailView(ActivityContextMixin, DelegateableView, DetailVi
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        if submission.status == DRAFT_STATE and not submission.can_view_draft(request.user):
+        if submission.status == DRAFT_STATE and not submission.can_view_draft(
+            request.user
+        ):
             raise Http404
-        permission, _ = has_permission('submission_view', request.user, object=submission, raise_exception=True)
+        permission, _ = has_permission(
+            "submission_view", request.user, object=submission, raise_exception=True
+        )
         redirect = SubmissionSealedView.should_redirect(request, submission)
         return redirect or super().dispatch(request, *args, **kwargs)
 
     def get_context_data(self, **kwargs):
-        other_submissions = self.model.objects.filter(user=self.object.user).current().exclude(id=self.object.id)
+        other_submissions = (
+            self.model.objects.filter(user=self.object.user)
+            .current()
+            .exclude(id=self.object.id)
+        )
         if self.object.next:
             other_submissions = other_submissions.exclude(id=self.object.next.id)
 
-        public_page = self.object.get_from_parent('detail')()
+        public_page = self.object.get_from_parent("detail")()
         default_screening_statuses = get_default_screening_statues()
         return super().get_context_data(
             other_submissions=other_submissions,
@@ -994,7 +1083,7 @@ class AdminSubmissionDetailView(ActivityContextMixin, DelegateableView, DetailVi
 
 
 class ReviewerSubmissionDetailView(ActivityContextMixin, DelegateableView, DetailView):
-    template_name_suffix = '_reviewer_detail'
+    template_name_suffix = "_reviewer_detail"
     model = ApplicationSubmission
     form_views = [CommentFormView]
 
@@ -1007,7 +1096,9 @@ class ReviewerSubmissionDetailView(ActivityContextMixin, DelegateableView, Detai
         if submission.status == DRAFT_STATE:
             raise Http404
 
-        permission, _ = has_permission('submission_view', request.user, object=submission, raise_exception=True)
+        permission, _ = has_permission(
+            "submission_view", request.user, object=submission, raise_exception=True
+        )
 
         reviewer_settings = ReviewerSettings.for_request(request)
         if reviewer_settings.use_settings:
@@ -1030,7 +1121,9 @@ class PartnerSubmissionDetailView(ActivityContextMixin, DelegateableView, Detail
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, _ = has_permission('submission_view', request.user, object=submission, raise_exception=True)
+        permission, _ = has_permission(
+            "submission_view", request.user, object=submission, raise_exception=True
+        )
         # If the requesting user submitted the application, return the Applicant view.
         # Partners may sometimes be applicants as well.
         if submission.user == request.user:
@@ -1045,13 +1138,15 @@ class PartnerSubmissionDetailView(ActivityContextMixin, DelegateableView, Detail
 
 
 class CommunitySubmissionDetailView(ActivityContextMixin, DelegateableView, DetailView):
-    template_name_suffix = '_community_detail'
+    template_name_suffix = "_community_detail"
     model = ApplicationSubmission
     form_views = [CommentFormView]
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, _ = has_permission('submission_view', request.user, object=submission, raise_exception=True)
+        permission, _ = has_permission(
+            "submission_view", request.user, object=submission, raise_exception=True
+        )
         # If the requesting user submitted the application, return the Applicant view.
         # Reviewers may sometimes be applicants as well.
         if submission.user == request.user:
@@ -1073,7 +1168,9 @@ class ApplicantSubmissionDetailView(ActivityContextMixin, DelegateableView, Deta
 
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
-        permission, _ = has_permission('submission_view', request.user, object=submission, raise_exception=True)
+        permission, _ = has_permission(
+            "submission_view", request.user, object=submission, raise_exception=True
+        )
         # This view is only for applicants.
         if submission.user != request.user:
             raise PermissionDenied
@@ -1088,9 +1185,9 @@ class SubmissionDetailView(ViewDispatcher):
     applicant_view = ApplicantSubmissionDetailView
 
 
-@method_decorator(staff_required, 'dispatch')
+@method_decorator(staff_required, "dispatch")
 class SubmissionSealedView(DetailView):
-    template_name = 'funds/submission_sealed.html'
+    template_name = "funds/submission_sealed.html"
     model = ApplicationSubmission
 
     def get(self, request, *args, **kwargs):
@@ -1106,7 +1203,9 @@ class SubmissionSealedView(DetailView):
         return self.redirect_detail(submission)
 
     def redirect_detail(self, submission):
-        return HttpResponseRedirect(reverse_lazy('funds:submissions:detail', args=(submission.id,)))
+        return HttpResponseRedirect(
+            reverse_lazy("funds:submissions:detail", args=(submission.id,))
+        )
 
     def peeked(self, submission):
         messenger(
@@ -1115,7 +1214,7 @@ class SubmissionSealedView(DetailView):
             user=self.request.user,
             source=submission,
         )
-        self.request.session.setdefault('peeked', {})[str(submission.id)] = True
+        self.request.session.setdefault("peeked", {})[str(submission.id)] = True
         # Dictionary updates do not trigger session saves. Force update
         self.request.session.modified = True
 
@@ -1138,12 +1237,14 @@ class SubmissionSealedView(DetailView):
 
     @classmethod
     def has_peeked(cls, request, submission):
-        return str(submission.id) in request.session.get('peeked', {})
+        return str(submission.id) in request.session.get("peeked", {})
 
     @classmethod
     def should_redirect(cls, request, submission):
         if cls.round_is_sealed(submission) and not cls.has_peeked(request, submission):
-            return HttpResponseRedirect(reverse_lazy('funds:submissions:sealed', args=(submission.id,)))
+            return HttpResponseRedirect(
+                reverse_lazy("funds:submissions:sealed", args=(submission.id,))
+            )
 
 
 class BaseSubmissionEditView(UpdateView):
@@ -1151,28 +1252,34 @@ class BaseSubmissionEditView(UpdateView):
     Converts the data held on the submission into an editable format and knows how to save
     that back to the object. Shortcuts the normal update view save approach
     """
+
     model = ApplicationSubmission
 
     def dispatch(self, request, *args, **kwargs):
-        permission, _ = has_permission('submission_edit', request.user, object=self.get_object(), raise_exception=True)
+        permission, _ = has_permission(
+            "submission_edit",
+            request.user,
+            object=self.get_object(),
+            raise_exception=True,
+        )
         if not self.get_object().phase.permissions.can_edit(request.user):
             raise PermissionDenied
         return super().dispatch(request, *args, **kwargs)
 
     def buttons(self):
-        yield ('submit', 'primary', _('Submit'))
-        yield ('save', 'white', _('Save draft'))
+        yield ("submit", "primary", _("Submit"))
+        yield ("save", "white", _("Save draft"))
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        instance = kwargs.pop('instance').from_draft()
+        instance = kwargs.pop("instance").from_draft()
         initial = instance.raw_data
         for field_id in instance.file_field_ids:
-            initial.pop(field_id + '-uploads', False)
+            initial.pop(field_id + "-uploads", False)
             initial[field_id] = self.get_placeholder_file(
                 instance.raw_data.get(field_id)
             )
-        kwargs['initial'] = initial
+        kwargs["initial"] = initial
         return kwargs
 
     def get_placeholder_file(self, initial_file):
@@ -1189,26 +1296,30 @@ class BaseSubmissionEditView(UpdateView):
         return super().get_context_data(buttons=self.buttons(), **kwargs)
 
     def get_form_class(self):
-        draft = self.request.POST.get('save', False)
-        form_fields = self.object.get_form_fields(draft, self.object.raw_data, user=self.request.user)
+        draft = self.request.POST.get("save", False)
+        form_fields = self.object.get_form_fields(
+            draft, self.object.raw_data, user=self.request.user
+        )
         field_blocks = self.object.get_defined_fields()
         for field_block in field_blocks:
             if isinstance(field_block.block, GroupToggleBlock):
                 # Disable group toggle field as it is not supported on edit forms.
                 form_fields[field_block.id].disabled = True
-        return type('WagtailStreamForm', (self.object.submission_form_class,), form_fields)
+        return type(
+            "WagtailStreamForm", (self.object.submission_form_class,), form_fields
+        )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class AdminSubmissionEditView(BaseSubmissionEditView):
     def form_valid(self, form):
         self.object.new_data(form.cleaned_data)
 
-        if 'save' in self.request.POST:
+        if "save" in self.request.POST:
             self.object.create_revision(draft=True, by=self.request.user)
             return self.form_invalid(form)
 
-        if 'submit' in self.request.POST:
+        if "submit" in self.request.POST:
             revision = self.object.create_revision(by=self.request.user)
             if revision:
                 messenger(
@@ -1225,7 +1336,7 @@ class AdminSubmissionEditView(BaseSubmissionEditView):
         return HttpResponseRedirect(self.get_success_url())
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ApplicantSubmissionEditView(BaseSubmissionEditView):
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
@@ -1235,11 +1346,10 @@ class ApplicantSubmissionEditView(BaseSubmissionEditView):
 
     @property
     def transitions(self):
-        transitions = self.object.get_available_user_status_transitions(self.request.user)
-        return {
-            transition.name: transition
-            for transition in transitions
-        }
+        transitions = self.object.get_available_user_status_transitions(
+            self.request.user
+        )
+        return {transition.name: transition for transition in transitions}
 
     def get_object_fund_current_round(self):
         assigned_fund = self.object.round.get_parent().specific
@@ -1251,17 +1361,17 @@ class ApplicantSubmissionEditView(BaseSubmissionEditView):
         self.object.new_data(form.cleaned_data)
 
         # Update submit_time only when application is getting submitted from the Draft State for the first time.
-        if self.object.status == DRAFT_STATE and 'submit' in self.request.POST:
+        if self.object.status == DRAFT_STATE and "submit" in self.request.POST:
             self.object.submit_time = timezone.now()
             if self.object.round:
                 current_round = self.get_object_fund_current_round()
                 if current_round:
                     self.object.round = current_round
-            self.object.save(update_fields=['submit_time', 'round'])
+            self.object.save(update_fields=["submit_time", "round"])
 
-        if 'save' in self.request.POST:
+        if "save" in self.request.POST:
             self.object.create_revision(draft=True, by=self.request.user)
-            messages.success(self.request, _('Submission saved successfully'))
+            messages.success(self.request, _("Submission saved successfully"))
             return self.form_invalid(form)
 
         revision = self.object.create_revision(by=self.request.user)
@@ -1293,7 +1403,8 @@ class ApplicantSubmissionEditView(BaseSubmissionEditView):
                 transition.target,
                 self.request.user,
                 request=self.request,
-                notify=not (revision or submitting_proposal) or self.object.status == DRAFT_STATE,  # Use the other notification
+                notify=not (revision or submitting_proposal)
+                or self.object.status == DRAFT_STATE,  # Use the other notification
             )
 
         # Required for django-file-form: delete temporary files for the new files
@@ -1302,7 +1413,7 @@ class ApplicantSubmissionEditView(BaseSubmissionEditView):
         return HttpResponseRedirect(self.get_success_url())
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class PartnerSubmissionEditView(ApplicantSubmissionEditView):
     def dispatch(self, request, *args, **kwargs):
         submission = self.get_object()
@@ -1311,7 +1422,9 @@ class PartnerSubmissionEditView(ApplicantSubmissionEditView):
         partner_has_access = submission.partners.filter(pk=request.user.pk).exists()
         if not partner_has_access and submission.user != request.user:
             raise PermissionDenied
-        return super(ApplicantSubmissionEditView, self).dispatch(request, *args, **kwargs)
+        return super(ApplicantSubmissionEditView, self).dispatch(
+            request, *args, **kwargs
+        )
 
 
 class SubmissionEditView(ViewDispatcher):
@@ -1321,12 +1434,14 @@ class SubmissionEditView(ViewDispatcher):
     partner_view = PartnerSubmissionEditView
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class RevisionListView(ListView):
     model = ApplicationRevision
 
     def get_queryset(self):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
         self.queryset = self.model.objects.filter(
             submission=self.submission,
         ).exclude(
@@ -1342,11 +1457,11 @@ class RevisionListView(ListView):
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class RevisionCompareView(DetailView):
     model = ApplicationSubmission
-    template_name = 'funds/revisions_compare.html'
-    pk_url_kwarg = 'submission_pk'
+    template_name = "funds/revisions_compare.html"
+    pk_url_kwarg = "submission_pk"
 
     def compare_revisions(self, from_data, to_data):
         self.object.form_data = from_data.form_data
@@ -1358,27 +1473,30 @@ class RevisionCompareView(DetailView):
         to_required = self.render_required()
 
         required_fields = [
-            compare(*fields)
-            for fields in zip(from_required, to_required, strict=False)
+            compare(*fields) for fields in zip(from_required, to_required, strict=False)
         ]
 
         stream_fields = [
             compare(*fields)
-            for fields in zip(from_rendered_text_fields, to_rendered_text_fields, strict=False)
+            for fields in zip(
+                from_rendered_text_fields, to_rendered_text_fields, strict=False
+            )
         ]
 
         return (required_fields, stream_fields)
 
     def render_required(self):
         return [
-            getattr(self.object, 'get_{}_display'.format(field))()
+            getattr(self.object, "get_{}_display".format(field))()
             for field in self.object.named_blocks
         ]
 
     def get_context_data(self, **kwargs):
-        from_revision = self.object.revisions.get(id=self.kwargs['from'])
-        to_revision = self.object.revisions.get(id=self.kwargs['to'])
-        required_fields, stream_fields = self.compare_revisions(from_revision, to_revision)
+        from_revision = self.object.revisions.get(id=self.kwargs["from"])
+        to_revision = self.object.revisions.get(id=self.kwargs["to"])
+        required_fields, stream_fields = self.compare_revisions(
+            from_revision, to_revision
+        )
         timestamps = (from_revision.timestamp, to_revision.timestamp)
         return super().get_context_data(
             timestamps=timestamps,
@@ -1388,9 +1506,9 @@ class RevisionCompareView(DetailView):
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class RoundListView(SingleTableMixin, FilterView):
-    template_name = 'funds/rounds.html'
+    template_name = "funds/rounds.html"
     table_class = RoundsTable
     filterset_class = RoundsFilter
 
@@ -1398,10 +1516,13 @@ class RoundListView(SingleTableMixin, FilterView):
         return RoundsAndLabs.objects.with_progress()
 
 
-@method_decorator(permission_required('funds.delete_applicationsubmission', raise_exception=True), name='dispatch')
+@method_decorator(
+    permission_required("funds.delete_applicationsubmission", raise_exception=True),
+    name="dispatch",
+)
 class SubmissionDeleteView(DeleteView):
     model = ApplicationSubmission
-    success_url = reverse_lazy('funds:submissions:list')
+    success_url = reverse_lazy("funds:submissions:list")
 
     def delete(self, request, *args, **kwargs):
         submission = self.get_object()
@@ -1411,52 +1532,61 @@ class SubmissionDeleteView(DeleteView):
             request=request,
             source=submission,
         )
+        # delete NEW_SUBMISSION event for this particular submission
+        Event.objects.filter(
+            type=MESSAGES.NEW_SUBMISSION, object_id=submission.id
+        ).delete()
+        # delete submission
         response = super().delete(request, *args, **kwargs)
         return response
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class SubmissionPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        submission_pk = self.kwargs['pk']
+        submission_pk = self.kwargs["pk"]
         self.submission = get_object_or_404(ApplicationSubmission, pk=submission_pk)
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
-        field_id = kwargs['field_id']
-        file_name = kwargs['file_name']
-        path_to_file = generate_submission_file_path(self.submission.pk, field_id, file_name)
+        field_id = kwargs["field_id"]
+        file_name = kwargs["file_name"]
+        path_to_file = generate_submission_file_path(
+            self.submission.pk, field_id, file_name
+        )
         return self.storage.open(path_to_file)
 
     def test_func(self):
-        permission, _ = has_permission('submission_view', self.request.user, self.submission)
+        permission, _ = has_permission(
+            "submission_view", self.request.user, self.submission
+        )
         return permission
 
 
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_required, name="dispatch")
 class SubmissionDetailSimplifiedView(DetailView):
     model = ApplicationSubmission
-    template_name_suffix = '_simplified_detail'
+    template_name_suffix = "_simplified_detail"
 
     def get_object(self, queryset=None):
         obj = super().get_object(queryset)
 
-        if not hasattr(obj, 'project'):
+        if not hasattr(obj, "project"):
             raise Http404
 
         return obj
 
 
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_required, name="dispatch")
 class SubmissionDetailPDFView(SingleObjectMixin, View):
     model = ApplicationSubmission
 
     def get_object(self, queryset=None):
         obj = super().get_object(queryset)
 
-        if not hasattr(obj, 'project'):
+        if not hasattr(obj, "project"):
             raise Http404
 
         return obj
@@ -1464,16 +1594,14 @@ class SubmissionDetailPDFView(SingleObjectMixin, View):
     def get(self, request, *args, **kwargs):
         self.object = self.get_object()
         pdf_page_settings = PDFPageSettings.for_request(request)
-        content = draw_submission_content(
-            self.object.output_text_answers()
-        )
+        content = draw_submission_content(self.object.output_text_answers())
         pdf = make_pdf(
             title=self.object.title,
             sections=[
                 {
-                    'content': content,
-                    'title': 'Submission',
-                    'meta': [
+                    "content": content,
+                    "title": "Submission",
+                    "meta": [
                         self.object.stage,
                         self.object.page,
                         self.object.round,
@@ -1486,24 +1614,22 @@ class SubmissionDetailPDFView(SingleObjectMixin, View):
         return FileResponse(
             pdf,
             as_attachment=True,
-            filename=self.object.title + '.pdf',
+            filename=self.object.title + ".pdf",
         )
 
 
-@method_decorator(cache_page(60), name='dispatch')
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(cache_page(60), name="dispatch")
+@method_decorator(staff_required, name="dispatch")
 class SubmissionResultView(SubmissionStatsMixin, FilterView):
-    template_name = 'funds/submissions_result.html'
+    template_name = "funds/submissions_result.html"
     filterset_class = SubmissionFilterAndSearch
-    filter_action = ''
+    filter_action = ""
 
     excluded_fields = settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS
 
     @property
     def excluded(self):
-        return {
-            'exclude': self.excluded_fields
-        }
+        return {"exclude": self.excluded_fields}
 
     def get_filterset_kwargs(self, filterset_class, **kwargs):
         new_kwargs = super().get_filterset_kwargs(filterset_class)
@@ -1515,11 +1641,11 @@ class SubmissionResultView(SubmissionStatsMixin, FilterView):
         return self.filterset_class._meta.model.objects.current().exclude_draft()
 
     def get_context_data(self, **kwargs):
-        search_term = self.request.GET.get('query')
+        search_term = self.request.GET.get("query")
         submission_values = self.object_list.value()
-        count_values = submission_values.get('value__count')
-        total_value = intcomma(submission_values.get('value__sum'))
-        average_value = intcomma(round(submission_values.get('value__avg')))
+        count_values = submission_values.get("value__count")
+        total_value = intcomma(submission_values.get("value__sum"))
+        average_value = intcomma(round(submission_values.get("value__avg")))
 
         return super().get_context_data(
             search_term=search_term,
@@ -1531,16 +1657,16 @@ class SubmissionResultView(SubmissionStatsMixin, FilterView):
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReviewerLeaderboard(SingleTableMixin, FilterView):
     filterset_class = ReviewerLeaderboardFilter
-    filter_action = ''
+    filter_action = ""
     table_class = ReviewerLeaderboardTable
     table_pagination = False
-    template_name = 'funds/reviewer_leaderboard.html'
+    template_name = "funds/reviewer_leaderboard.html"
 
     def get_context_data(self, **kwargs):
-        search_term = self.request.GET.get('query')
+        search_term = self.request.GET.get("query")
 
         return super().get_context_data(
             search_term=search_term,
@@ -1556,43 +1682,65 @@ class ReviewerLeaderboard(SingleTableMixin, FilterView):
         ninety_days_ago = timezone.now() - timedelta(days=90)
         this_year = timezone.now().year
         last_year = timezone.now().year - 1
-        return super().get_table_data().annotate(
-            total=Count('assignedreviewers__review'),
-            ninety_days=Count('assignedreviewers__review', filter=Q(assignedreviewers__review__created_at__date__gte=ninety_days_ago)),
-            this_year=Count('assignedreviewers__review', filter=Q(assignedreviewers__review__created_at__year=this_year)),
-            last_year=Count('assignedreviewers__review', filter=Q(assignedreviewers__review__created_at__year=last_year)),
+        return (
+            super()
+            .get_table_data()
+            .annotate(
+                total=Count("assignedreviewers__review"),
+                ninety_days=Count(
+                    "assignedreviewers__review",
+                    filter=Q(
+                        assignedreviewers__review__created_at__date__gte=ninety_days_ago
+                    ),
+                ),
+                this_year=Count(
+                    "assignedreviewers__review",
+                    filter=Q(assignedreviewers__review__created_at__year=this_year),
+                ),
+                last_year=Count(
+                    "assignedreviewers__review",
+                    filter=Q(assignedreviewers__review__created_at__year=last_year),
+                ),
+            )
         )
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReviewerLeaderboardDetail(SingleTableMixin, ListView):
     model = Review
     table_class = ReviewerLeaderboardDetailTable
     paginator_class = LazyPaginator
-    table_pagination = {'per_page': 25}
-    template_name = 'funds/reviewer_leaderboard_detail.html'
+    table_pagination = {"per_page": 25}
+    template_name = "funds/reviewer_leaderboard_detail.html"
 
     def get_context_data(self, **kwargs):
-        obj = User.objects.get(pk=self.kwargs.get('pk'))
+        obj = User.objects.get(pk=self.kwargs.get("pk"))
         return super().get_context_data(object=obj, **kwargs)
 
     def get_table_data(self):
-        return super().get_table_data().filter(author__reviewer_id=self.kwargs.get('pk')).select_related('submission')
+        return (
+            super()
+            .get_table_data()
+            .filter(author__reviewer_id=self.kwargs.get("pk"))
+            .select_related("submission")
+        )
 
 
 class RoleColumn(tables.Column):
     def render(self, value, record):
         return AssignedReviewers.objects.filter(
-            reviewer=record, role=self.verbose_name, submission__status__in=active_statuses
+            reviewer=record,
+            role=self.verbose_name,
+            submission__status__in=active_statuses,
         ).count()
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class StaffAssignments(SingleTableMixin, ListView):
     model = User
     table_class = StaffAssignmentsTable
     table_pagination = False
-    template_name = 'funds/staff_assignments.html'
+    template_name = "funds/staff_assignments.html"
 
     def get_queryset(self):
         # Only list staff.
@@ -1600,19 +1748,19 @@ class StaffAssignments(SingleTableMixin, ListView):
 
     def get_table_data(self):
         table_data = super().get_table_data()
-        reviewer_roles = ReviewerRole.objects.all().order_by('order')
+        reviewer_roles = ReviewerRole.objects.all().order_by("order")
         for data in table_data:
             for i, _role in enumerate(reviewer_roles):
                 # Only setting column name with dummy value 0.
                 # Actual value will be set in RoleColumn render method.
-                setattr(data, f'role{i}', 0)
+                setattr(data, f"role{i}", 0)
         return table_data
 
     def get_table_kwargs(self):
-        reviewer_roles = ReviewerRole.objects.all().order_by('order')
+        reviewer_roles = ReviewerRole.objects.all().order_by("order")
         extra_columns = []
         for i, role in enumerate(reviewer_roles):
-            extra_columns.append((f'role{i}', RoleColumn(verbose_name=role)))
+            extra_columns.append((f"role{i}", RoleColumn(verbose_name=role)))
         return {
-            'extra_columns': extra_columns,
+            "extra_columns": extra_columns,
         }
diff --git a/hypha/apply/funds/views_beta.py b/hypha/apply/funds/views_beta.py
index 9b8ca5685c28cea1a6355ed93f28d4bed3b7da01..0f1cdb6475b3b3725a7f0c68c20b6f9a74bcc76a 100644
--- a/hypha/apply/funds/views_beta.py
+++ b/hypha/apply/funds/views_beta.py
@@ -5,6 +5,7 @@ from django.contrib import messages
 from django.contrib.auth import get_user_model
 from django.contrib.auth.decorators import login_required, user_passes_test
 from django.contrib.postgres.search import SearchQuery, SearchRank
+from django.core.exceptions import PermissionDenied
 from django.core.paginator import Paginator
 from django.db import models
 from django.http import HttpRequest, HttpResponse, HttpResponseForbidden
@@ -14,9 +15,10 @@ from django.views.decorators.http import require_http_methods
 from django_htmx.http import HttpResponseClientRedirect, HttpResponseClientRefresh
 from wagtail.models import Page
 
+from hypha.apply.activity.messaging import MESSAGES, messenger
 from hypha.apply.determinations.views import BatchDeterminationCreateView
 from hypha.apply.funds.models.screening import ScreeningStatus
-from hypha.apply.funds.workflow import PHASES, get_action_mapping
+from hypha.apply.funds.workflow import PHASES, get_action_mapping, review_statuses
 from hypha.apply.search.filters import apply_date_filter
 from hypha.apply.search.query_parser import parse_search_query
 from hypha.apply.users.decorators import is_apply_staff
@@ -36,42 +38,42 @@ User = get_user_model()
 def screening_decision_context(selected_screening_statuses: list) -> dict:
     screening_options = [
         {
-            'slug': 'null',
-            'title': _('No screening'),
-            'selected': 'null' in selected_screening_statuses,
+            "slug": "null",
+            "title": _("No screening"),
+            "selected": "null" in selected_screening_statuses,
         },
     ] + [
         {
-            'slug': str(item.id),
-            'title': item.title,
-            'selected': str(item.id) in selected_screening_statuses,
+            "slug": str(item.id),
+            "title": item.title,
+            "selected": str(item.id) in selected_screening_statuses,
         }
         for item in ScreeningStatus.objects.filter(
             id__in=ApplicationSubmission.objects.all()
-            .values('screening_statuses__id')
-            .distinct('screening_statuses__id')
+            .values("screening_statuses__id")
+            .distinct("screening_statuses__id")
         )
     ]
 
     selected_screening_statuses_objects = filter(
-        lambda x: x['selected'] is True, screening_options
+        lambda x: x["selected"] is True, screening_options
     )
     return {
-        'selected_screening_statuses_objects': selected_screening_statuses_objects,
-        'screening_options': screening_options,
+        "selected_screening_statuses_objects": selected_screening_statuses_objects,
+        "screening_options": screening_options,
     }
 
 
 @login_required
 @user_passes_test(is_apply_staff)
 def submission_all_beta(
-    request: HttpRequest, template_name='submissions/all.html'
+    request: HttpRequest, template_name="submissions/all.html"
 ) -> HttpResponse:
-    search_query = request.GET.get('query') or ""
+    search_query = request.GET.get("query") or ""
     parsed_query = parse_search_query(search_query)
-    search_term, search_filters = parsed_query['text'], parsed_query['filters']
+    search_term, search_filters = parsed_query["text"], parsed_query["filters"]
 
-    show_archived = request.GET.get("archived", False) == 'on'
+    show_archived = request.GET.get("archived", False) == "on"
     selected_funds = request.GET.getlist("fund")
     selected_rounds = request.GET.getlist("round")
     selected_leads = request.GET.getlist("lead")
@@ -109,38 +111,42 @@ def submission_all_beta(
         qs = qs.exclude_draft()
 
     if "submitted" in search_filters:
-        qs = apply_date_filter(qs=qs, field='submit_time', values=search_filters['submitted'])
+        qs = apply_date_filter(
+            qs=qs, field="submit_time", values=search_filters["submitted"]
+        )
 
     if "updated" in search_filters:
-        qs = apply_date_filter(qs=qs, field='last_update', values=search_filters['updated'])
+        qs = apply_date_filter(
+            qs=qs, field="last_update", values=search_filters["updated"]
+        )
 
     if "flagged" in search_filters:
-        if "@me" in search_filters['flagged']:
+        if "@me" in search_filters["flagged"]:
             qs = qs.flagged_by(request.user)
 
     if "lead" in search_filters:
-        if "@me" in search_filters['lead']:
+        if "@me" in search_filters["lead"]:
             qs = qs.filter(lead=request.user)
 
     if "reviewer" in search_filters:
-        if "@me" in search_filters['reviewer']:
+        if "@me" in search_filters["reviewer"]:
             qs = qs.filter(reviewers=request.user)
 
     if "id" in search_filters:
-        qs = qs.filter(id__in=search_filters['id'])
+        qs = qs.filter(id__in=search_filters["id"])
 
     if "is" in search_filters:
-        if "archived" in search_filters['is']:
+        if "archived" in search_filters["is"]:
             qs = qs.filter(is_archive=True)
 
     if search_term:
-        query = SearchQuery(search_term, search_type='websearch')
-        rank_annotation = SearchRank(models.F('search_document'), query)
+        query = SearchQuery(search_term, search_type="websearch")
+        rank_annotation = SearchRank(models.F("search_document"), query)
         qs = qs.filter(search_document=query)
         qs = qs.annotate(rank=rank_annotation)
 
     filter_extras = {
-        'exclude': settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS,
+        "exclude": settings.SUBMISSIONS_TABLE_EXCLUDED_FIELDS,
     }
 
     if selected_funds:
@@ -155,24 +161,24 @@ def submission_all_beta(
 
     # Status Filter Options
     STATUS_MAP = dict(PHASES)
-    for row in qs.order_by().values('status').annotate(n=models.Count('status')):
-        phase = STATUS_MAP[row['status']]
+    for row in qs.order_by().values("status").annotate(n=models.Count("status")):
+        phase = STATUS_MAP[row["status"]]
         display_name = phase.display_name
         try:
-            count = status_count_raw[display_name]['count']
+            count = status_count_raw[display_name]["count"]
         except KeyError:
             count = 0
         status_count_raw[display_name] = {
-            'count': count + row['n'],
-            'title': display_name,
-            'bg_color': phase.bg_color,
-            'slug': phase.display_slug,
-            'selected': phase.display_slug in selected_statuses,
+            "count": count + row["n"],
+            "title": display_name,
+            "bg_color": phase.bg_color,
+            "slug": phase.display_slug,
+            "selected": phase.display_slug in selected_statuses,
         }
 
     status_counts = sorted(
         status_count_raw.values(),
-        key=lambda t: (t['selected'], t['count']),
+        key=lambda t: (t["selected"], t["count"]),
         reverse=True,
     )
 
@@ -194,30 +200,30 @@ def submission_all_beta(
     )
 
     qs = filters.qs
-    qs = qs.prefetch_related('meta_terms')
+    qs = qs.prefetch_related("meta_terms")
 
     sort_options_raw = {
-        "submitted-desc": ("-submit_time", _('Newest')),
-        "submitted-asc": ("submit_time", _('Oldest')),
-        "comments-desc": ("-comment_count", _('Most Commented')),
-        "comments-asc": ("comment_count", _('Least Commented')),
-        "updated-desc": ("-last_update", _('Recently Updated')),
-        "updated-asc": ("last_update", _('Least Recently Updated')),
-        "relevance-desc": ("-rank", _('Best Match')),
+        "submitted-desc": ("-submit_time", _("Newest")),
+        "submitted-asc": ("submit_time", _("Oldest")),
+        "comments-desc": ("-comment_count", _("Most Commented")),
+        "comments-asc": ("comment_count", _("Least Commented")),
+        "updated-desc": ("-last_update", _("Recently Updated")),
+        "updated-asc": ("last_update", _("Least Recently Updated")),
+        "relevance-desc": ("-rank", _("Best Match")),
     }
 
     sort_options = [
-        {'name': v[1], 'param': k, 'selected': selected_sort == k}
+        {"name": v[1], "param": k, "selected": selected_sort == k}
         for k, v in sort_options_raw.items()
     ]
 
     if selected_sort and selected_sort in sort_options_raw.keys():
-        if not search_query and selected_sort == 'relevance-desc':
-            qs = qs.order_by('-submit_time')
+        if not search_query and selected_sort == "relevance-desc":
+            qs = qs.order_by("-submit_time")
         else:
             qs = qs.order_by(sort_options_raw[selected_sort][0])
     elif search_term:
-        qs = qs.order_by('-rank')
+        qs = qs.order_by("-rank")
     else:
         qs = qs.order_by("-submit_time")
 
@@ -226,31 +232,31 @@ def submission_all_beta(
     page = Paginator(qs, per_page=60, orphans=20).page(page)
 
     ctx = {
-        'base_template': base_template,
-        'search_query': search_query,
-        'filters': filters,
-        'page': page,
-        'submissions': page.object_list,
-        'submission_ids': [x.id for x in page.object_list],
-        'show_archived': show_archived,
-        'selected_funds': selected_funds,
-        'selected_fund_objects': selected_fund_objects,
-        'selected_rounds': selected_rounds,
-        'selected_round_objects': selected_round_objects,
-        'selected_leads': selected_leads,
-        'selected_applicants': selected_applicants,
-        'selected_reviewers': selected_reviewers,
-        'selected_meta_terms': selected_meta_terms,
-        'selected_category_options': selected_category_options,
-        'status_counts': status_counts,
-        'sort_options': sort_options,
-        'selected_sort': selected_sort,
-        'selected_statuses': selected_statuses,
-        'is_filtered': is_filtered,
-        'duration': end - start,
-        'can_view_archive': can_view_archives,
-        'can_bulk_archive': permissions.can_bulk_archive_submissions(request.user),
-        'can_bulk_delete': permissions.can_bulk_delete_submissions(request.user),
+        "base_template": base_template,
+        "search_query": search_query,
+        "filters": filters,
+        "page": page,
+        "submissions": page.object_list,
+        "submission_ids": [x.id for x in page.object_list],
+        "show_archived": show_archived,
+        "selected_funds": selected_funds,
+        "selected_fund_objects": selected_fund_objects,
+        "selected_rounds": selected_rounds,
+        "selected_round_objects": selected_round_objects,
+        "selected_leads": selected_leads,
+        "selected_applicants": selected_applicants,
+        "selected_reviewers": selected_reviewers,
+        "selected_meta_terms": selected_meta_terms,
+        "selected_category_options": selected_category_options,
+        "status_counts": status_counts,
+        "sort_options": sort_options,
+        "selected_sort": selected_sort,
+        "selected_statuses": selected_statuses,
+        "is_filtered": is_filtered,
+        "duration": end - start,
+        "can_view_archive": can_view_archives,
+        "can_bulk_archive": permissions.can_bulk_archive_submissions(request.user),
+        "can_bulk_delete": permissions.can_bulk_delete_submissions(request.user),
     } | screening_decision_context(selected_screening_statuses)
     return render(request, template_name, ctx)
 
@@ -296,17 +302,59 @@ def bulk_delete_submissions(request):
 @user_passes_test(is_apply_staff)
 @require_http_methods(["POST"])
 def bulk_update_submissions_status(request: HttpRequest) -> HttpResponse:
-    submission_ids = request.POST.getlist('selectedSubmissionIds')
-    action = request.GET.get('action')
-    transitions = get_action_mapping(workflow=None)[action]['transitions']
+    submission_ids = request.POST.getlist("selectedSubmissionIds")
+    action = request.POST.get("action")
 
-    qs = ApplicationSubmission.objects.filter(id__in=submission_ids)
+    transitions = get_action_mapping(workflow=None)[action]["transitions"]
 
-    redirect: HttpResponse = BatchDeterminationCreateView.should_redirect(request, qs, transitions)  # type: ignore
+    submissions = ApplicationSubmission.objects.filter(id__in=submission_ids)
+
+    redirect: HttpResponse = BatchDeterminationCreateView.should_redirect(request, submissions, transitions)  # type: ignore
     if redirect:
         return HttpResponseClientRedirect(redirect.url)
 
-    for submission in qs:
-        submission.perform_transition(action, request.user, request=request)
+    failed = []
+    phase_changes = {}
+    for submission in submissions:
+        valid_actions = {
+            action for action, _ in submission.get_actions_for_user(request.user)
+        }
+        old_phase = submission.phase
+        try:
+            transition = (valid_actions & set(transitions)).pop()
+            submission.perform_transition(
+                transition,
+                request.user,
+                request=request,
+                notify=False,
+            )
+        except (PermissionDenied, KeyError):
+            failed.append(submission)
+        else:
+            phase_changes[submission.id] = old_phase
+
+    if failed:
+        messages.warning(
+            request,
+            _("Failed to update: ")
+            + ", ".join(str(submission) for submission in failed),
+        )
+
+    if succeeded_submissions := submissions.exclude(id__in=(s.id for s in failed)):
+        messenger(
+            MESSAGES.BATCH_TRANSITION,
+            user=request.user,
+            request=request,
+            sources=succeeded_submissions,
+            related=phase_changes,
+        )
+
+    if ready_for_review := filter(lambda phase: phase in review_statuses, transitions):
+        messenger(
+            MESSAGES.BATCH_READY_FOR_REVIEW,
+            user=request.user,
+            request=request,
+            sources=succeeded_submissions.filter(status__in=ready_for_review),
+        )
 
     return HttpResponseClientRefresh()
diff --git a/hypha/apply/funds/views_partials.py b/hypha/apply/funds/views_partials.py
index 51ec8f14202d3f9df7933425d8caedff921ce73f..7dc9d4758cc3a321937e57968027e4646f55bd25 100644
--- a/hypha/apply/funds/views_partials.py
+++ b/hypha/apply/funds/views_partials.py
@@ -30,28 +30,28 @@ User = get_user_model()
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def sub_menu_funds(request):
     selected_funds = request.GET.getlist("fund")
 
     # Funds Filter Options
     funds = [
-        {'id': f.id, 'selected': str(f.id) in selected_funds, 'title': f.title}
+        {"id": f.id, "selected": str(f.id) in selected_funds, "title": f.title}
         for f in Page.objects.filter(applicationsubmission__isnull=False)
         .order_by("title")
         .distinct()
     ]
 
     ctx = {
-        'funds': funds,
-        'selected_funds': selected_funds,
+        "funds": funds,
+        "selected_funds": selected_funds,
     }
 
     return render(request, "submissions/submenu/funds.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def sub_menu_leads(
     request, template_name="submissions/submenu/leads.html"
 ) -> HttpResponse:
@@ -59,10 +59,10 @@ def sub_menu_leads(
 
     leads = [
         {
-            'id': item.id,
-            'selected': str(item.id) in selected_leads,
-            'title': str(item),
-            'slack': item.slack,
+            "id": item.id,
+            "selected": str(item.id) in selected_leads,
+            "title": str(item),
+            "slack": item.slack,
         }
         for item in User.objects.filter(submission_lead__isnull=False)
         .order_by()
@@ -72,20 +72,20 @@ def sub_menu_leads(
     # show selected and current user first
     leads = sorted(
         leads,
-        key=lambda x: (not x['selected'], x['id'] != request.user.id, x['title']),
+        key=lambda x: (not x["selected"], x["id"] != request.user.id, x["title"]),
         reverse=False,
     )
 
     ctx = {
-        'leads': leads,
-        'selected_leads': selected_leads,
+        "leads": leads,
+        "selected_leads": selected_leads,
     }
 
     return render(request, template_name, ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def sub_menu_rounds(request):
     selected_rounds = request.GET.getlist("round")
     selected_fund = request.GET.get("fund")
@@ -96,39 +96,39 @@ def sub_menu_rounds(request):
         qs = Round.objects.child_of(fund)
 
     open_rounds = [
-        {'id': item.id, 'selected': str(item.id) in selected_rounds, 'title': str(item)}
-        for item in qs.open().order_by('-end_date').distinct()
+        {"id": item.id, "selected": str(item.id) in selected_rounds, "title": str(item)}
+        for item in qs.open().order_by("-end_date").distinct()
     ]
 
     closed_rounds = [
-        {'id': item.id, 'selected': str(item.id) in selected_rounds, 'title': str(item)}
+        {"id": item.id, "selected": str(item.id) in selected_rounds, "title": str(item)}
         for item in qs.closed()
         .filter(submissions__isnull=False)
-        .order_by('-end_date')
+        .order_by("-end_date")
         .distinct()
     ]
 
     ctx = {
-        'open_rounds': open_rounds,
-        'closed_rounds': closed_rounds,
-        'selected_rounds': selected_rounds,
+        "open_rounds": open_rounds,
+        "closed_rounds": closed_rounds,
+        "selected_rounds": selected_rounds,
     }
 
     return render(request, "submissions/submenu/rounds.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def sub_menu_reviewers(request):
     selected_reviewers = request.GET.getlist("reviewers")
     qs = get_all_reviewers()
 
     reviewers = [
         {
-            'id': item.id,
-            'selected': str(item.id) in selected_reviewers,
-            'title': str(item),
-            'slack': item.slack,
+            "id": item.id,
+            "selected": str(item.id) in selected_reviewers,
+            "title": str(item),
+            "slack": item.slack,
         }
         for item in qs.order_by().distinct()
     ]
@@ -136,88 +136,88 @@ def sub_menu_reviewers(request):
     # show selected and current user first
     reviewers = sorted(
         reviewers,
-        key=lambda t: t['selected'] or t['id'] == request.user.id,
+        key=lambda t: t["selected"] or t["id"] == request.user.id,
         reverse=True,
     )
 
     ctx = {
-        'reviewers': reviewers,
-        'selected_reviewers': selected_reviewers,
+        "reviewers": reviewers,
+        "selected_reviewers": selected_reviewers,
     }
 
     return render(request, "submissions/submenu/reviewers.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def sub_menu_meta_terms(request):
     selected_meta_terms = request.GET.getlist("meta_terms")
 
     terms_qs = MetaTerm.objects.filter(
         filter_on_dashboard=True,
         id__in=ApplicationSubmission.objects.all()
-        .values('meta_terms__id')
-        .distinct('meta_terms__id'),
+        .values("meta_terms__id")
+        .distinct("meta_terms__id"),
     ).exclude(depth=1)
 
     meta_terms = [
         {
-            'id': item.id,
-            'selected': str(item.id) in selected_meta_terms,
-            'title': str(item),
-            'depth_range': range((item.depth - 2) * 2),
-            'depth': item.depth - 1,
+            "id": item.id,
+            "selected": str(item.id) in selected_meta_terms,
+            "title": str(item),
+            "depth_range": range((item.depth - 2) * 2),
+            "depth": item.depth - 1,
         }
         for item in terms_qs
     ]
 
     ctx = {
-        'meta_terms': meta_terms,
-        'selected_meta_terms': selected_meta_terms,
+        "meta_terms": meta_terms,
+        "selected_meta_terms": selected_meta_terms,
     }
 
     return render(request, "submissions/submenu/meta-terms.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def sub_menu_category_options(request):
     selected_category_options = request.GET.getlist("category_options")
 
-    qs = Option.objects.filter(category__filter_on_dashboard=True).values('id', 'value')
+    qs = Option.objects.filter(category__filter_on_dashboard=True).values("id", "value")
 
     items = [
         {
-            'id': item['id'],
-            'selected': str(item['id']) in selected_category_options,
-            'title': item['value'],
+            "id": item["id"],
+            "selected": str(item["id"]) in selected_category_options,
+            "title": item["value"],
         }
         for item in qs
     ]
 
-    items = sorted(items, key=lambda t: t['selected'], reverse=True)
+    items = sorted(items, key=lambda t: t["selected"], reverse=True)
 
     ctx = {
-        'category_options': items,
-        'selected_category_options': selected_category_options,
+        "category_options": items,
+        "selected_category_options": selected_category_options,
     }
 
     return render(request, "submissions/submenu/category.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def partial_submission_activities(request, pk):
     submission = get_object_or_404(ApplicationSubmission, pk=pk)
     has_permission(
-        'submission_view', request.user, object=submission, raise_exception=True
+        "submission_view", request.user, object=submission, raise_exception=True
     )
-    ctx = {'actions': get_related_actions_for_user(submission, request.user)}
-    return render(request, 'activity/include/action_list.html', ctx)
+    ctx = {"actions": get_related_actions_for_user(submission, request.user)}
+    return render(request, "activity/include/action_list.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def partial_reviews_card(request: HttpRequest, pk: str) -> HttpResponse:
     """Returns a partial html for the submission reviews box on the submission
     detail page and hovercard on the submissison list page.
@@ -240,19 +240,19 @@ def partial_reviews_card(request: HttpRequest, pk: str) -> HttpResponse:
     recommendation = submission.reviews.by_staff().recommendation()
 
     ctx = {
-        'hidden_types': [REVIEWER_GROUP_NAME],
-        'staff_reviewers_exist': assigned_reviewers.staff().exists(),
-        'assigned_reviewers': assigned_reviewers,
-        'recommendation': recommendation,
+        "hidden_types": [REVIEWER_GROUP_NAME],
+        "staff_reviewers_exist": assigned_reviewers.staff().exists(),
+        "assigned_reviewers": assigned_reviewers,
+        "recommendation": recommendation,
     }
 
     return render(request, "funds/includes/review_sidebar.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET'])
+@require_http_methods(["GET"])
 def partial_reviews_decisions(request: HttpRequest) -> HttpResponse:
-    submission_ids = request.GET.get('ids')
+    submission_ids = request.GET.get("ids")
     if submission_ids:
         submission_ids = [x for x in submission_ids.split(",") if x]
 
@@ -260,7 +260,7 @@ def partial_reviews_decisions(request: HttpRequest) -> HttpResponse:
     qs = annotate_review_recommendation_and_count(qs)
 
     ctx = {
-        'submissions': qs,
+        "submissions": qs,
     }
 
     return render(
@@ -269,9 +269,9 @@ def partial_reviews_decisions(request: HttpRequest) -> HttpResponse:
 
 
 @login_required
-@require_http_methods(['GET', 'POST'])
+@require_http_methods(["GET", "POST"])
 def sub_menu_update_status(request: HttpRequest) -> HttpResponse:
-    submission_ids = request.GET.getlist('selectedSubmissionIds')
+    submission_ids = request.GET.getlist("selectedSubmissionIds")
     qs = ApplicationSubmission.objects.filter(id__in=submission_ids)
 
     list_of_actions_list = [s.get_actions_for_user(request.user) for s in qs]
@@ -283,17 +283,17 @@ def sub_menu_update_status(request: HttpRequest) -> HttpResponse:
     )
 
     ctx = {
-        'statuses': {slugify(a): a for a in common_actions}.items(),
+        "statuses": {slugify(a): a for a in common_actions}.items(),
     }
 
     return render(request, "submissions/submenu/change-status.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET', 'POST'])
+@require_http_methods(["GET", "POST"])
 def sub_menu_bulk_update_lead(request: HttpRequest) -> HttpResponse:
-    if request.method == 'POST':
-        submission_ids = request.POST.getlist('selectedSubmissionIds')
+    if request.method == "POST":
+        submission_ids = request.POST.getlist("selectedSubmissionIds")
         lead = request.POST.get("lead")
 
         submissions = ApplicationSubmission.objects.filter(id__in=submission_ids)
@@ -306,9 +306,9 @@ def sub_menu_bulk_update_lead(request: HttpRequest) -> HttpResponse:
 
     leads = [
         {
-            'id': item.id,
-            'title': str(item),
-            'slack': item.slack,
+            "id": item.id,
+            "title": str(item),
+            "slack": item.slack,
         }
         for item in User.objects.staff()
     ]
@@ -316,29 +316,29 @@ def sub_menu_bulk_update_lead(request: HttpRequest) -> HttpResponse:
     # sort by lead names and put current user first
     leads = sorted(
         leads,
-        key=lambda x: (x['id'] != request.user.id, x['title']),
+        key=lambda x: (x["id"] != request.user.id, x["title"]),
         reverse=False,
     )
 
     ctx = {
-        'leads': leads,
+        "leads": leads,
     }
 
     return render(request, "submissions/submenu/bulk-update-lead.html", ctx)
 
 
 @login_required
-@require_http_methods(['GET', 'POST'])
+@require_http_methods(["GET", "POST"])
 def sub_menu_bulk_update_reviewers(request: HttpRequest) -> HttpResponse:
-    if request.method == 'POST':
-        submission_ids = request.POST.getlist('selectedSubmissionIds')
+    if request.method == "POST":
+        submission_ids = request.POST.getlist("selectedSubmissionIds")
         submissions = ApplicationSubmission.objects.filter(id__in=submission_ids)
         external_reviewers_ids = request.POST.getlist("external_reviewers")
         external_reviewers = User.objects.filter(id__in=external_reviewers_ids)
 
         assigned_roles = {}
         for field, value in request.POST.items():
-            if field.startswith('role_reviewer_'):
+            if field.startswith("role_reviewer_"):
                 if value:
                     role = ReviewerRole.objects.get(id=field[14:])
                     user = User.objects.staff().get(id=value)
@@ -354,7 +354,7 @@ def sub_menu_bulk_update_reviewers(request: HttpRequest) -> HttpResponse:
         )
         return HttpResponseClientRefresh()
 
-    submission_ids = request.GET.getlist('selectedSubmissionIds')
+    submission_ids = request.GET.getlist("selectedSubmissionIds")
     form = BatchUpdateReviewersForm(user=request.user)
 
     show_external_reviewers = False
@@ -366,8 +366,8 @@ def sub_menu_bulk_update_reviewers(request: HttpRequest) -> HttpResponse:
         )
 
     ctx = {
-        'form': form,
-        'show_external_reviewers': show_external_reviewers,
+        "form": form,
+        "show_external_reviewers": show_external_reviewers,
     }
 
     return render(request, "submissions/submenu/bulk-update-reviewers.html", ctx)
diff --git a/hypha/apply/funds/wagtail_hooks.py b/hypha/apply/funds/wagtail_hooks.py
index 31debfeb0464743bac8cff0f5dfc048c23ed5521..cc00b96d1674bff29c0dadb63613a749f2317def 100644
--- a/hypha/apply/funds/wagtail_hooks.py
+++ b/hypha/apply/funds/wagtail_hooks.py
@@ -9,25 +9,31 @@ from .models import RoundBase
 modeladmin_register(ApplyAdminGroup)
 
 
-@hooks.register('before_create_page')
+@hooks.register("before_create_page")
 def before_create_page(request, parent_page, page_class):
     if issubclass(page_class, RoundBase) and request.POST:
-        if not hasattr(page_class, 'parent_page'):
+        if not hasattr(page_class, "parent_page"):
             page_class.parent_page = {}
-        page_class.parent_page.setdefault(page_class, {})[request.POST['title']] = parent_page
+        page_class.parent_page.setdefault(page_class, {})[
+            request.POST["title"]
+        ] = parent_page
     return page_class
 
 
-@hooks.register('before_copy_page')
+@hooks.register("before_copy_page")
 def before_copy_round_page(request, page):
-    if isinstance(page.specific, RoundBase) and request.method == 'POST':
+    if isinstance(page.specific, RoundBase) and request.method == "POST":
         # Custom view to clear start_date and end_date from the copy being created.
         return custom_admin_round_copy_view(request, page)
 
 
-@hooks.register('register_permissions')
+@hooks.register("register_permissions")
 def register_permissions():
     return Permission.objects.filter(
-        content_type__app_label='funds',
-        codename__in=['add_applicationsubmission', 'change_applicationsubmission', 'delete_applicationsubmission']
+        content_type__app_label="funds",
+        codename__in=[
+            "add_applicationsubmission",
+            "change_applicationsubmission",
+            "delete_applicationsubmission",
+        ],
     )
diff --git a/hypha/apply/funds/widgets.py b/hypha/apply/funds/widgets.py
index 964deddaed9a30e9a8b42d7a2ddd39cbfb0dee20..6e0b1a916c756fd6bb90b8563f3ddad047b5d167 100644
--- a/hypha/apply/funds/widgets.py
+++ b/hypha/apply/funds/widgets.py
@@ -5,34 +5,37 @@ from django_select2.forms import Select2MultipleWidget
 class Select2MultiCheckboxesWidget(Select2MultipleWidget):
     class Media:
         js = (
-            static('js/select2.multi-checkboxes.js'),
-            static('js/django_select2-checkboxes.js'),
+            static("js/select2.multi-checkboxes.js"),
+            static("js/django_select2-checkboxes.js"),
         )
 
     def __init__(self, *args, **kwargs):
-        attrs = kwargs.get('attrs', {})
-        attrs.setdefault('data-placeholder', 'items')
-        kwargs['attrs'] = attrs
+        attrs = kwargs.get("attrs", {})
+        attrs.setdefault("data-placeholder", "items")
+        kwargs["attrs"] = attrs
         super().__init__(*args, **kwargs)
 
     def build_attrs(self, *args, **kwargs):
         attrs = super().build_attrs(*args, **kwargs)
-        attrs['class'] = attrs['class'].replace('django-select2', 'django-select2-checkboxes')
+        attrs["class"] = attrs["class"].replace(
+            "django-select2", "django-select2-checkboxes"
+        )
         return attrs
 
 
 class MetaTermSelect2Widget(Select2MultipleWidget):
-
-    def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
+    def create_option(
+        self, name, value, label, selected, index, subindex=None, attrs=None
+    ):
         disabled = False
 
         if isinstance(label, dict):
-            label, disabled = label.get('label'), label.get('disabled')
+            label, disabled = label.get("label"), label.get("disabled")
 
         option_dict = super().create_option(
             name, value, label, selected, index, subindex=subindex, attrs=attrs
         )
 
         if disabled:
-            option_dict['attrs']['disabled'] = 'disabled'
+            option_dict["attrs"]["disabled"] = "disabled"
         return option_dict
diff --git a/hypha/apply/funds/workflow.py b/hypha/apply/funds/workflow.py
index 9eaa707c6bfd54062b7da6bf89a5679558560b4e..1e0cd724af6f575259c72805cf45f97242c0a27d 100644
--- a/hypha/apply/funds/workflow.py
+++ b/hypha/apply/funds/workflow.py
@@ -19,19 +19,20 @@ hypha/apply/funds/views.py and hypha/apply/review/views.py.
 """
 
 PHASE_BG_COLORS = {
-    'Draft': 'bg-gray-200',
-    'Accepted': 'bg-green-200',
-    'Need screening': 'bg-cyan-200',
-    'Ready for Determination': 'bg-blue-200',
-    'Ready For Discussion': 'bg-blue-100',
-    'Invited for Proposal': 'bg-yellow-100',
-    'Internal Review': 'bg-yellow-200',
-    'External Review': 'bg-yellow-200',
-    'More information required': 'bg-rose-200',
-    'Accepted but additional info required': 'bg-rose-100',
-    'Dismissed': 'bg-red-200',
+    "Draft": "bg-gray-200",
+    "Accepted": "bg-green-200",
+    "Need screening": "bg-cyan-200",
+    "Ready for Determination": "bg-blue-200",
+    "Ready For Discussion": "bg-blue-100",
+    "Invited for Proposal": "bg-yellow-100",
+    "Internal Review": "bg-yellow-200",
+    "External Review": "bg-yellow-200",
+    "More information required": "bg-rose-200",
+    "Accepted but additional info required": "bg-rose-100",
+    "Dismissed": "bg-red-200",
 }
 
+
 class UserPermissions(Enum):
     STAFF = 1
     ADMIN = 2
@@ -66,7 +67,8 @@ class Workflow(dict):
     def phases_for(self, user=None):
         # Grab the first phase for each step - visible only, the display phase
         return [
-            phase for phase, *_ in self.stepped_phases.values()
+            phase
+            for phase, *_ in self.stepped_phases.values()
             if not user or phase.permissions.can_view(user)
         ]
 
@@ -75,7 +77,7 @@ class Workflow(dict):
         display_phase = self.stepped_phases[current.step][0]
         phases = self.phases_for()
         index = phases.index(display_phase)
-        for phase in phases[index - 1::-1]:
+        for phase in phases[index - 1 :: -1]:
             if phase.permissions.can_view(user):
                 return phase
 
@@ -88,7 +90,17 @@ class Phase:
     future_name = phase_name displayed to applicants if they haven't passed this stage
     """
 
-    def __init__(self, name, display, stage, permissions, step, public=None, future=None, transitions=None):
+    def __init__(
+        self,
+        name,
+        display,
+        stage,
+        permissions,
+        step,
+        public=None,
+        future=None,
+        transitions=None,
+    ):
         if transitions is None:
             transitions = {}
         self.name = name
@@ -99,7 +111,7 @@ class Phase:
 
         self.public_name = public or self.display_name
         self.future_name_staff = future or self.display_name
-        self.bg_color = PHASE_BG_COLORS.get(self.display_name, 'bg-gray-200')
+        self.bg_color = PHASE_BG_COLORS.get(self.display_name, "bg-gray-200")
         self.future_name_public = future or self.public_name
         self.stage = stage
         self.permissions = Permissions(permissions)
@@ -108,27 +120,33 @@ class Phase:
         # For building transition methods on the parent
         self.transitions = {}
 
-        default_permissions = {UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN}
+        default_permissions = {
+            UserPermissions.STAFF,
+            UserPermissions.LEAD,
+            UserPermissions.ADMIN,
+        }
 
         for transition_target, action in transitions.items():
             transition = {}
             try:
-                transition['display'] = action.get('display')
+                transition["display"] = action.get("display")
             except AttributeError:
-                transition['display'] = action
-                transition['permissions'] = default_permissions
+                transition["display"] = action
+                transition["permissions"] = default_permissions
             else:
-                transition['method'] = action.get('method')
-                conditions = action.get('conditions', '')
-                transition['conditions'] = conditions.split(',') if conditions else []
-                transition['permissions'] = action.get('permissions', default_permissions)
+                transition["method"] = action.get("method")
+                conditions = action.get("conditions", "")
+                transition["conditions"] = conditions.split(",") if conditions else []
+                transition["permissions"] = action.get(
+                    "permissions", default_permissions
+                )
             self.transitions[transition_target] = transition
 
     def __str__(self):
         return self.display_name
 
     def __repr__(self):
-        return f'<Phase: {self.display_name} ({self.public_name})>'
+        return f"<Phase: {self.display_name} ({self.public_name})>"
 
 
 class Stage:
@@ -140,7 +158,7 @@ class Stage:
         return self.name
 
     def __repr__(self):
-        return f'<Stage: {self.name}>'
+        return f"<Stage: {self.name}>"
 
 
 class Permissions:
@@ -152,13 +170,13 @@ class Permissions:
         return any(check(user) for check in checks)
 
     def can_edit(self, user):
-        return self.can_do(user, 'edit')
+        return self.can_do(user, "edit")
 
     def can_review(self, user):
-        return self.can_do(user, 'review')
+        return self.can_do(user, "review")
 
     def can_view(self, user):
-        return self.can_do(user, 'view')
+        return self.can_do(user, "view")
 
 
 staff_can = lambda user: user.is_apply_staff  # NOQA
@@ -174,9 +192,15 @@ community_can = lambda user: user.is_community_reviewer  # NOQA
 
 def make_permissions(edit=None, review=None, view=None):
     return {
-        'edit': edit or [],
-        'review': review or [],
-        'view': view or [staff_can, applicant_can, reviewer_can, partner_can, ],
+        "edit": edit or [],
+        "review": review or [],
+        "view": view
+        or [
+            staff_can,
+            applicant_can,
+            reviewer_can,
+            partner_can,
+        ],
     }
 
 
@@ -184,154 +208,174 @@ no_permissions = make_permissions()
 
 default_permissions = make_permissions(edit=[staff_can], review=[staff_can])
 
-hidden_from_applicant_permissions = make_permissions(edit=[staff_can], review=[staff_can], view=[staff_can, reviewer_can])
+hidden_from_applicant_permissions = make_permissions(
+    edit=[staff_can], review=[staff_can], view=[staff_can, reviewer_can]
+)
 
-reviewer_review_permissions = make_permissions(edit=[staff_can], review=[staff_can, reviewer_can])
+reviewer_review_permissions = make_permissions(
+    edit=[staff_can], review=[staff_can, reviewer_can]
+)
 
-community_review_permissions = make_permissions(edit=[staff_can], review=[staff_can, reviewer_can, community_can])
+community_review_permissions = make_permissions(
+    edit=[staff_can], review=[staff_can, reviewer_can, community_can]
+)
 
-applicant_edit_permissions = make_permissions(edit=[applicant_can, partner_can], review=[staff_can])
+applicant_edit_permissions = make_permissions(
+    edit=[applicant_can, partner_can], review=[staff_can]
+)
 
 staff_edit_permissions = make_permissions(edit=[staff_can])
 
 
-Request = Stage('Request', False)
+Request = Stage("Request", False)
 
-RequestExt = Stage('RequestExt', True)
+RequestExt = Stage("RequestExt", True)
 
-RequestCom = Stage('RequestCom', True)
+RequestCom = Stage("RequestCom", True)
 
-Concept = Stage('Concept', False)
+Concept = Stage("Concept", False)
 
-Proposal = Stage('Proposal', True)
+Proposal = Stage("Proposal", True)
 
-DRAFT_STATE = 'draft'
+DRAFT_STATE = "draft"
 
-INITIAL_STATE = 'in_discussion'
+INITIAL_STATE = "in_discussion"
 
 SingleStageDefinition = [
     {
         DRAFT_STATE: {
-            'transitions': {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {UserPermissions.APPLICANT},
+                    "method": "create_revision",
                 },
             },
-            'display': _('Draft'),
-            'stage': Request,
-            'permissions': applicant_edit_permissions,
+            "display": _("Draft"),
+            "stage": Request,
+            "permissions": applicant_edit_permissions,
         }
     },
     {
         INITIAL_STATE: {
-            'transitions': {
-                'more_info': _('Request More Information'),
-                'internal_review': _('Open Review'),
-                'determination': _('Ready For Determination'),
-                'almost': _('Accept but additional info required'),
-                'accepted': _('Accept'),
-                'rejected': _('Dismiss'),
+            "transitions": {
+                "more_info": _("Request More Information"),
+                "internal_review": _("Open Review"),
+                "determination": _("Ready For Determination"),
+                "almost": _("Accept but additional info required"),
+                "accepted": _("Accept"),
+                "rejected": _("Dismiss"),
             },
-            'display': _('Need screening'),
-            'public': _('Application Received'),
-            'stage': Request,
-            'permissions': default_permissions,
+            "display": _("Need screening"),
+            "public": _("Application Received"),
+            "stage": Request,
+            "permissions": default_permissions,
         },
-        'more_info': {
-            'transitions': {
+        "more_info": {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
-                'determination': _('Ready For Determination'),
-                'almost': _('Accept but additional info required'),
-                'accepted': _('Accept'),
-                'rejected': _('Dismiss'),
+                "determination": _("Ready For Determination"),
+                "almost": _("Accept but additional info required"),
+                "accepted": _("Accept"),
+                "rejected": _("Dismiss"),
             },
-            'display': _('More information required'),
-            'stage': Request,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Request,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'internal_review': {
-            'transitions': {
-                'post_review_discussion': _('Close Review'),
-                INITIAL_STATE: _('Need screening (revert)'),
+        "internal_review": {
+            "transitions": {
+                "post_review_discussion": _("Close Review"),
+                INITIAL_STATE: _("Need screening (revert)"),
             },
-            'display': _('Internal Review'),
-            'public': _('{org_short_name} Review').format(org_short_name=settings.ORG_SHORT_NAME),
-            'stage': Request,
-            'permissions': default_permissions,
+            "display": _("Internal Review"),
+            "public": _("{org_short_name} Review").format(
+                org_short_name=settings.ORG_SHORT_NAME
+            ),
+            "stage": Request,
+            "permissions": default_permissions,
         },
     },
     {
-        'post_review_discussion': {
-            'transitions': {
-                'post_review_more_info': _('Request More Information'),
-                'determination': _('Ready For Determination'),
-                'internal_review': _('Open Review (revert)'),
-                'almost': _('Accept but additional info required'),
-                'accepted': _('Accept'),
-                'rejected': _('Dismiss'),
+        "post_review_discussion": {
+            "transitions": {
+                "post_review_more_info": _("Request More Information"),
+                "determination": _("Ready For Determination"),
+                "internal_review": _("Open Review (revert)"),
+                "almost": _("Accept but additional info required"),
+                "accepted": _("Accept"),
+                "rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': Request,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": Request,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'post_review_more_info': {
-            'transitions': {
-                'post_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "post_review_more_info": {
+            "transitions": {
+                "post_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
-                'determination': _('Ready For Determination'),
-                'almost': _('Accept but additional info required'),
-                'accepted': _('Accept'),
-                'rejected': _('Dismiss'),
+                "determination": _("Ready For Determination"),
+                "almost": _("Accept but additional info required"),
+                "accepted": _("Accept"),
+                "rejected": _("Dismiss"),
             },
-            'display': _('More information required'),
-            'stage': Request,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Request,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'determination': {
-            'transitions': {
-                'post_review_discussion': _('Ready For Discussion (revert)'),
-                'almost': _('Accept but additional info required'),
-                'accepted': _('Accept'),
-                'rejected': _('Dismiss'),
+        "determination": {
+            "transitions": {
+                "post_review_discussion": _("Ready For Discussion (revert)"),
+                "almost": _("Accept but additional info required"),
+                "accepted": _("Accept"),
+                "rejected": _("Dismiss"),
             },
-            'display': _('Ready for Determination'),
-            'permissions': hidden_from_applicant_permissions,
-            'stage': Request,
+            "display": _("Ready for Determination"),
+            "permissions": hidden_from_applicant_permissions,
+            "stage": Request,
         },
     },
     {
-        'accepted': {
-            'display': _('Accepted'),
-            'future': _('Application Outcome'),
-            'stage': Request,
-            'permissions': staff_edit_permissions,
+        "accepted": {
+            "display": _("Accepted"),
+            "future": _("Application Outcome"),
+            "stage": Request,
+            "permissions": staff_edit_permissions,
         },
-        'almost': {
-            'transitions': {
-                'accepted': _('Accept'),
-                'post_review_discussion': _('Ready For Discussion (revert)'),
+        "almost": {
+            "transitions": {
+                "accepted": _("Accept"),
+                "post_review_discussion": _("Ready For Discussion (revert)"),
             },
-            'display': _('Accepted but additional info required'),
-            'stage': Request,
-            'permissions': applicant_edit_permissions,
+            "display": _("Accepted but additional info required"),
+            "stage": Request,
+            "permissions": applicant_edit_permissions,
         },
-        'rejected': {
-            'display': _('Dismissed'),
-            'stage': Request,
-            'permissions': no_permissions,
+        "rejected": {
+            "display": _("Dismissed"),
+            "stage": Request,
+            "permissions": no_permissions,
         },
     },
 ]
@@ -339,153 +383,174 @@ SingleStageDefinition = [
 SingleStageExternalDefinition = [
     {
         DRAFT_STATE: {
-            'transitions': {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {UserPermissions.APPLICANT},
+                    "method": "create_revision",
                 },
             },
-            'display': _('Draft'),
-            'stage': RequestExt,
-            'permissions': applicant_edit_permissions,
+            "display": _("Draft"),
+            "stage": RequestExt,
+            "permissions": applicant_edit_permissions,
         }
     },
     {
         INITIAL_STATE: {
-            'transitions': {
-                'ext_more_info': _('Request More Information'),
-                'ext_internal_review': _('Open Review'),
-                'ext_determination': _('Ready For Determination'),
-                'ext_rejected': _('Dismiss'),
+            "transitions": {
+                "ext_more_info": _("Request More Information"),
+                "ext_internal_review": _("Open Review"),
+                "ext_determination": _("Ready For Determination"),
+                "ext_rejected": _("Dismiss"),
             },
-            'display': _('Need screening'),
-            'public': _('Application Received'),
-            'stage': RequestExt,
-            'permissions': default_permissions,
+            "display": _("Need screening"),
+            "public": _("Application Received"),
+            "stage": RequestExt,
+            "permissions": default_permissions,
         },
-        'ext_more_info': {
-            'transitions': {
+        "ext_more_info": {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': RequestExt,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": RequestExt,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'ext_internal_review': {
-            'transitions': {
-                'ext_post_review_discussion': _('Close Review'),
-                INITIAL_STATE: _('Need screening (revert)'),
+        "ext_internal_review": {
+            "transitions": {
+                "ext_post_review_discussion": _("Close Review"),
+                INITIAL_STATE: _("Need screening (revert)"),
             },
-            'display': _('Internal Review'),
-            'public': _('{org_short_name} Review').format(org_short_name=settings.ORG_SHORT_NAME),
-            'stage': RequestExt,
-            'permissions': default_permissions,
+            "display": _("Internal Review"),
+            "public": _("{org_short_name} Review").format(
+                org_short_name=settings.ORG_SHORT_NAME
+            ),
+            "stage": RequestExt,
+            "permissions": default_permissions,
         },
     },
     {
-        'ext_post_review_discussion': {
-            'transitions': {
-                'ext_post_review_more_info': _('Request More Information'),
-                'ext_external_review': _('Open External Review'),
-                'ext_determination': _('Ready For Determination'),
-                'ext_internal_review': _('Open Internal Review (revert)'),
-                'ext_rejected': _('Dismiss'),
+        "ext_post_review_discussion": {
+            "transitions": {
+                "ext_post_review_more_info": _("Request More Information"),
+                "ext_external_review": _("Open External Review"),
+                "ext_determination": _("Ready For Determination"),
+                "ext_internal_review": _("Open Internal Review (revert)"),
+                "ext_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': RequestExt,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": RequestExt,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'ext_post_review_more_info': {
-            'transitions': {
-                'ext_post_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "ext_post_review_more_info": {
+            "transitions": {
+                "ext_post_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': RequestExt,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": RequestExt,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'ext_external_review': {
-            'transitions': {
-                'ext_post_external_review_discussion': _('Close Review'),
-                'ext_post_review_discussion': _('Ready For Discussion (revert)'),
+        "ext_external_review": {
+            "transitions": {
+                "ext_post_external_review_discussion": _("Close Review"),
+                "ext_post_review_discussion": _("Ready For Discussion (revert)"),
             },
-            'display': _('External Review'),
-            'stage': RequestExt,
-            'permissions': reviewer_review_permissions,
+            "display": _("External Review"),
+            "stage": RequestExt,
+            "permissions": reviewer_review_permissions,
         },
     },
     {
-        'ext_post_external_review_discussion': {
-            'transitions': {
-                'ext_post_external_review_more_info': _('Request More Information'),
-                'ext_determination': _('Ready For Determination'),
-                'ext_external_review': _('Open External Review (revert)'),
-                'ext_almost': _('Accept but additional info required'),
-                'ext_accepted': _('Accept'),
-                'ext_rejected': _('Dismiss'),
+        "ext_post_external_review_discussion": {
+            "transitions": {
+                "ext_post_external_review_more_info": _("Request More Information"),
+                "ext_determination": _("Ready For Determination"),
+                "ext_external_review": _("Open External Review (revert)"),
+                "ext_almost": _("Accept but additional info required"),
+                "ext_accepted": _("Accept"),
+                "ext_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': RequestExt,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": RequestExt,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'ext_post_external_review_more_info': {
-            'transitions': {
-                'ext_post_external_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "ext_post_external_review_more_info": {
+            "transitions": {
+                "ext_post_external_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': RequestExt,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": RequestExt,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'ext_determination': {
-            'transitions': {
-                'ext_post_external_review_discussion': _('Ready For Discussion (revert)'),
-                'ext_almost': _('Accept but additional info required'),
-                'ext_accepted': _('Accept'),
-                'ext_rejected': _('Dismiss'),
+        "ext_determination": {
+            "transitions": {
+                "ext_post_external_review_discussion": _(
+                    "Ready For Discussion (revert)"
+                ),
+                "ext_almost": _("Accept but additional info required"),
+                "ext_accepted": _("Accept"),
+                "ext_rejected": _("Dismiss"),
             },
-            'display': _('Ready for Determination'),
-            'permissions': hidden_from_applicant_permissions,
-            'stage': RequestExt,
+            "display": _("Ready for Determination"),
+            "permissions": hidden_from_applicant_permissions,
+            "stage": RequestExt,
         },
     },
     {
-        'ext_accepted': {
-            'display': _('Accepted'),
-            'future': _('Application Outcome'),
-            'stage': RequestExt,
-            'permissions': staff_edit_permissions,
+        "ext_accepted": {
+            "display": _("Accepted"),
+            "future": _("Application Outcome"),
+            "stage": RequestExt,
+            "permissions": staff_edit_permissions,
         },
-        'ext_almost': {
-            'transitions': {
-                'ext_accepted': _('Accept'),
-                'ext_post_external_review_discussion': _('Ready For Discussion (revert)'),
+        "ext_almost": {
+            "transitions": {
+                "ext_accepted": _("Accept"),
+                "ext_post_external_review_discussion": _(
+                    "Ready For Discussion (revert)"
+                ),
             },
-            'display': _('Accepted but additional info required'),
-            'stage': RequestExt,
-            'permissions': applicant_edit_permissions,
+            "display": _("Accepted but additional info required"),
+            "stage": RequestExt,
+            "permissions": applicant_edit_permissions,
         },
-        'ext_rejected': {
-            'display': _('Dismissed'),
-            'stage': RequestExt,
-            'permissions': no_permissions,
+        "ext_rejected": {
+            "display": _("Dismissed"),
+            "stage": RequestExt,
+            "permissions": no_permissions,
         },
     },
 ]
@@ -494,177 +559,200 @@ SingleStageExternalDefinition = [
 SingleStageCommunityDefinition = [
     {
         DRAFT_STATE: {
-            'transitions': {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {UserPermissions.APPLICANT},
+                    "method": "create_revision",
                 },
             },
-            'display': _('Draft'),
-            'stage': RequestCom,
-            'permissions': applicant_edit_permissions,
+            "display": _("Draft"),
+            "stage": RequestCom,
+            "permissions": applicant_edit_permissions,
         }
     },
     {
         INITIAL_STATE: {
-            'transitions': {
-                'com_more_info': _('Request More Information'),
-                'com_open_call': 'Open Call (public)',
-                'com_internal_review': _('Open Review'),
-                'com_community_review': _('Open Community Review'),
-                'com_determination': _('Ready For Determination'),
-                'com_rejected': _('Dismiss'),
+            "transitions": {
+                "com_more_info": _("Request More Information"),
+                "com_open_call": "Open Call (public)",
+                "com_internal_review": _("Open Review"),
+                "com_community_review": _("Open Community Review"),
+                "com_determination": _("Ready For Determination"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': _('Need screening'),
-            'public': _('Application Received'),
-            'stage': RequestCom,
-            'permissions': default_permissions,
+            "display": _("Need screening"),
+            "public": _("Application Received"),
+            "stage": RequestCom,
+            "permissions": default_permissions,
         },
-        'com_more_info': {
-            'transitions': {
+        "com_more_info": {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': RequestCom,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": RequestCom,
+            "permissions": applicant_edit_permissions,
         },
-        'com_open_call': {
-            'transitions': {
-                INITIAL_STATE: _('Need screening (revert)'),
-                'com_rejected': _('Dismiss'),
+        "com_open_call": {
+            "transitions": {
+                INITIAL_STATE: _("Need screening (revert)"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': 'Open Call (public)',
-            'stage': RequestCom,
-            'permissions': staff_edit_permissions,
+            "display": "Open Call (public)",
+            "stage": RequestCom,
+            "permissions": staff_edit_permissions,
         },
     },
     {
-        'com_internal_review': {
-            'transitions': {
-                'com_community_review': _('Open Community Review'),
-                'com_post_review_discussion': _('Close Review'),
-                INITIAL_STATE: _('Need screening (revert)'),
-                'com_rejected': _('Dismiss'),
+        "com_internal_review": {
+            "transitions": {
+                "com_community_review": _("Open Community Review"),
+                "com_post_review_discussion": _("Close Review"),
+                INITIAL_STATE: _("Need screening (revert)"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': _('Internal Review'),
-            'public': _('{org_short_name} Review').format(org_short_name=settings.ORG_SHORT_NAME),
-            'stage': RequestCom,
-            'permissions': default_permissions,
+            "display": _("Internal Review"),
+            "public": _("{org_short_name} Review").format(
+                org_short_name=settings.ORG_SHORT_NAME
+            ),
+            "stage": RequestCom,
+            "permissions": default_permissions,
         },
-        'com_community_review': {
-            'transitions': {
-                'com_post_review_discussion': _('Close Review'),
-                'com_internal_review': _('Open Internal Review (revert)'),
-                'com_rejected': _('Dismiss'),
+        "com_community_review": {
+            "transitions": {
+                "com_post_review_discussion": _("Close Review"),
+                "com_internal_review": _("Open Internal Review (revert)"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': _('Community Review'),
-            'public': _('{org_short_name} Review').format(org_short_name=settings.ORG_SHORT_NAME),
-            'stage': RequestCom,
-            'permissions': community_review_permissions,
+            "display": _("Community Review"),
+            "public": _("{org_short_name} Review").format(
+                org_short_name=settings.ORG_SHORT_NAME
+            ),
+            "stage": RequestCom,
+            "permissions": community_review_permissions,
         },
     },
     {
-        'com_post_review_discussion': {
-            'transitions': {
-                'com_post_review_more_info': _('Request More Information'),
-                'com_external_review': _('Open External Review'),
-                'com_determination': _('Ready For Determination'),
-                'com_internal_review': _('Open Internal Review (revert)'),
-                'com_rejected': _('Dismiss'),
+        "com_post_review_discussion": {
+            "transitions": {
+                "com_post_review_more_info": _("Request More Information"),
+                "com_external_review": _("Open External Review"),
+                "com_determination": _("Ready For Determination"),
+                "com_internal_review": _("Open Internal Review (revert)"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': RequestCom,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": RequestCom,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'com_post_review_more_info': {
-            'transitions': {
-                'com_post_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "com_post_review_more_info": {
+            "transitions": {
+                "com_post_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': RequestCom,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": RequestCom,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'com_external_review': {
-            'transitions': {
-                'com_post_external_review_discussion': _('Close Review'),
-                'com_post_review_discussion': _('Ready For Discussion (revert)'),
+        "com_external_review": {
+            "transitions": {
+                "com_post_external_review_discussion": _("Close Review"),
+                "com_post_review_discussion": _("Ready For Discussion (revert)"),
             },
-            'display': _('External Review'),
-            'stage': RequestCom,
-            'permissions': reviewer_review_permissions,
+            "display": _("External Review"),
+            "stage": RequestCom,
+            "permissions": reviewer_review_permissions,
         },
     },
     {
-        'com_post_external_review_discussion': {
-            'transitions': {
-                'com_post_external_review_more_info': _('Request More Information'),
-                'com_determination': _('Ready For Determination'),
-                'com_external_review': _('Open External Review (revert)'),
-                'com_almost': _('Accept but additional info required'),
-                'com_accepted': _('Accept'),
-                'com_rejected': _('Dismiss'),
+        "com_post_external_review_discussion": {
+            "transitions": {
+                "com_post_external_review_more_info": _("Request More Information"),
+                "com_determination": _("Ready For Determination"),
+                "com_external_review": _("Open External Review (revert)"),
+                "com_almost": _("Accept but additional info required"),
+                "com_accepted": _("Accept"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': RequestCom,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": RequestCom,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'com_post_external_review_more_info': {
-            'transitions': {
-                'com_post_external_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "com_post_external_review_more_info": {
+            "transitions": {
+                "com_post_external_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': RequestCom,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": RequestCom,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'com_determination': {
-            'transitions': {
-                'com_post_external_review_discussion': _('Ready For Discussion (revert)'),
-                'com_almost': _('Accept but additional info required'),
-                'com_accepted': _('Accept'),
-                'com_rejected': _('Dismiss'),
+        "com_determination": {
+            "transitions": {
+                "com_post_external_review_discussion": _(
+                    "Ready For Discussion (revert)"
+                ),
+                "com_almost": _("Accept but additional info required"),
+                "com_accepted": _("Accept"),
+                "com_rejected": _("Dismiss"),
             },
-            'display': _('Ready for Determination'),
-            'permissions': hidden_from_applicant_permissions,
-            'stage': RequestCom,
+            "display": _("Ready for Determination"),
+            "permissions": hidden_from_applicant_permissions,
+            "stage": RequestCom,
         },
     },
     {
-        'com_accepted': {
-            'display': _('Accepted'),
-            'future': _('Application Outcome'),
-            'stage': RequestCom,
-            'permissions': staff_edit_permissions,
+        "com_accepted": {
+            "display": _("Accepted"),
+            "future": _("Application Outcome"),
+            "stage": RequestCom,
+            "permissions": staff_edit_permissions,
         },
-        'com_almost': {
-            'transitions': {
-                'com_accepted': _('Accept'),
-                'com_post_external_review_discussion': _('Ready For Discussion (revert)'),
+        "com_almost": {
+            "transitions": {
+                "com_accepted": _("Accept"),
+                "com_post_external_review_discussion": _(
+                    "Ready For Discussion (revert)"
+                ),
             },
-            'display': _('Accepted but additional info required'),
-            'stage': RequestCom,
-            'permissions': applicant_edit_permissions,
+            "display": _("Accepted but additional info required"),
+            "stage": RequestCom,
+            "permissions": applicant_edit_permissions,
         },
-        'com_rejected': {
-            'display': _('Dismissed'),
-            'stage': RequestCom,
-            'permissions': no_permissions,
+        "com_rejected": {
+            "display": _("Dismissed"),
+            "stage": RequestCom,
+            "permissions": no_permissions,
         },
     },
 ]
@@ -673,273 +761,310 @@ SingleStageCommunityDefinition = [
 DoubleStageDefinition = [
     {
         DRAFT_STATE: {
-            'transitions': {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {UserPermissions.APPLICANT},
+                    "method": "create_revision",
                 },
             },
-            'display': _('Draft'),
-            'stage': Concept,
-            'permissions': applicant_edit_permissions,
+            "display": _("Draft"),
+            "stage": Concept,
+            "permissions": applicant_edit_permissions,
         }
     },
     {
         INITIAL_STATE: {
-            'transitions': {
-                'concept_more_info': _('Request More Information'),
-                'concept_internal_review': _('Open Review'),
-                'concept_determination': _('Ready For Preliminary Determination'),
-                'invited_to_proposal': _('Invite to Proposal'),
-                'concept_rejected': _('Dismiss'),
+            "transitions": {
+                "concept_more_info": _("Request More Information"),
+                "concept_internal_review": _("Open Review"),
+                "concept_determination": _("Ready For Preliminary Determination"),
+                "invited_to_proposal": _("Invite to Proposal"),
+                "concept_rejected": _("Dismiss"),
             },
-            'display': _('Need screening'),
-            'public': _('Concept Note Received'),
-            'stage': Concept,
-            'permissions': default_permissions,
+            "display": _("Need screening"),
+            "public": _("Concept Note Received"),
+            "stage": Concept,
+            "permissions": default_permissions,
         },
-        'concept_more_info': {
-            'transitions': {
+        "concept_more_info": {
+            "transitions": {
                 INITIAL_STATE: {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
-                'concept_rejected': _('Dismiss'),
-                'invited_to_proposal': _('Invite to Proposal'),
-                'concept_determination': _('Ready For Preliminary Determination'),
+                "concept_rejected": _("Dismiss"),
+                "invited_to_proposal": _("Invite to Proposal"),
+                "concept_determination": _("Ready For Preliminary Determination"),
             },
-            'display': _('More information required'),
-            'stage': Concept,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Concept,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'concept_internal_review': {
-            'transitions': {
-                'concept_review_discussion': _('Close Review'),
-                INITIAL_STATE: _('Need screening (revert)'),
-                'invited_to_proposal': _('Invite to Proposal'),
+        "concept_internal_review": {
+            "transitions": {
+                "concept_review_discussion": _("Close Review"),
+                INITIAL_STATE: _("Need screening (revert)"),
+                "invited_to_proposal": _("Invite to Proposal"),
             },
-            'display': _('Internal Review'),
-            'public': _('{org_short_name} Review').format(org_short_name=settings.ORG_SHORT_NAME),
-            'stage': Concept,
-            'permissions': default_permissions,
+            "display": _("Internal Review"),
+            "public": _("{org_short_name} Review").format(
+                org_short_name=settings.ORG_SHORT_NAME
+            ),
+            "stage": Concept,
+            "permissions": default_permissions,
         },
     },
     {
-        'concept_review_discussion': {
-            'transitions': {
-                'concept_review_more_info': _('Request More Information'),
-                'concept_determination': _('Ready For Preliminary Determination'),
-                'concept_internal_review': _('Open Review (revert)'),
-                'invited_to_proposal': _('Invite to Proposal'),
-                'concept_rejected': _('Dismiss'),
+        "concept_review_discussion": {
+            "transitions": {
+                "concept_review_more_info": _("Request More Information"),
+                "concept_determination": _("Ready For Preliminary Determination"),
+                "concept_internal_review": _("Open Review (revert)"),
+                "invited_to_proposal": _("Invite to Proposal"),
+                "concept_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': Concept,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": Concept,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'concept_review_more_info': {
-            'transitions': {
-                'concept_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "concept_review_more_info": {
+            "transitions": {
+                "concept_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
-                'invited_to_proposal': _('Invite to Proposal'),
+                "invited_to_proposal": _("Invite to Proposal"),
             },
-            'display': _('More information required'),
-            'stage': Concept,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Concept,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'concept_determination': {
-            'transitions': {
-                'concept_review_discussion': _('Ready For Discussion (revert)'),
-                'invited_to_proposal': _('Invite to Proposal'),
-                'concept_rejected': _('Dismiss'),
+        "concept_determination": {
+            "transitions": {
+                "concept_review_discussion": _("Ready For Discussion (revert)"),
+                "invited_to_proposal": _("Invite to Proposal"),
+                "concept_rejected": _("Dismiss"),
             },
-            'display': _('Ready for Preliminary Determination'),
-            'permissions': hidden_from_applicant_permissions,
-            'stage': Concept,
+            "display": _("Ready for Preliminary Determination"),
+            "permissions": hidden_from_applicant_permissions,
+            "stage": Concept,
         },
     },
     {
-        'invited_to_proposal': {
-            'display': _('Concept Accepted'),
-            'future': _('Preliminary Determination'),
-            'transitions': {
-                'draft_proposal': {
-                    'display': _('Progress'),
-                    'method': 'progress_application',
-                    'permissions': {UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'conditions': 'not_progressed',
+        "invited_to_proposal": {
+            "display": _("Concept Accepted"),
+            "future": _("Preliminary Determination"),
+            "transitions": {
+                "draft_proposal": {
+                    "display": _("Progress"),
+                    "method": "progress_application",
+                    "permissions": {
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "conditions": "not_progressed",
                 },
             },
-            'stage': Concept,
-            'permissions': no_permissions,
+            "stage": Concept,
+            "permissions": no_permissions,
         },
-        'concept_rejected': {
-            'display': _('Dismissed'),
-            'stage': Concept,
-            'permissions': no_permissions,
+        "concept_rejected": {
+            "display": _("Dismissed"),
+            "stage": Concept,
+            "permissions": no_permissions,
         },
     },
     {
-        'draft_proposal': {
-            'transitions': {
-                'proposal_discussion': {'display': _('Submit'), 'permissions': {UserPermissions.APPLICANT}, 'method': 'create_revision'},
-                'external_review': _('Open External Review'),
-                'proposal_determination': _('Ready For Final Determination'),
-                'proposal_rejected': _('Dismiss'),
+        "draft_proposal": {
+            "transitions": {
+                "proposal_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {UserPermissions.APPLICANT},
+                    "method": "create_revision",
+                },
+                "external_review": _("Open External Review"),
+                "proposal_determination": _("Ready For Final Determination"),
+                "proposal_rejected": _("Dismiss"),
             },
-            'display': _('Invited for Proposal'),
-            'stage': Proposal,
-            'permissions': applicant_edit_permissions,
+            "display": _("Invited for Proposal"),
+            "stage": Proposal,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'proposal_discussion': {
-            'transitions': {
-                'proposal_more_info': _('Request More Information'),
-                'proposal_internal_review': _('Open Review'),
-                'external_review': _('Open External Review'),
-                'proposal_determination': _('Ready For Final Determination'),
-                'proposal_rejected': _('Dismiss'),
+        "proposal_discussion": {
+            "transitions": {
+                "proposal_more_info": _("Request More Information"),
+                "proposal_internal_review": _("Open Review"),
+                "external_review": _("Open External Review"),
+                "proposal_determination": _("Ready For Final Determination"),
+                "proposal_rejected": _("Dismiss"),
             },
-            'display': _('Proposal Received'),
-            'stage': Proposal,
-            'permissions': default_permissions,
+            "display": _("Proposal Received"),
+            "stage": Proposal,
+            "permissions": default_permissions,
         },
-        'proposal_more_info': {
-            'transitions': {
-                'proposal_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "proposal_more_info": {
+            "transitions": {
+                "proposal_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
-                'external_review': _('Open External Review'),
-                'proposal_determination': _('Ready For Final Determination'),
-                'proposal_rejected': _('Dismiss'),
+                "external_review": _("Open External Review"),
+                "proposal_determination": _("Ready For Final Determination"),
+                "proposal_rejected": _("Dismiss"),
             },
-            'display': _('More information required'),
-            'stage': Proposal,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Proposal,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'proposal_internal_review': {
-            'transitions': {
-                'post_proposal_review_discussion': _('Close Review'),
-                'proposal_discussion': _('Proposal Received (revert)'),
+        "proposal_internal_review": {
+            "transitions": {
+                "post_proposal_review_discussion": _("Close Review"),
+                "proposal_discussion": _("Proposal Received (revert)"),
             },
-            'display': _('Internal Review'),
-            'public': _('{org_short_name} Review').format(org_short_name=settings.ORG_SHORT_NAME),
-            'stage': Proposal,
-            'permissions': default_permissions,
+            "display": _("Internal Review"),
+            "public": _("{org_short_name} Review").format(
+                org_short_name=settings.ORG_SHORT_NAME
+            ),
+            "stage": Proposal,
+            "permissions": default_permissions,
         },
     },
     {
-        'post_proposal_review_discussion': {
-            'transitions': {
-                'post_proposal_review_more_info': _('Request More Information'),
-                'external_review': _('Open External Review'),
-                'proposal_determination': _('Ready For Final Determination'),
-                'proposal_internal_review': _('Open Internal Review (revert)'),
-                'proposal_rejected': _('Dismiss'),
+        "post_proposal_review_discussion": {
+            "transitions": {
+                "post_proposal_review_more_info": _("Request More Information"),
+                "external_review": _("Open External Review"),
+                "proposal_determination": _("Ready For Final Determination"),
+                "proposal_internal_review": _("Open Internal Review (revert)"),
+                "proposal_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': Proposal,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": Proposal,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'post_proposal_review_more_info': {
-            'transitions': {
-                'post_proposal_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "post_proposal_review_more_info": {
+            "transitions": {
+                "post_proposal_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
-                'external_review': _('Open External Review'),
+                "external_review": _("Open External Review"),
             },
-            'display': _('More information required'),
-            'stage': Proposal,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Proposal,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'external_review': {
-            'transitions': {
-                'post_external_review_discussion': _('Close Review'),
-                'post_proposal_review_discussion': _('Ready For Discussion (revert)'),
+        "external_review": {
+            "transitions": {
+                "post_external_review_discussion": _("Close Review"),
+                "post_proposal_review_discussion": _("Ready For Discussion (revert)"),
             },
-            'display': _('External Review'),
-            'stage': Proposal,
-            'permissions': reviewer_review_permissions,
+            "display": _("External Review"),
+            "stage": Proposal,
+            "permissions": reviewer_review_permissions,
         },
     },
     {
-        'post_external_review_discussion': {
-            'transitions': {
-                'post_external_review_more_info': _('Request More Information'),
-                'proposal_determination': _('Ready For Final Determination'),
-                'external_review': _('Open External Review (revert)'),
-                'proposal_almost': _('Accept but additional info required'),
-                'proposal_accepted': _('Accept'),
-                'proposal_rejected': _('Dismiss'),
+        "post_external_review_discussion": {
+            "transitions": {
+                "post_external_review_more_info": _("Request More Information"),
+                "proposal_determination": _("Ready For Final Determination"),
+                "external_review": _("Open External Review (revert)"),
+                "proposal_almost": _("Accept but additional info required"),
+                "proposal_accepted": _("Accept"),
+                "proposal_rejected": _("Dismiss"),
             },
-            'display': _('Ready For Discussion'),
-            'stage': Proposal,
-            'permissions': hidden_from_applicant_permissions,
+            "display": _("Ready For Discussion"),
+            "stage": Proposal,
+            "permissions": hidden_from_applicant_permissions,
         },
-        'post_external_review_more_info': {
-            'transitions': {
-                'post_external_review_discussion': {
-                    'display': _('Submit'),
-                    'permissions': {UserPermissions.APPLICANT, UserPermissions.STAFF, UserPermissions.LEAD, UserPermissions.ADMIN},
-                    'method': 'create_revision',
+        "post_external_review_more_info": {
+            "transitions": {
+                "post_external_review_discussion": {
+                    "display": _("Submit"),
+                    "permissions": {
+                        UserPermissions.APPLICANT,
+                        UserPermissions.STAFF,
+                        UserPermissions.LEAD,
+                        UserPermissions.ADMIN,
+                    },
+                    "method": "create_revision",
                 },
             },
-            'display': _('More information required'),
-            'stage': Proposal,
-            'permissions': applicant_edit_permissions,
+            "display": _("More information required"),
+            "stage": Proposal,
+            "permissions": applicant_edit_permissions,
         },
     },
     {
-        'proposal_determination': {
-            'transitions': {
-                'post_external_review_discussion': _('Ready For Discussion (revert)'),
-                'proposal_almost': _('Accept but additional info required'),
-                'proposal_accepted': _('Accept'),
-                'proposal_rejected': _('Dismiss'),
+        "proposal_determination": {
+            "transitions": {
+                "post_external_review_discussion": _("Ready For Discussion (revert)"),
+                "proposal_almost": _("Accept but additional info required"),
+                "proposal_accepted": _("Accept"),
+                "proposal_rejected": _("Dismiss"),
             },
-            'display': _('Ready for Final Determination'),
-            'permissions': hidden_from_applicant_permissions,
-            'stage': Proposal,
+            "display": _("Ready for Final Determination"),
+            "permissions": hidden_from_applicant_permissions,
+            "stage": Proposal,
         },
     },
     {
-        'proposal_accepted': {
-            'display': _('Accepted'),
-            'future': _('Final Determination'),
-            'stage': Proposal,
-            'permissions': staff_edit_permissions,
+        "proposal_accepted": {
+            "display": _("Accepted"),
+            "future": _("Final Determination"),
+            "stage": Proposal,
+            "permissions": staff_edit_permissions,
         },
-        'proposal_almost': {
-            'transitions': {
-                'proposal_accepted': _('Accept'),
-                'post_external_review_discussion': _('Ready For Discussion (revert)'),
+        "proposal_almost": {
+            "transitions": {
+                "proposal_accepted": _("Accept"),
+                "post_external_review_discussion": _("Ready For Discussion (revert)"),
             },
-            'display': _('Accepted but additional info required'),
-            'stage': Proposal,
-            'permissions': applicant_edit_permissions,
+            "display": _("Accepted but additional info required"),
+            "stage": Proposal,
+            "permissions": applicant_edit_permissions,
         },
-        'proposal_rejected': {
-            'display': _('Dismissed'),
-            'stage': Proposal,
-            'permissions': no_permissions,
+        "proposal_rejected": {
+            "display": _("Dismissed"),
+            "stage": Proposal,
+            "permissions": no_permissions,
         },
     },
 ]
@@ -958,13 +1083,23 @@ def phase_data(phases):
     }
 
 
-Request = Workflow('Request', 'single', **phase_data(SingleStageDefinition))
+Request = Workflow("Request", "single", **phase_data(SingleStageDefinition))
 
-RequestExternal = Workflow('Request with external review', 'single_ext', **phase_data(SingleStageExternalDefinition))
+RequestExternal = Workflow(
+    "Request with external review",
+    "single_ext",
+    **phase_data(SingleStageExternalDefinition),
+)
 
-RequestCommunity = Workflow('Request with community review', 'single_com', **phase_data(SingleStageCommunityDefinition))
+RequestCommunity = Workflow(
+    "Request with community review",
+    "single_com",
+    **phase_data(SingleStageCommunityDefinition),
+)
 
-ConceptProposal = Workflow('Concept & Proposal', 'double', **phase_data(DoubleStageDefinition))
+ConceptProposal = Workflow(
+    "Concept & Proposal", "double", **phase_data(DoubleStageDefinition)
+)
 
 
 WORKFLOWS = {
@@ -977,7 +1112,9 @@ WORKFLOWS = {
 
 # This is not a dictionary as the keys will clash for the first phase of each workflow
 # We cannot find the transitions for the first stage in this instance
-PHASES = list(itertools.chain.from_iterable(workflow.items() for workflow in WORKFLOWS.values()))
+PHASES = list(
+    itertools.chain.from_iterable(workflow.items() for workflow in WORKFLOWS.values())
+)
 
 
 def get_stage_change_actions():
@@ -1001,8 +1138,9 @@ for key, value in PHASES:
     STATUSES[value.display_name].add(key)
 
 active_statuses = [
-    status for status, _ in PHASES
-    if 'accepted' not in status and 'rejected' not in status and 'invited' not in status
+    status
+    for status, _ in PHASES
+    if "accepted" not in status and "rejected" not in status and "invited" not in status
 ]
 
 
@@ -1022,7 +1160,7 @@ def get_review_statuses(user=None):
     reviews = set()
 
     for phase_name, phase in PHASES:
-        if 'review' in phase_name and 'discussion' not in phase_name:
+        if "review" in phase_name and "discussion" not in phase_name:
             if user is None:
                 reviews.add(phase_name)
             elif phase.permissions.can_review(user):
@@ -1034,7 +1172,7 @@ def get_ext_review_statuses():
     reviews = set()
 
     for phase_name, _phase in PHASES:
-        if phase_name.endswith('external_review'):
+        if phase_name.endswith("external_review"):
             reviews.add(phase_name)
     return reviews
 
@@ -1049,7 +1187,7 @@ def get_ext_or_higher_statuses():
     for workflow in WORKFLOWS.values():
         step = None
         for phase in workflow.values():
-            if phase.name.endswith('external_review'):
+            if phase.name.endswith("external_review"):
                 # Update the step for this workflow as External review state
                 step = phase.step
 
@@ -1063,7 +1201,7 @@ def get_ext_or_higher_statuses():
 def get_accepted_statuses():
     accepted_statuses = set()
     for phase_name, phase in PHASES:
-        if phase.display_name == 'Accepted':
+        if phase.display_name == "Accepted":
             accepted_statuses.add(phase_name)
     return accepted_statuses
 
@@ -1071,7 +1209,7 @@ def get_accepted_statuses():
 def get_dismissed_statuses():
     dismissed_statuses = set()
     for phase_name, phase in PHASES:
-        if phase.display_name == 'Dismissed':
+        if phase.display_name == "Dismissed":
             dismissed_statuses.add(phase_name)
     return dismissed_statuses
 
@@ -1082,13 +1220,15 @@ ext_or_higher_statuses = get_ext_or_higher_statuses()
 accepted_statuses = get_accepted_statuses()
 dismissed_statuses = get_dismissed_statuses()
 
-DETERMINATION_PHASES = [phase_name for phase_name, _ in PHASES if '_discussion' in phase_name]
+DETERMINATION_PHASES = [
+    phase_name for phase_name, _ in PHASES if "_discussion" in phase_name
+]
 DETERMINATION_RESPONSE_PHASES = [
-    'post_review_discussion',
-    'concept_review_discussion',
-    'post_external_review_discussion',
-    'ext_post_external_review_discussion',
-    'com_post_external_review_discussion',
+    "post_review_discussion",
+    "concept_review_discussion",
+    "post_external_review_discussion",
+    "ext_post_external_review_discussion",
+    "com_post_external_review_discussion",
 ]
 
 
@@ -1096,31 +1236,31 @@ def get_determination_transitions():
     transitions = {}
     for _phase_name, phase in PHASES:
         for transition_name in phase.transitions:
-            if 'accepted' in transition_name:
-                transitions[transition_name] = 'accepted'
-            elif 'rejected' in transition_name:
-                transitions[transition_name] = 'rejected'
-            elif 'more_info' in transition_name:
-                transitions[transition_name] = 'more_info'
-            elif 'invited_to_proposal' in transition_name:
-                transitions[transition_name] = 'accepted'
+            if "accepted" in transition_name:
+                transitions[transition_name] = "accepted"
+            elif "rejected" in transition_name:
+                transitions[transition_name] = "rejected"
+            elif "more_info" in transition_name:
+                transitions[transition_name] = "more_info"
+            elif "invited_to_proposal" in transition_name:
+                transitions[transition_name] = "accepted"
 
     return transitions
 
 
 def get_action_mapping(workflow):
     # Maps action names to the phase they originate from
-    transitions = defaultdict(lambda: {'display': '', 'transitions': []})
+    transitions = defaultdict(lambda: {"display": "", "transitions": []})
     if workflow:
         phases = workflow.items()
     else:
         phases = PHASES
     for _phase_name, phase in phases:
         for transition_name, transition in phase.transitions.items():
-            transition_display = transition['display']
+            transition_display = transition["display"]
             transition_key = slugify(transition_display)
-            transitions[transition_key]['transitions'].append(transition_name)
-            transitions[transition_key]['display'] = transition_display
+            transitions[transition_key]["transitions"].append(transition_name)
+            transitions[transition_key]["display"] = transition_display
 
     return transitions
 
@@ -1132,54 +1272,57 @@ def phases_matching(phrase, exclude=None):
     if exclude is None:
         exclude = []
     return [
-        status for status, _ in PHASES
+        status
+        for status, _ in PHASES
         if status.endswith(phrase) and status not in exclude
     ]
 
 
 PHASES_MAPPING = {
-    'received': {
-        'name': _('Received'),
-        'statuses': [INITIAL_STATE, 'proposal_discussion'],
+    "received": {
+        "name": _("Received"),
+        "statuses": [INITIAL_STATE, "proposal_discussion"],
     },
-    'internal-review': {
-        'name': _('Internal Review'),
-        'statuses': phases_matching('internal_review'),
+    "internal-review": {
+        "name": _("Internal Review"),
+        "statuses": phases_matching("internal_review"),
     },
-    'in-discussion': {
-        'name': _('Ready for Discussion'),
-        'statuses': phases_matching('discussion', exclude=[INITIAL_STATE, 'proposal_discussion']),
+    "in-discussion": {
+        "name": _("Ready for Discussion"),
+        "statuses": phases_matching(
+            "discussion", exclude=[INITIAL_STATE, "proposal_discussion"]
+        ),
     },
-    'more-information': {
-        'name': _('More Information Requested'),
-        'statuses': phases_matching('more_info'),
+    "more-information": {
+        "name": _("More Information Requested"),
+        "statuses": phases_matching("more_info"),
     },
-    'invited-for-proposal': {
-        'name': _('Invited for Proposal'),
-        'statuses': ['draft_proposal'],
+    "invited-for-proposal": {
+        "name": _("Invited for Proposal"),
+        "statuses": ["draft_proposal"],
     },
-    'external-review': {
-        'name': _('External Review'),
-        'statuses': phases_matching('external_review'),
+    "external-review": {
+        "name": _("External Review"),
+        "statuses": phases_matching("external_review"),
     },
-    'ready-for-determination': {
-        'name': _('Ready for Determination'),
-        'statuses': phases_matching('determination'),
+    "ready-for-determination": {
+        "name": _("Ready for Determination"),
+        "statuses": phases_matching("determination"),
     },
-    'accepted': {
-        'name': _('Accepted'),
-        'statuses': phases_matching('accepted'),
+    "accepted": {
+        "name": _("Accepted"),
+        "statuses": phases_matching("accepted"),
     },
-    'dismissed': {
-        'name': _('Dismissed'),
-        'statuses': phases_matching('rejected'),
+    "dismissed": {
+        "name": _("Dismissed"),
+        "statuses": phases_matching("rejected"),
     },
 }
 
 OPEN_CALL_PHASES = [
-    'com_open_call',
+    "com_open_call",
 ]
 
 COMMUNITY_REVIEW_PHASES = [
-    'com_community_review',
+    "com_community_review",
 ]
diff --git a/hypha/apply/home/apps.py b/hypha/apply/home/apps.py
index 7c48ce212dde5242d9ebd64f34d3849bf88cd4bc..371d57ffc0504a29c8840d9436d258c2661c7c1b 100644
--- a/hypha/apply/home/apps.py
+++ b/hypha/apply/home/apps.py
@@ -2,5 +2,5 @@ from django.apps import AppConfig
 
 
 class HomeConfig(AppConfig):
-    name = 'hypha.apply.home'
-    label = 'apply_home'
+    name = "hypha.apply.home"
+    label = "apply_home"
diff --git a/hypha/apply/home/factories.py b/hypha/apply/home/factories.py
index bd18111c0bcb127625d3f6ca1ba14dedf5741b8d..0a6219b676bd0323d94cf14ed9533edbd1d39100 100644
--- a/hypha/apply/home/factories.py
+++ b/hypha/apply/home/factories.py
@@ -5,12 +5,12 @@ from .models import ApplyHomePage
 
 class ApplySiteFactory(wagtail_factories.SiteFactory):
     class Meta:
-        django_get_or_create = ('hostname',)
+        django_get_or_create = ("hostname",)
 
 
 class ApplyHomePageFactory(wagtail_factories.PageFactory):
     title = "Apply Home"
-    slug = 'apply'
+    slug = "apply"
 
     class Meta:
         model = ApplyHomePage
@@ -19,6 +19,6 @@ class ApplyHomePageFactory(wagtail_factories.PageFactory):
     def _create(cls, model_class, *args, **kwargs):
         try:
             # We cant use "django_get_or_create" in meta as wagtail factories wont respect it
-            return model_class.objects.get(slug=kwargs['slug'])
+            return model_class.objects.get(slug=kwargs["slug"])
         except model_class.DoesNotExist:
             return super()._create(model_class, *args, **kwargs)
diff --git a/hypha/apply/home/migrations/0001_initial.py b/hypha/apply/home/migrations/0001_initial.py
index 01f1ecb8ad3e095be99f2a27232f93a6e18863d4..932d09eddfa220f7bc30c9f79d131cb33b094694 100644
--- a/hypha/apply/home/migrations/0001_initial.py
+++ b/hypha/apply/home/migrations/0001_initial.py
@@ -7,23 +7,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
+        ("wagtailcore", "0040_page_draft_title"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ApplyHomePage',
+            name="ApplyHomePage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('strapline', models.CharField(blank=True, max_length=255)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("strapline", models.CharField(blank=True, max_length=255)),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
     ]
diff --git a/hypha/apply/home/migrations/0002_add_apply_homepage.py b/hypha/apply/home/migrations/0002_add_apply_homepage.py
index 2c8493a3681f767e423a9a8520f0c8749beecf30..e89e2545e5119363f583044b5d7e7592f740d548 100644
--- a/hypha/apply/home/migrations/0002_add_apply_homepage.py
+++ b/hypha/apply/home/migrations/0002_add_apply_homepage.py
@@ -6,40 +6,41 @@ from django.db import migrations
 
 def create_homepage(apps, schema_editor):
     # Get models
-    ContentType = apps.get_model('contenttypes.ContentType')
-    Site = apps.get_model('wagtailcore.Site')
-    ApplyHomePage = apps.get_model('apply_home.ApplyHomePage')
+    ContentType = apps.get_model("contenttypes.ContentType")
+    Site = apps.get_model("wagtailcore.Site")
+    ApplyHomePage = apps.get_model("apply_home.ApplyHomePage")
 
     # Create content type for homepage model
     homepage_content_type, created = ContentType.objects.get_or_create(
-        model='applyhomepage', app_label='apply_home')
+        model="applyhomepage", app_label="apply_home"
+    )
 
     # Create a new homepage
     applyhomepage = ApplyHomePage.objects.create(
         title="Apply Homepage",
         draft_title="Apply Homepage",
-        slug='apply',
+        slug="apply",
         content_type=homepage_content_type,
-        path='00010002',
+        path="00010002",
         depth=2,
         numchild=0,
-        url_path='/apply/',
+        url_path="/apply/",
     )
 
     # Create a site with the new homepage set as the root
     Site.objects.create(
-        hostname='apply.localhost', root_page=applyhomepage, is_default_site=False)
+        hostname="apply.localhost", root_page=applyhomepage, is_default_site=False
+    )
 
 
 class Migration(migrations.Migration):
-
     run_before = [
-        ('wagtailcore', '0053_locale_model'),  # added for Wagtail 2.11 compatibility
+        ("wagtailcore", "0053_locale_model"),  # added for Wagtail 2.11 compatibility
     ]
 
     dependencies = [
-        ('funds', '0001_initial'),
-        ('apply_home', '0001_initial'),
+        ("funds", "0001_initial"),
+        ("apply_home", "0001_initial"),
     ]
 
     operations = [
diff --git a/hypha/apply/home/models.py b/hypha/apply/home/models.py
index 207c1cdb5b39c3f8e851f16fe2fc96c4a6e766bc..b629afe54c77774c328d8aaa9a65a162d105f60d 100644
--- a/hypha/apply/home/models.py
+++ b/hypha/apply/home/models.py
@@ -9,31 +9,33 @@ from wagtailcache.cache import WagtailCacheMixin, cache_page
 from hypha.apply.funds.models import ApplicationBase, LabBase
 
 
-@method_decorator(cache_page, name='serve')
+@method_decorator(cache_page, name="serve")
 class ApplyHomePage(WagtailCacheMixin, Page):
     # Only allow creating HomePages at the root level
-    parent_page_types = ['wagtailcore.Page']
-    subpage_types = ['funds.FundType', 'funds.LabType', 'funds.RequestForPartners']
+    parent_page_types = ["wagtailcore.Page"]
+    subpage_types = ["funds.FundType", "funds.LabType", "funds.RequestForPartners"]
 
     strapline = models.CharField(blank=True, max_length=255)
 
     search_fields = Page.search_fields + [
-        index.SearchField('strapline'),
+        index.SearchField("strapline"),
     ]
 
     content_panels = Page.content_panels + [
-        FieldPanel('strapline'),
+        FieldPanel("strapline"),
     ]
 
     def cache_control(self):
-        return f'public, s-maxage={settings.CACHE_CONTROL_S_MAXAGE}'
+        return f"public, s-maxage={settings.CACHE_CONTROL_S_MAXAGE}"
 
     def get_context(self, *args, **kwargs):
         context = super().get_context(*args, **kwargs)
-        context['open_funds'] = ApplicationBase.objects.order_by_end_date().prefetch_related(
-            'application_public'
-        ).specific()
-        context['open_labs'] = LabBase.objects.public().live().prefetch_related(
-            'lab_public'
-        ).specific()
+        context["open_funds"] = (
+            ApplicationBase.objects.order_by_end_date()
+            .prefetch_related("application_public")
+            .specific()
+        )
+        context["open_labs"] = (
+            LabBase.objects.public().live().prefetch_related("lab_public").specific()
+        )
         return context
diff --git a/hypha/apply/home/templates/apply_home/apply_home_page.html b/hypha/apply/home/templates/apply_home/apply_home_page.html
index 6f93c0969052111f3d8474b4323378a0ded46089..b8ddabc5871493cc8383d455f8ce2d0a14bbae45 100644
--- a/hypha/apply/home/templates/apply_home/apply_home_page.html
+++ b/hypha/apply/home/templates/apply_home/apply_home_page.html
@@ -6,26 +6,26 @@
 {% block header_modifier %}header--light-bg{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small">
-    {% if page.strapline %}
-        <h4 class="heading heading--regular">{{ page.strapline }}</h4>
-    {% endif %}
+    <div class="wrapper wrapper--small">
+        {% if page.strapline %}
+            <h4 class="heading heading--regular">{{ page.strapline }}</h4>
+        {% endif %}
 
-    <div class="wrapper wrapper--breakout">
-        <svg class="icon icon--body-pixels-right"><use xlink:href="#body-pixels-right"></use></svg>
-    </div>
+        <div class="wrapper wrapper--breakout">
+            <svg class="icon icon--body-pixels-right"><use xlink:href="#body-pixels-right"></use></svg>
+        </div>
 
-    <div class="wrapper wrapper--listings">
-    {% for fund in open_funds %}
-        {% include "apply_home/includes/apply_listing.html" with page=fund %}
-    {% endfor %}
-    {% for lab in open_labs %}
-        {% include "apply_home/includes/apply_listing.html" with page=lab %}
-    {% endfor %}
-    </div>
+        <div class="wrapper wrapper--listings">
+            {% for fund in open_funds %}
+                {% include "apply_home/includes/apply_listing.html" with page=fund %}
+            {% endfor %}
+            {% for lab in open_labs %}
+                {% include "apply_home/includes/apply_listing.html" with page=lab %}
+            {% endfor %}
+        </div>
 
-    <div class="wrapper wrapper--breakout">
-        <svg class="icon icon--body-pixels-left"><use xlink:href="#body-pixels-left"></use></svg>
+        <div class="wrapper wrapper--breakout">
+            <svg class="icon icon--body-pixels-left"><use xlink:href="#body-pixels-left"></use></svg>
+        </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/home/templates/apply_home/includes/apply_listing.html b/hypha/apply/home/templates/apply_home/includes/apply_listing.html
index 007a4b4002d7d13eb296b7340766c7976ce830c8..81427c5a09458443935f44466df8b72c911baa0f 100644
--- a/hypha/apply/home/templates/apply_home/includes/apply_listing.html
+++ b/hypha/apply/home/templates/apply_home/includes/apply_listing.html
@@ -1,32 +1,32 @@
 {% load i18n wagtailcore_tags %}
 
 {% with details=page.detail %}
-{% if page.open_round %}
-  <div class="listing listing--not-a-link">
-      <div>
-          <h4 class="listing__title listing__title--link">
-              {% if page.next_deadline and page.show_deadline %}
-                  <p class="listing__deadline">
-                      <svg class="icon icon--calendar icon--small"><use xlink:href="#calendar"></use></svg>
-                      <span>{% trans "Next deadline" %}: {{ page.next_deadline|date:"M j, Y" }}</span>
-                  </p>
-              {% endif %}
-              {% if details %}
+    {% if page.open_round %}
+        <div class="listing listing--not-a-link">
+            <div>
+                <h4 class="listing__title listing__title--link">
+                    {% if page.next_deadline and page.show_deadline %}
+                        <p class="listing__deadline">
+                            <svg class="icon icon--calendar icon--small"><use xlink:href="#calendar"></use></svg>
+                            <span>{% trans "Next deadline" %}: {{ page.next_deadline|date:"M j, Y" }}</span>
+                        </p>
+                    {% endif %}
+              {% comment %} {% if details %}
                   <a href="{% pageurl details %}">
-              {% endif %}
+              {% endif %} {% endcomment %}
 
-              {{ page.title }}
+                    {{ page.title }}
 
-              {% if details %}
+              {% comment %} {% if details %}
                   </a>
-              {% endif %}
-          </h4>
+              {% endif %} {% endcomment %}
+                </h4>
 
-          {% if details.listing_summary or details.introduction %}
-              <h6 class="listing__teaser">{{ details.listing_summary|default:details.introduction|truncatechars_html:120 }}</h6>
-          {% endif %}
-      </div>
-      <a class="listing__button" href="{% pageurl page %}">{% trans "Apply" %}</a>
-  </div>
-{% endif %}
+                {% if details.listing_summary or details.introduction %}
+                    <h6 class="listing__teaser">{{ details.listing_summary|default:details.introduction|truncatechars_html:120 }}</h6>
+                {% endif %}
+            </div>
+            <a class="listing__button" href="{% pageurl page %}">{% trans "Apply" %}</a>
+        </div>
+    {% endif %}
 {% endwith %}
diff --git a/hypha/apply/home/wagtail_hooks.py b/hypha/apply/home/wagtail_hooks.py
index e20cd2c4eb4bbcc71292bea10f88cbd84fbf4338..2987a90540a061e6d8568f16f3acbe3a862b1897 100644
--- a/hypha/apply/home/wagtail_hooks.py
+++ b/hypha/apply/home/wagtail_hooks.py
@@ -5,7 +5,7 @@ from hypha.apply.users.groups import STAFF_GROUP_NAME
 from .models import ApplyHomePage
 
 
-@hooks.register('construct_explorer_page_queryset')
+@hooks.register("construct_explorer_page_queryset")
 def exclude_fund_pages(parent_page, pages, request):
     # Don't allow editors to access the Apply pages in the explorer unless they know whats up
     if not request.user.is_superuser:
@@ -14,10 +14,10 @@ def exclude_fund_pages(parent_page, pages, request):
     return pages
 
 
-@hooks.register('construct_main_menu')
+@hooks.register("construct_main_menu")
 def hide_explorer_menu_item_from_frank(request, menu_items):
     if not request.user.is_superuser:
         groups = list(request.user.groups.all())
         # If the user is only in the staff group they should never see the explorer menu item
         if len(groups) == 1 and groups[0].name == STAFF_GROUP_NAME:
-            menu_items[:] = [item for item in menu_items if item.name != 'explorer']
+            menu_items[:] = [item for item in menu_items if item.name != "explorer"]
diff --git a/hypha/apply/middleware.py b/hypha/apply/middleware.py
index 4ea682451e2ce6d9393cd66e15485e421b8f0a38..dcea249bc139cbd900b1a78b08c59bbe36c6b183 100644
--- a/hypha/apply/middleware.py
+++ b/hypha/apply/middleware.py
@@ -15,7 +15,9 @@ class HandleProtectionErrorMiddleware:
         if isinstance(exception, ProtectedError):
             messages.error(
                 request,
-                _('The object you are trying to delete is used somewhere. Please remove any usages and try again!.'),
+                _(
+                    "The object you are trying to delete is used somewhere. Please remove any usages and try again!."
+                ),
             )
             return HttpResponseRedirect(request.path)
 
@@ -35,7 +37,7 @@ def apply_url_conf_middleware(get_response):
         site = Site.find_for_request(request)
         homepage = site.root_page.specific
         if isinstance(homepage, ApplyHomePage):
-            request.urlconf = 'hypha.apply.urls'
+            request.urlconf = "hypha.apply.urls"
 
         response = get_response(request)
         return response
diff --git a/hypha/apply/projects/admin.py b/hypha/apply/projects/admin.py
index a93bf2145c7f780cc361cd80876062761c0f5b37..a435351ccfc92fb9d2469788164ece3381c6f558 100644
--- a/hypha/apply/projects/admin.py
+++ b/hypha/apply/projects/admin.py
@@ -21,41 +21,53 @@ from .models import (
 
 class DocumentCategoryAdmin(ModelAdmin):
     model = DocumentCategory
-    menu_icon = 'doc-full'
-    list_display = ('name', 'required',)
+    menu_icon = "doc-full"
+    list_display = (
+        "name",
+        "required",
+    )
 
 
 class ContractDocumentCategoryAdmin(ModelAdmin):
     model = ContractDocumentCategory
-    menu_icon = 'doc-full'
-    list_display = ('name', 'required',)
+    menu_icon = "doc-full"
+    list_display = (
+        "name",
+        "required",
+    )
 
 
 class ProjectApprovalFormAdmin(ListRelatedMixin, ModelAdmin):
     model = ProjectApprovalForm
-    menu_label = 'Approval Forms'
-    menu_icon = 'form'
-    list_display = ('name', 'used_by',)
+    menu_label = "Approval Forms"
+    menu_icon = "form"
+    list_display = (
+        "name",
+        "used_by",
+    )
     create_view_class = CreateProjectApprovalFormView
     edit_view_class = EditProjectApprovalFormView
 
     related_models = [
-        ('applicationbaseprojectapprovalform', 'application'),
-        ('labbaseprojectapprovalform', 'lab'),
+        ("applicationbaseprojectapprovalform", "application"),
+        ("labbaseprojectapprovalform", "lab"),
     ]
 
 
 class ProjectSOWFormAdmin(ListRelatedMixin, ModelAdmin):
     model = ProjectSOWForm
-    menu_label = 'SOW Forms'
-    menu_icon = 'form'
-    list_display = ('name', 'used_by',)
+    menu_label = "SOW Forms"
+    menu_icon = "form"
+    list_display = (
+        "name",
+        "used_by",
+    )
     create_view_class = CreateProjectSOWFormView
     edit_view_class = EditProjectSOWFormView
 
     related_models = [
-        ('applicationbaseprojectsowform', 'application'),
-        ('labbaseprojectsowform', 'lab'),
+        ("applicationbaseprojectsowform", "application"),
+        ("labbaseprojectsowform", "lab"),
     ]
 
 
@@ -68,8 +80,8 @@ class VendorFormSettingsAdmin(SettingModelAdmin):
 
 
 class ProjectAdminGroup(ModelAdminGroup):
-    menu_label = 'Projects'
-    menu_icon = 'duplicate'
+    menu_label = "Projects"
+    menu_icon = "duplicate"
     items = (
         ContractDocumentCategoryAdmin,
         DocumentCategoryAdmin,
diff --git a/hypha/apply/projects/admin_views.py b/hypha/apply/projects/admin_views.py
index 16299278ec6441d72f08c5101cca6a14ad83bdf2..5dcc4c04d8cb7766a3c45004810f18e4019bf948 100644
--- a/hypha/apply/projects/admin_views.py
+++ b/hypha/apply/projects/admin_views.py
@@ -4,14 +4,12 @@ from hypha.apply.utils.blocks import show_admin_form_error_messages
 
 
 class CreateProjectApprovalFormView(CreateView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
 
 
 class EditProjectApprovalFormView(EditView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/projects/apps.py b/hypha/apply/projects/apps.py
index 7a1e1771b3c6b1d37326a1dd6cf91877f18c29b1..2858cc3a69b54d8b605aab31fb473131281b446b 100644
--- a/hypha/apply/projects/apps.py
+++ b/hypha/apply/projects/apps.py
@@ -2,5 +2,5 @@ from django.apps import AppConfig
 
 
 class ProjectsConfig(AppConfig):
-    name = 'hypha.apply.projects'
-    label = 'application_projects'
+    name = "hypha.apply.projects"
+    label = "application_projects"
diff --git a/hypha/apply/projects/context_processors.py b/hypha/apply/projects/context_processors.py
index b04840afcfa1bc16f139ec39dcac52e4da541387..17fc8cba12c8c64eba6079a88b0badaf96148a80 100644
--- a/hypha/apply/projects/context_processors.py
+++ b/hypha/apply/projects/context_processors.py
@@ -2,4 +2,4 @@ from django.conf import settings
 
 
 def projects_enabled(request):
-    return {'PROJECTS_ENABLED': settings.PROJECTS_ENABLED}
+    return {"PROJECTS_ENABLED": settings.PROJECTS_ENABLED}
diff --git a/hypha/apply/projects/filters.py b/hypha/apply/projects/filters.py
index be24a1b0a7fecd22c6498022136320b8349a5963..31a561c0e6de8346950c5936dc4b4931f561b47b 100644
--- a/hypha/apply/projects/filters.py
+++ b/hypha/apply/projects/filters.py
@@ -12,7 +12,12 @@ from hypha.apply.funds.tables import (
 )
 
 from .models.payment import INVOICE_STATUS_CHOICES, Invoice
-from .models.project import CLOSING, IN_PROGRESS, PROJECT_STATUS_CHOICES, Project
+from .models.project import (
+    CLOSING,
+    INVOICING_AND_REPORTING,
+    PROJECT_STATUS_CHOICES,
+    Project,
+)
 from .models.report import Report
 
 User = get_user_model()
@@ -23,50 +28,68 @@ def get_project_leads(request):
 
 
 class InvoiceListFilter(filters.FilterSet):
-    fund = Select2ModelMultipleChoiceFilter(label=_('Funds'), queryset=get_used_funds, field_name='project__submission__page')
-    status = Select2MultipleChoiceFilter(label=_('Status'), choices=INVOICE_STATUS_CHOICES)
-    lead = Select2ModelMultipleChoiceFilter(label=_('Lead'), queryset=get_project_leads, field_name='project__lead')
+    fund = Select2ModelMultipleChoiceFilter(
+        label=_("Funds"),
+        queryset=get_used_funds,
+        field_name="project__submission__page",
+    )
+    status = Select2MultipleChoiceFilter(
+        label=_("Status"), choices=INVOICE_STATUS_CHOICES
+    )
+    lead = Select2ModelMultipleChoiceFilter(
+        label=_("Lead"), queryset=get_project_leads, field_name="project__lead"
+    )
 
     class Meta:
-        fields = ['lead', 'fund', 'status']
+        fields = ["lead", "fund", "status"]
         model = Invoice
 
 
 class ProjectListFilter(filters.FilterSet):
     REPORTING_CHOICES = (
-        (0, 'Up to date'),
-        (1, 'Behind schedule'),
+        (0, "Up to date"),
+        (1, "Behind schedule"),
     )
 
-    project_fund = Select2ModelMultipleChoiceFilter(field_name="submission__page", label=_('Funds'), queryset=get_used_funds)
-    project_lead = Select2ModelMultipleChoiceFilter(field_name="lead", label=_('Lead'), queryset=get_project_leads)
-    project_status = Select2MultipleChoiceFilter(field_name="status", label=_('Status'), choices=PROJECT_STATUS_CHOICES)
-    query = filters.CharFilter(field_name='title', lookup_expr="icontains", widget=forms.HiddenInput)
+    project_fund = Select2ModelMultipleChoiceFilter(
+        field_name="submission__page", label=_("Funds"), queryset=get_used_funds
+    )
+    project_lead = Select2ModelMultipleChoiceFilter(
+        field_name="lead", label=_("Lead"), queryset=get_project_leads
+    )
+    project_status = Select2MultipleChoiceFilter(
+        field_name="status", label=_("Status"), choices=PROJECT_STATUS_CHOICES
+    )
+    query = filters.CharFilter(
+        field_name="title", lookup_expr="icontains", widget=forms.HiddenInput
+    )
     reporting = filters.ChoiceFilter(
         choices=REPORTING_CHOICES,
         method="filter_reporting",
-        widget=Select2Widget(attrs={
-            'data-placeholder': 'Reporting',
-            'data-minimum-results-for-search': -1,
-        }),
+        widget=Select2Widget(
+            attrs={
+                "data-placeholder": "Reporting",
+                "data-minimum-results-for-search": -1,
+            }
+        ),
     )
 
     class Meta:
-        fields = ['project_status', 'project_lead', 'project_fund']
+        fields = ["project_status", "project_lead", "project_fund"]
         model = Project
 
     def filter_reporting(self, queryset, name, value):
-        if value == '1':
+        if value == "1":
             return queryset.filter(outstanding_reports__gt=0)
         return queryset.filter(
             Q(outstanding_reports__lt=1) | Q(outstanding_reports__isnull=True),
-            status__in=(IN_PROGRESS, CLOSING),
+            status__in=(INVOICING_AND_REPORTING, CLOSING),
         )
 
 
 class DateRangeInputWidget(filters.widgets.SuffixedMultiWidget):
-    template_name = 'application_projects/filters/widgets/date_range_input_widget.html'
-    suffixes = ['after', 'before']
+    template_name = "application_projects/filters/widgets/date_range_input_widget.html"
+    suffixes = ["after", "before"]
 
     def __init__(self, attrs=None):
         widgets = (forms.DateInput, forms.DateInput)
@@ -80,7 +103,7 @@ class DateRangeInputWidget(filters.widgets.SuffixedMultiWidget):
 
 class ReportListFilter(filters.FilterSet):
     reporting_period = filters.DateFromToRangeFilter(
-        label=_('Reporting Period'),
+        label=_("Reporting Period"),
         method="filter_reporting_period",
         widget=DateRangeInputWidget,
     )
@@ -88,14 +111,14 @@ class ReportListFilter(filters.FilterSet):
 
     class Meta:
         model = Report
-        fields = ['submitted']
+        fields = ["submitted"]
 
     def filter_reporting_period(self, queryset, name, value):
         after, before = value.start, value.stop
         q = {}
         if after:
-            q['start__gte'] = after
+            q["start__gte"] = after
         if before:
-            q['end_date__lte'] = before
+            q["end_date__lte"] = before
 
         return queryset.filter(**q)
diff --git a/hypha/apply/projects/forms/__init__.py b/hypha/apply/projects/forms/__init__.py
index aab0d7c6d772db4484e682b1095cb8326bed1b99..2514a9b3406178ce0025531de5afdbc6745e88a6 100644
--- a/hypha/apply/projects/forms/__init__.py
+++ b/hypha/apply/projects/forms/__init__.py
@@ -34,33 +34,33 @@ from .vendor import (
 )
 
 __all__ = [
-    'SelectDocumentForm',
-    'SubmitContractDocumentsForm',
-    'ApproveContractForm',
-    'ApproversForm',
-    'AssignApproversForm',
-    'ChangePAFStatusForm',
-    'ChangeProjectStatusForm',
-    'CreateProjectForm',
-    'ProjectApprovalForm',
-    'ProjectSOWForm',
-    'RemoveDocumentForm',
-    'RemoveContractDocumentForm',
-    'SetPendingForm',
-    'UploadContractForm',
-    'UploadContractDocumentForm',
-    'StaffUploadContractForm',
-    'UploadDocumentForm',
-    'UpdateProjectLeadForm',
-    'ReportEditForm',
-    'ReportFrequencyForm',
-    'CreateVendorFormStep1',
-    'CreateVendorFormStep2',
-    'CreateVendorFormStep3',
-    'CreateVendorFormStep4',
-    'CreateVendorFormStep5',
-    'CreateVendorFormStep6',
-    'CreateInvoiceForm',
-    'ChangeInvoiceStatusForm',
-    'EditInvoiceForm',
+    "SelectDocumentForm",
+    "SubmitContractDocumentsForm",
+    "ApproveContractForm",
+    "ApproversForm",
+    "AssignApproversForm",
+    "ChangePAFStatusForm",
+    "ChangeProjectStatusForm",
+    "CreateProjectForm",
+    "ProjectApprovalForm",
+    "ProjectSOWForm",
+    "RemoveDocumentForm",
+    "RemoveContractDocumentForm",
+    "SetPendingForm",
+    "UploadContractForm",
+    "UploadContractDocumentForm",
+    "StaffUploadContractForm",
+    "UploadDocumentForm",
+    "UpdateProjectLeadForm",
+    "ReportEditForm",
+    "ReportFrequencyForm",
+    "CreateVendorFormStep1",
+    "CreateVendorFormStep2",
+    "CreateVendorFormStep3",
+    "CreateVendorFormStep4",
+    "CreateVendorFormStep5",
+    "CreateVendorFormStep6",
+    "CreateInvoiceForm",
+    "ChangeInvoiceStatusForm",
+    "EditInvoiceForm",
 ]
diff --git a/hypha/apply/projects/forms/payment.py b/hypha/apply/projects/forms/payment.py
index b39cab7a9a403d7c5ad32912910c31a912dff678..ceb6fe68fa4473bf39847b35d7c7d9d143197397 100644
--- a/hypha/apply/projects/forms/payment.py
+++ b/hypha/apply/projects/forms/payment.py
@@ -17,7 +17,6 @@ from ..models.payment import (
     CHANGES_REQUESTED_BY_FINANCE_1,
     CHANGES_REQUESTED_BY_FINANCE_2,
     CHANGES_REQUESTED_BY_STAFF,
-    CONVERTED,
     DECLINED,
     INVOICE_STATUS_CHOICES,
     PAID,
@@ -31,76 +30,98 @@ from ..models.project import PacketFile
 
 
 def filter_request_choices(choices, user_choices):
-    return [(k, v) for k, v in INVOICE_STATUS_CHOICES if k in choices and k in user_choices]
+    return [
+        (k, v) for k, v in INVOICE_STATUS_CHOICES if k in choices and k in user_choices
+    ]
 
 
 class ChangeInvoiceStatusForm(forms.ModelForm):
-    name_prefix = 'change_invoice_status_form'
+    name_prefix = "change_invoice_status_form"
 
     class Meta:
-        fields = ['status', 'comment']
+        fields = ["status", "comment"]
         model = Invoice
 
     def __init__(self, instance, user, *args, **kwargs):
         super().__init__(*args, **kwargs, instance=instance)
-        self.initial['comment'] = ''
-        status_field = self.fields['status']
+        self.initial["comment"] = ""
+        status_field = self.fields["status"]
         user_choices = invoice_status_user_choices(user)
         possible_status_transitions_lut = {
-            SUBMITTED: filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], user_choices),
-            RESUBMITTED: filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], user_choices),
-            CHANGES_REQUESTED_BY_STAFF: filter_request_choices([DECLINED], user_choices),
+            SUBMITTED: filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], user_choices
+            ),
+            RESUBMITTED: filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], user_choices
+            ),
+            CHANGES_REQUESTED_BY_STAFF: filter_request_choices(
+                [DECLINED], user_choices
+            ),
             APPROVED_BY_STAFF: filter_request_choices(
                 [
-                    CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1,
+                    CHANGES_REQUESTED_BY_FINANCE_1,
+                    APPROVED_BY_FINANCE_1,
                 ],
-                user_choices
+                user_choices,
+            ),
+            CHANGES_REQUESTED_BY_FINANCE_1: filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, DECLINED], user_choices
             ),
-            CHANGES_REQUESTED_BY_FINANCE_1: filter_request_choices([CHANGES_REQUESTED_BY_STAFF, DECLINED], user_choices),
-            APPROVED_BY_FINANCE_1: filter_request_choices([CONVERTED, PAID], user_choices),
-            CONVERTED: filter_request_choices([PAID], user_choices),
+            APPROVED_BY_FINANCE_1: filter_request_choices([PAID], user_choices),
         }
         if settings.INVOICE_EXTENDED_WORKFLOW:
-            possible_status_transitions_lut.update({
-                CHANGES_REQUESTED_BY_FINANCE_2: filter_request_choices(
-                    [
-                        CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1,
-                    ],
-                    user_choices
-                ),
-                APPROVED_BY_FINANCE_1: filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
-                                                              user_choices),
-                APPROVED_BY_FINANCE_2: filter_request_choices([CONVERTED, PAID], user_choices),
-            })
+            possible_status_transitions_lut.update(
+                {
+                    CHANGES_REQUESTED_BY_FINANCE_2: filter_request_choices(
+                        [
+                            CHANGES_REQUESTED_BY_FINANCE_1,
+                            APPROVED_BY_FINANCE_1,
+                        ],
+                        user_choices,
+                    ),
+                    APPROVED_BY_FINANCE_1: filter_request_choices(
+                        [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
+                        user_choices,
+                    ),
+                    APPROVED_BY_FINANCE_2: filter_request_choices([PAID], user_choices),
+                }
+            )
         status_field.choices = possible_status_transitions_lut.get(instance.status, [])
 
 
 class InvoiceBaseForm(forms.ModelForm):
     class Meta:
-        fields = ['document', 'message_for_pm']
+        fields = ["invoice_number", "invoice_amount", "document", "message_for_pm"]
         model = Invoice
 
     def __init__(self, user=None, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.initial['message_for_pm'] = ''
+        self.initial["message_for_pm"] = ""
 
 
 class CreateInvoiceForm(FileFormMixin, InvoiceBaseForm):
     document = SingleFileField(
-        label='Invoice File', required=True,
-        help_text=_('The invoice must be a PDF.')
+        label="Invoice File", required=True, help_text=_("The invoice must be a PDF.")
     )
     supporting_documents = MultiFileField(
         required=False,
-        help_text=_('Files that are related to the invoice. They could be xls, microsoft office documents, open office documents, pdfs, txt files.')
+        help_text=_(
+            "Files that are related to the invoice. They could be xls, microsoft office documents, open office documents, pdfs, txt files."
+        ),
     )
 
-    field_order = ['document', 'supporting_documents', 'message_for_pm']
+    field_order = [
+        "invoice_number",
+        "invoice_amount",
+        "document",
+        "supporting_documents",
+        "message_for_pm",
+    ]
 
     def save(self, commit=True):
         invoice = super().save(commit=commit)
 
-        supporting_documents = self.cleaned_data['supporting_documents'] or []
+        supporting_documents = self.cleaned_data["supporting_documents"] or []
 
         SupportingDocument.objects.bulk_create(
             SupportingDocument(invoice=invoice, document=document)
@@ -111,16 +132,23 @@ class CreateInvoiceForm(FileFormMixin, InvoiceBaseForm):
 
 
 class EditInvoiceForm(FileFormMixin, InvoiceBaseForm):
-    document = SingleFileField(label=_('Invoice File'), required=True)
+    document = SingleFileField(label=_("Invoice File"), required=True)
     supporting_documents = MultiFileField(required=False)
 
-    field_order = ['document', 'supporting_documents', 'message_for_pm']
+    field_order = [
+        "invoice_number",
+        "invoice_amount",
+        "document",
+        "supporting_documents",
+        "message_for_pm",
+    ]
 
     @transaction.atomic
     def save(self, commit=True):
         invoice = super().save(commit=commit)
         not_deleted_original_filenames = [
-            file['name'] for file in json.loads(self.cleaned_data['supporting_documents-uploads'])
+            file["name"]
+            for file in json.loads(self.cleaned_data["supporting_documents-uploads"])
         ]
         for f in invoice.supporting_documents.all():
             if f.document.name not in not_deleted_original_filenames:
@@ -138,13 +166,12 @@ class EditInvoiceForm(FileFormMixin, InvoiceBaseForm):
 
 class SelectDocumentForm(forms.ModelForm):
     document = forms.ChoiceField(
-        label="Document",
-        widget=forms.Select(attrs={'id': 'from_submission'})
+        label="Document", widget=forms.Select(attrs={"id": "from_submission"})
     )
 
     class Meta:
         model = PacketFile
-        fields = ['category', 'document']
+        fields = ["category", "document"]
 
     def __init__(self, existing_files, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -153,16 +180,16 @@ class SelectDocumentForm(forms.ModelForm):
 
         choices = [(f.url, f.filename) for f in self.files]
 
-        self.fields['document'].choices = choices
+        self.fields["document"].choices = choices
 
     def clean_document(self):
-        file_url = self.cleaned_data['document']
+        file_url = self.cleaned_data["document"]
         for file in self.files:
             if file.url == file_url:
                 new_file = ContentFile(file.read())
                 new_file.name = file.filename
                 return new_file
-        raise forms.ValidationError(_('File not found on submission'))
+        raise forms.ValidationError(_("File not found on submission"))
 
     @transaction.atomic()
     def save(self, *args, **kwargs):
diff --git a/hypha/apply/projects/forms/project.py b/hypha/apply/projects/forms/project.py
index 2a564d5236ebbdaf1017d2acac609b0a1ad8fccc..93ffb6be5cd62b4dd3d561c7623e9b1ad8465962 100644
--- a/hypha/apply/projects/forms/project.py
+++ b/hypha/apply/projects/forms/project.py
@@ -14,7 +14,7 @@ from ..models.project import (
     CLOSING,
     COMPLETE,
     DRAFT,
-    IN_PROGRESS,
+    INVOICING_AND_REPORTING,
     PAF_STATUS_CHOICES,
     PROJECT_STATUS_CHOICES,
     Contract,
@@ -36,7 +36,7 @@ def filter_request_choices(choices):
 def get_latest_project_paf_approval_via_roles(project, roles):
     # exact match the roles with paf approval's reviewer roles
     paf_approvals = project.paf_approvals.annotate(
-        roles_count=Count('paf_reviewer_role__user_roles')
+        roles_count=Count("paf_reviewer_role__user_roles")
     ).filter(roles_count=len(list(roles)), approved=False)
 
     for role in roles:
@@ -51,18 +51,22 @@ class ApproveContractForm(forms.Form):
         super().__init__(*args, **kwargs)
         self.instance = instance
         if instance:
-            self.fields['id'].initial = instance.id
+            self.fields["id"].initial = instance.id
 
     def clean_id(self):
         if self.has_changed():
-            raise forms.ValidationError(_('Something changed before your approval please re-review'))
+            raise forms.ValidationError(
+                _("Something changed before your approval please re-review")
+            )
 
     def clean(self):
         if not self.instance:
-            raise forms.ValidationError(_('The contract you were trying to approve has already been approved'))
+            raise forms.ValidationError(
+                _("The contract you were trying to approve has already been approved")
+            )
 
         if not self.instance.signed_by_applicant:
-            raise forms.ValidationError(_('You can only approve a signed contract'))
+            raise forms.ValidationError(_("You can only approve a signed contract"))
 
         super().clean()
 
@@ -77,30 +81,32 @@ class CreateProjectForm(forms.Form):
         widget=forms.HiddenInput(),
     )
 
-    project_lead = forms.ModelChoiceField(label=_('Select Project Lead'), queryset=User.objects.all())
+    project_lead = forms.ModelChoiceField(
+        label=_("Select Project Lead"), queryset=User.objects.all()
+    )
 
     def __init__(self, instance=None, user=None, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
         if instance:
-            self.fields['submission'].initial = instance.id
+            self.fields["submission"].initial = instance.id
 
         # Update lead field queryset
-        lead_field = self.fields['project_lead']
+        lead_field = self.fields["project_lead"]
         qwargs = Q(groups__name=STAFF_GROUP_NAME) | Q(is_superuser=True)
-        lead_field.queryset = (lead_field.queryset.filter(qwargs).distinct())
+        lead_field.queryset = lead_field.queryset.filter(qwargs).distinct()
         if instance:
             lead_field.initial = instance.lead
 
     def clean_project_lead(self):
-        project_lead = self.cleaned_data['project_lead']
+        project_lead = self.cleaned_data["project_lead"]
         if not project_lead:
-            raise forms.ValidationError(_('Project lead is a required field'))
+            raise forms.ValidationError(_("Project lead is a required field"))
         return project_lead
 
     def save(self, *args, **kwargs):
-        submission = self.cleaned_data['submission']
-        lead = self.cleaned_data['project_lead']
+        submission = self.cleaned_data["submission"]
+        lead = self.cleaned_data["project_lead"]
         return Project.create_from_submission(submission, lead=lead)
 
 
@@ -111,19 +117,17 @@ class MixedMetaClass(type(StreamBaseForm), type(forms.ModelForm)):
 class ProjectApprovalForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass):
     class Meta:
         fields = [
-            'title',
+            "title",
         ]
         model = Project
-        widgets = {
-            'title': forms.HiddenInput()
-        }
+        widgets = {"title": forms.HiddenInput()}
 
     def __init__(self, *args, extra_fields=None, **kwargs):
         super().__init__(*args, **kwargs)
 
     def clean(self):
         cleaned_data = super().clean()
-        cleaned_data['form_data'] = {
+        cleaned_data["form_data"] = {
             key: value
             for key, value in cleaned_data.items()
             if key not in self._meta.fields
@@ -131,12 +135,13 @@ class ProjectApprovalForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaCl
         return cleaned_data
 
     def save(self, *args, **kwargs):
-        self.instance.form_fields = kwargs.pop('paf_form_fields', {})
+        self.instance.form_fields = kwargs.pop("paf_form_fields", {})
         self.instance.form_data = {
             field: self.cleaned_data[field]
             for field in self.instance.question_field_ids
             if field in self.cleaned_data
         }
+        self.instance.process_file_data(self.cleaned_data)
         self.instance.user_has_updated_details = True
         return super().save(*args, **kwargs)
 
@@ -144,19 +149,17 @@ class ProjectApprovalForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaCl
 class ProjectSOWForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass):
     class Meta:
         fields = [
-            'project',
+            "project",
         ]
         model = ProjectSOW
-        widgets = {
-            'project': forms.HiddenInput()
-        }
+        widgets = {"project": forms.HiddenInput()}
 
     def __init__(self, *args, extra_fields=None, **kwargs):
         super().__init__(*args, **kwargs)
 
     def clean(self):
         cleaned_data = super().clean()
-        cleaned_data['form_data'] = {
+        cleaned_data["form_data"] = {
             key: value
             for key, value in cleaned_data.items()
             if key not in self._meta.fields
@@ -164,44 +167,50 @@ class ProjectSOWForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass):
         return cleaned_data
 
     def save(self, *args, **kwargs):
-        self.instance, _ = self._meta.model.objects.get_or_create(project=kwargs.pop('project', None))
-        self.instance.form_fields = kwargs.pop('sow_form_fields', {})
+        self.instance, _ = self._meta.model.objects.get_or_create(
+            project=kwargs.pop("project", None)
+        )
+        self.instance.form_fields = kwargs.pop("sow_form_fields", {})
         self.instance.form_data = {
             field: self.cleaned_data[field]
             for field in self.instance.question_field_ids
             if field in self.cleaned_data
         }
+        self.instance.process_file_data(self.cleaned_data)
         return super().save(*args, **kwargs)
 
 
 class ChangePAFStatusForm(forms.ModelForm):
-    name_prefix = 'change_paf_status_form'
-    paf_status = forms.ChoiceField(choices=PAF_STATUS_CHOICES)
+    name_prefix = "change_paf_status_form"
+    paf_status = forms.ChoiceField(
+        label="PAF status", choices=PAF_STATUS_CHOICES, widget=forms.RadioSelect()
+    )
     comment = forms.CharField(required=False, widget=forms.Textarea)
 
     class Meta:
-        fields = ['paf_status', 'comment']
+        fields = ["paf_status", "comment"]
         model = Project
 
     def __init__(self, instance, user, *args, **kwargs):
         super().__init__(*args, **kwargs, instance=instance)
+        self.fields["paf_status"].widget.attrs["class"] = "grid--status-update"
 
 
 class ChangeProjectStatusForm(forms.ModelForm):
-    name_prefix = 'change_project_status_form'
+    name_prefix = "change_project_status_form"
     comment = forms.CharField(required=False, widget=forms.Textarea)
 
     class Meta:
-        fields = ['status', 'comment']
+        fields = ["status", "comment"]
         model = Project
 
     def __init__(self, instance, user, *args, **kwargs):
         super().__init__(*args, **kwargs, instance=instance)
-        status_field = self.fields['status']
+        status_field = self.fields["status"]
         possible_status_transitions = {
-            IN_PROGRESS: filter_request_choices([CLOSING, COMPLETE]),
-            CLOSING: filter_request_choices([IN_PROGRESS, COMPLETE]),
-            COMPLETE: filter_request_choices([IN_PROGRESS, CLOSING]),
+            INVOICING_AND_REPORTING: filter_request_choices([CLOSING, COMPLETE]),
+            CLOSING: filter_request_choices([INVOICING_AND_REPORTING, COMPLETE]),
+            COMPLETE: filter_request_choices([INVOICING_AND_REPORTING, CLOSING]),
         }
         status_field.choices = possible_status_transitions.get(instance.status, [])
 
@@ -210,7 +219,7 @@ class RemoveDocumentForm(forms.ModelForm):
     id = forms.IntegerField(widget=forms.HiddenInput())
 
     class Meta:
-        fields = ['id']
+        fields = ["id"]
         model = PacketFile
 
     def __init__(self, user=None, *args, **kwargs):
@@ -221,7 +230,7 @@ class RemoveContractDocumentForm(forms.ModelForm):
     id = forms.IntegerField(widget=forms.HiddenInput())
 
     class Meta:
-        fields = ['id']
+        fields = ["id"]
         model = ContractPacketFile
 
     def __init__(self, user=None, *args, **kwargs):
@@ -230,17 +239,22 @@ class RemoveContractDocumentForm(forms.ModelForm):
 
 class ApproversForm(forms.ModelForm):
     class Meta:
-        fields = ['id']
+        fields = ["id"]
         model = Project
-        widgets = {'id': forms.HiddenInput()}
+        widgets = {"id": forms.HiddenInput()}
 
     def __init__(self, user=None, *args, **kwargs):
         from hypha.apply.activity.adapters.utils import get_users_for_groups
+
         super().__init__(*args, **kwargs)
 
         for paf_reviewer_role in PAFReviewersRole.objects.all():
-            users = get_users_for_groups(list(paf_reviewer_role.user_roles.all()), exact_match=True)
-            approval = PAFApprovals.objects.filter(project=self.instance, paf_reviewer_role=paf_reviewer_role)
+            users = get_users_for_groups(
+                list(paf_reviewer_role.user_roles.all()), exact_match=True
+            )
+            approval = PAFApprovals.objects.filter(
+                project=self.instance, paf_reviewer_role=paf_reviewer_role
+            )
             if approval:
                 initial_user = approval.first().user
             self.fields[slugify(paf_reviewer_role.label)] = forms.ModelChoiceField(
@@ -257,7 +271,9 @@ class ApproversForm(forms.ModelForm):
         # add users as PAFApprovals
         for paf_reviewer_role in PAFReviewersRole.objects.all():
             assigned_user = self.cleaned_data[slugify(paf_reviewer_role.label)]
-            paf_approvals = PAFApprovals.objects.filter(project=self.instance, paf_reviewer_role=paf_reviewer_role)
+            paf_approvals = PAFApprovals.objects.filter(
+                project=self.instance, paf_reviewer_role=paf_reviewer_role
+            )
             if not paf_approvals.exists():
                 PAFApprovals.objects.create(
                     project=self.instance,
@@ -275,7 +291,9 @@ class ApproversForm(forms.ModelForm):
 class SetPendingForm(ApproversForm):
     def clean(self):
         if self.instance.status != DRAFT:
-            raise forms.ValidationError(_('A Project can only be sent for Approval when Drafted.'))
+            raise forms.ValidationError(
+                _("A Project can only be sent for Approval when Drafted.")
+            )
 
         # :todo: we should have a check form contains enough data to create PAF Approvals
         cleaned_data = super().clean()
@@ -284,23 +302,30 @@ class SetPendingForm(ApproversForm):
 
 class AssignApproversForm(forms.ModelForm):
     class Meta:
-        fields = ['id']
+        fields = ["id"]
         model = Project
-        widgets = {'id': forms.HiddenInput()}
+        widgets = {"id": forms.HiddenInput()}
 
     def __init__(self, user=None, *args, **kwargs):
         from hypha.apply.activity.adapters.utils import get_users_for_groups
+
         super().__init__(*args, **kwargs)
         self.user = user
 
-        paf_approval = get_latest_project_paf_approval_via_roles(project=self.instance, roles=user.groups.all())
+        paf_approval = get_latest_project_paf_approval_via_roles(
+            project=self.instance, roles=user.groups.all()
+        )
 
         if paf_approval:
             current_paf_reviewer_role = paf_approval.paf_reviewer_role
 
-            users = get_users_for_groups(list(current_paf_reviewer_role.user_roles.all()), exact_match=True)
+            users = get_users_for_groups(
+                list(current_paf_reviewer_role.user_roles.all()), exact_match=True
+            )
 
-            self.fields[slugify(current_paf_reviewer_role.label)] = forms.ModelChoiceField(
+            self.fields[
+                slugify(current_paf_reviewer_role.label)
+            ] = forms.ModelChoiceField(
                 queryset=users,
                 required=False,
                 blank=True,
@@ -310,7 +335,9 @@ class AssignApproversForm(forms.ModelForm):
             )
 
     def save(self, commit=True):
-        paf_approval = get_latest_project_paf_approval_via_roles(project=self.instance, roles=self.user.groups.all())
+        paf_approval = get_latest_project_paf_approval_via_roles(
+            project=self.instance, roles=self.user.groups.all()
+        )
 
         current_paf_reviewer_role = paf_approval.paf_reviewer_role
         assigned_user = self.cleaned_data[slugify(current_paf_reviewer_role.label)]
@@ -324,39 +351,39 @@ class AssignApproversForm(forms.ModelForm):
 
 class SubmitContractDocumentsForm(forms.ModelForm):
     class Meta:
-        fields = ['id']
+        fields = ["id"]
         model = Project
-        widgets = {'id': forms.HiddenInput()}
+        widgets = {"id": forms.HiddenInput()}
 
     def __init__(self, user=None, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
 
 class UploadContractForm(FileFormMixin, forms.ModelForm):
-    file = SingleFileField(label=_('Contract'), required=True)
+    file = SingleFileField(label=_("Contract"), required=True)
 
     class Meta:
-        fields = ['file']
+        fields = ["file"]
         model = Contract
 
     def save(self, commit=True):
-        self.instance.file = self.cleaned_data.get('file')
+        self.instance.file = self.cleaned_data.get("file")
         return super().save(commit=True)
 
 
 class StaffUploadContractForm(FileFormMixin, forms.ModelForm):
-    file = SingleFileField(label=_('Contract'), required=True)
+    file = SingleFileField(label=_("Contract"), required=True)
 
     class Meta:
-        fields = ['file', 'signed_by_applicant']
+        fields = ["file", "signed_by_applicant"]
         model = Contract
 
 
 class UploadDocumentForm(FileFormMixin, forms.ModelForm):
-    document = SingleFileField(label=_('Document'), required=True)
+    document = SingleFileField(label=_("Document"), required=True)
 
     class Meta:
-        fields = ['category', 'document']
+        fields = ["category", "document"]
         model = PacketFile
 
     def __init__(self, user=None, instance=None, *args, **kwargs):
@@ -368,10 +395,10 @@ class UploadDocumentForm(FileFormMixin, forms.ModelForm):
 
 
 class UploadContractDocumentForm(FileFormMixin, forms.ModelForm):
-    document = SingleFileField(label=_('Contract Document'), required=True)
+    document = SingleFileField(label=_("Contract Document"), required=True)
 
     class Meta:
-        fields = ['category', 'document']
+        fields = ["category", "document"]
         model = ContractPacketFile
 
     def __init__(self, user=None, instance=None, *args, **kwargs):
@@ -384,16 +411,20 @@ class UploadContractDocumentForm(FileFormMixin, forms.ModelForm):
 
 class UpdateProjectLeadForm(forms.ModelForm):
     class Meta:
-        fields = ['lead']
+        fields = ["lead"]
         model = Project
 
     def __init__(self, user=None, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
-        lead_field = self.fields['lead']
-        lead_field.label = _('Update lead from {lead} to').format(lead=self.instance.lead)
+        lead_field = self.fields["lead"]
+        lead_field.label = _("Update lead from {lead} to").format(
+            lead=self.instance.lead
+        )
 
         qwargs = Q(groups__name=STAFF_GROUP_NAME) | Q(is_superuser=True)
-        lead_field.queryset = (lead_field.queryset.exclude(pk=self.instance.lead_id)
-                                                  .filter(qwargs)
-                                                  .distinct())
+        lead_field.queryset = (
+            lead_field.queryset.exclude(pk=self.instance.lead_id)
+            .filter(qwargs)
+            .distinct()
+        )
diff --git a/hypha/apply/projects/forms/report.py b/hypha/apply/projects/forms/report.py
index fb83d29fef27ceafedc963b1efce4fb298395e16..1a4d2c7f9d67fe23ca4d5e7af9a6358347b859fc 100644
--- a/hypha/apply/projects/forms/report.py
+++ b/hypha/apply/projects/forms/report.py
@@ -12,57 +12,61 @@ from ..models.report import Report, ReportConfig, ReportPrivateFiles, ReportVers
 
 class ReportEditForm(FileFormMixin, forms.ModelForm):
     public_content = RichTextField(
-        help_text=_('This section of the report will be shared with the broader community.')
+        help_text=_(
+            "This section of the report will be shared with the broader community."
+        )
     )
     private_content = RichTextField(
-        help_text=_('This section of the report will be shared with staff only.')
+        help_text=_("This section of the report will be shared with staff only.")
     )
     file_list = forms.ModelMultipleChoiceField(
-        widget=forms.CheckboxSelectMultiple(attrs={'class': 'delete'}),
+        widget=forms.CheckboxSelectMultiple(attrs={"class": "delete"}),
         queryset=ReportPrivateFiles.objects.all(),
         required=False,
-        label='Files'
+        label="Files",
     )
-    files = MultiFileField(required=False, label='')
+    files = MultiFileField(required=False, label="")
 
     class Meta:
         model = Report
         fields = (
-            'public_content',
-            'private_content',
-            'file_list',
-            'files',
+            "public_content",
+            "private_content",
+            "file_list",
+            "files",
         )
 
     def __init__(self, *args, user=None, initial=None, **kwargs):
         if initial is None:
             initial = {}
         self.report_files = initial.pop(
-            'file_list',
+            "file_list",
             ReportPrivateFiles.objects.none(),
         )
         super().__init__(*args, initial=initial, **kwargs)
-        self.fields['file_list'].queryset = self.report_files
+        self.fields["file_list"].queryset = self.report_files
         self.user = user
 
     def clean(self):
         cleaned_data = super().clean()
-        public = cleaned_data['public_content']
-        private = cleaned_data['private_content']
+        public = cleaned_data["public_content"]
+        private = cleaned_data["private_content"]
         if not private and not public:
-            missing_content = _('Must include either public or private content when submitting a report.')
-            self.add_error('public_content', missing_content)
-            self.add_error('private_content', missing_content)
+            missing_content = _(
+                "Must include either public or private content when submitting a report."
+            )
+            self.add_error("public_content", missing_content)
+            self.add_error("private_content", missing_content)
         return cleaned_data
 
     @transaction.atomic
     def save(self, commit=True):
-        is_draft = 'save' in self.data
+        is_draft = "save" in self.data
 
         version = ReportVersion.objects.create(
             report=self.instance,
-            public_content=self.cleaned_data['public_content'],
-            private_content=self.cleaned_data['private_content'],
+            public_content=self.cleaned_data["public_content"],
+            private_content=self.cleaned_data["private_content"],
             submitted=timezone.now(),
             draft=is_draft,
             author=self.user,
@@ -80,14 +84,14 @@ class ReportEditForm(FileFormMixin, forms.ModelForm):
 
         instance = super().save(commit)
 
-        removed_files = self.cleaned_data['file_list']
+        removed_files = self.cleaned_data["file_list"]
         ReportPrivateFiles.objects.bulk_create(
             ReportPrivateFiles(report=version, document=file.document)
             for file in self.report_files
             if file not in removed_files
         )
 
-        added_files = self.cleaned_data['files']
+        added_files = self.cleaned_data["files"]
         if added_files:
             ReportPrivateFiles.objects.bulk_create(
                 ReportPrivateFiles(report=version, document=file)
@@ -98,17 +102,17 @@ class ReportEditForm(FileFormMixin, forms.ModelForm):
 
 
 class ReportFrequencyForm(forms.ModelForm):
-    start = forms.DateField(label='Report on:', required=False)
+    start = forms.DateField(label="Report on:", required=False)
 
     class Meta:
         model = ReportConfig
-        fields = ('start', 'occurrence', 'frequency', 'does_not_repeat')
+        fields = ("start", "occurrence", "frequency", "does_not_repeat")
         labels = {
-            'occurrence': '',
-            'frequency': '',
+            "occurrence": "",
+            "frequency": "",
         }
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.fields['occurrence'].required = False
-        self.fields['frequency'].required = False
+        self.fields["occurrence"].required = False
+        self.fields["frequency"].required = False
diff --git a/hypha/apply/projects/forms/vendor.py b/hypha/apply/projects/forms/vendor.py
index 74c9950ed5159c7fd9045fcbc30e214d4811d5a4..e3792d2f482aca01add4683c63d6ee70e3672e42 100644
--- a/hypha/apply/projects/forms/vendor.py
+++ b/hypha/apply/projects/forms/vendor.py
@@ -1,7 +1,7 @@
 import datetime
 from operator import itemgetter
 
-from babel.core import Locale, get_global
+from babel.core import get_global
 from babel.numbers import get_currency_name, get_territory_currencies
 from django import forms
 from django.conf import settings
@@ -16,7 +16,7 @@ from ..models.vendor import VendorFormSettings
 
 def get_active_currencies():
     active_currencies = []
-    territories = get_global('territory_currencies').keys()
+    territories = get_global("territory_currencies").keys()
     for territory in territories:
         currencies = get_territory_currencies(territory, datetime.date.today())
         if currencies:
@@ -35,11 +35,13 @@ class BaseVendorForm:
     def apply_form_settings(self, fields):
         for field in fields:
             try:
-                self.fields[field].label = getattr(self.form_settings, f'{field}_label')
+                self.fields[field].label = getattr(self.form_settings, f"{field}_label")
             except AttributeError:
                 pass
             try:
-                self.fields[field].help_text = getattr(self.form_settings, f'{field}_help_text')
+                self.fields[field].help_text = getattr(
+                    self.form_settings, f"{field}_help_text"
+                )
             except AttributeError:
                 pass
         return fields
@@ -47,13 +49,15 @@ class BaseVendorForm:
 
 class CreateVendorFormStep1(BaseVendorForm, forms.Form):
     TYPE_CHOICES = [
-        ('organization', _('Yes, the account belongs to the organisation above')),
-        ('personal', _('No, it is a personal bank account')),
+        ("organization", _("Yes, the account belongs to the organisation above")),
+        ("personal", _("No, it is a personal bank account")),
     ]
 
     name = forms.CharField(required=True)
     contractor_name = forms.CharField(required=True)
-    type = forms.ChoiceField(choices=TYPE_CHOICES, required=True, widget=forms.RadioSelect)
+    type = forms.ChoiceField(
+        choices=TYPE_CHOICES, required=True, widget=forms.RadioSelect
+    )
 
     def __init__(self, *args, **kwargs):
         super(CreateVendorFormStep1, self).__init__(*args, **kwargs)
@@ -62,10 +66,10 @@ class CreateVendorFormStep1(BaseVendorForm, forms.Form):
 
 class CreateVendorFormStep2(BaseVendorForm, forms.Form):
     required_to_pay_taxes = forms.TypedChoiceField(
-        choices=((False, 'No'), (True, 'Yes')),
-        coerce=lambda x: x == 'True',
+        choices=((False, "No"), (True, "Yes")),
+        coerce=lambda x: x == "True",
         widget=forms.RadioSelect,
-        required=True
+        required=True,
     )
 
     def __init__(self, *args, **kwargs):
@@ -83,7 +87,10 @@ class CreateVendorFormStep3(FileFormMixin, BaseVendorForm, forms.Form):
 
 class CreateVendorFormStep4(BaseVendorForm, forms.Form):
     CURRENCY_CHOICES = [
-        (currency, f'{get_currency_name(currency, locale=Locale.parse(settings.LANGUAGE_CODE, sep="-"))} - {currency}')
+        (
+            currency,
+            f"{get_currency_name(currency, locale=settings.CURRENCY_LOCALE)} - {currency}",
+        )
         for currency in get_active_currencies()
     ]
 
@@ -93,7 +100,7 @@ class CreateVendorFormStep4(BaseVendorForm, forms.Form):
     account_currency = forms.ChoiceField(
         choices=sorted(CURRENCY_CHOICES, key=itemgetter(1)),
         required=True,
-        initial='USD'
+        initial="USD",
     )
 
     def __init__(self, *args, **kwargs):
@@ -103,10 +110,10 @@ class CreateVendorFormStep4(BaseVendorForm, forms.Form):
 
 class CreateVendorFormStep5(BaseVendorForm, forms.Form):
     need_extra_info = forms.TypedChoiceField(
-        choices=((False, _('No')), (True, _('Yes'))),
-        coerce=lambda x: x == 'True',
+        choices=((False, _("No")), (True, _("Yes"))),
+        coerce=lambda x: x == "True",
         widget=forms.RadioSelect,
-        required=True
+        required=True,
     )
 
     def __init__(self, *args, **kwargs):
@@ -116,7 +123,10 @@ class CreateVendorFormStep5(BaseVendorForm, forms.Form):
 
 class CreateVendorFormStep6(BaseVendorForm, forms.Form):
     CURRENCY_CHOICES = [
-        (currency, f'{get_currency_name(currency, locale=Locale.parse(settings.LANGUAGE_CODE, sep="-"))} - {currency}')
+        (
+            currency,
+            f"{get_currency_name(currency, locale=settings.CURRENCY_LOCALE)} - {currency}",
+        )
         for currency in get_active_currencies()
     ]
     branch_address = AddressField()
@@ -125,7 +135,7 @@ class CreateVendorFormStep6(BaseVendorForm, forms.Form):
     ib_account_currency = forms.ChoiceField(
         choices=sorted(CURRENCY_CHOICES, key=itemgetter(1)),
         required=False,
-        initial='USD'
+        initial="USD",
     )
     ib_branch_address = AddressField()
     nid_type = forms.CharField(required=False)
diff --git a/hypha/apply/projects/management/commands/notify_report_due.py b/hypha/apply/projects/management/commands/notify_report_due.py
index b02f05f302600e14279bc7441740f7c1fb54acb2..c31671036543173cb797e5c011ed2fe2b9947ed5 100644
--- a/hypha/apply/projects/management/commands/notify_report_due.py
+++ b/hypha/apply/projects/management/commands/notify_report_due.py
@@ -12,32 +12,31 @@ from hypha.apply.projects.models import Project
 
 
 class Command(BaseCommand):
-    help = 'Notify users that they have a report due soon'
+    help = "Notify users that they have a report due soon"
 
     def add_arguments(self, parser):
-        parser.add_argument('days_before', type=int)
+        parser.add_argument("days_before", type=int)
 
     def handle(self, *args, **options):
         site = ApplyHomePage.objects.first().get_site()
-        set_urlconf('hypha.apply.urls')
+        set_urlconf("hypha.apply.urls")
 
         # Mock a HTTPRequest in order to pass the site settings into the
         # templates
         request = HttpRequest()
-        request.META['SERVER_NAME'] = site.hostname
-        request.META['SERVER_PORT'] = site.port
-        request.META[settings.SECURE_PROXY_SSL_HEADER] = 'https'
+        request.META["SERVER_NAME"] = site.hostname
+        request.META["SERVER_PORT"] = site.port
+        request.META[settings.SECURE_PROXY_SSL_HEADER] = "https"
         request.session = {}
         request._messages = FallbackStorage(request)
 
         today = timezone.now().date()
-        due_date = today + relativedelta(days=options['days_before'])
+        due_date = today + relativedelta(days=options["days_before"])
         for project in Project.objects.in_progress():
             next_report = project.report_config.current_due_report()
             due_soon = next_report.end_date == due_date
             not_notified_today = (
-                not next_report.notified or
-                next_report.notified.date() != today
+                not next_report.notified or next_report.notified.date() != today
             )
             if due_soon and not_notified_today:
                 messenger(
@@ -50,6 +49,4 @@ class Command(BaseCommand):
                 # Notify about the due report
                 next_report.notified = timezone.now()
                 next_report.save()
-                self.stdout.write(
-                    self.style.SUCCESS(f'Notified project: {project.id}')
-                )
+                self.stdout.write(self.style.SUCCESS(f"Notified project: {project.id}"))
diff --git a/hypha/apply/projects/migrations/0001_initial.py b/hypha/apply/projects/migrations/0001_initial.py
index 76e3451ce5468d5f5e00d4b15869b977e286677a..a573789f86e9fd761134ff7d5fe1a719bb145b6b 100644
--- a/hypha/apply/projects/migrations/0001_initial.py
+++ b/hypha/apply/projects/migrations/0001_initial.py
@@ -5,20 +5,33 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('funds', '0064_group_toggle_end_block'),
+        ("funds", "0064_group_toggle_end_block"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Project',
+            name="Project",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.TextField()),
-                ('submission', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationSubmission')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.TextField()),
+                (
+                    "submission",
+                    models.OneToOneField(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationSubmission",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0002_add_submission_fields_to_project.py b/hypha/apply/projects/migrations/0002_add_submission_fields_to_project.py
index a8856252fead9be837a0b4f661313034b77ddfd1..25f56e71259a66f8777953f2467a1e7e0862061d 100644
--- a/hypha/apply/projects/migrations/0002_add_submission_fields_to_project.py
+++ b/hypha/apply/projects/migrations/0002_add_submission_fields_to_project.py
@@ -4,30 +4,29 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0001_initial'),
+        ("application_projects", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='contact_address',
-            field=models.TextField(default=''),
+            model_name="project",
+            name="contact_address",
+            field=models.TextField(default=""),
         ),
         migrations.AddField(
-            model_name='project',
-            name='contact_email',
-            field=models.TextField(default=''),
+            model_name="project",
+            name="contact_email",
+            field=models.TextField(default=""),
         ),
         migrations.AddField(
-            model_name='project',
-            name='contact_legal_name',
-            field=models.TextField(default=''),
+            model_name="project",
+            name="contact_legal_name",
+            field=models.TextField(default=""),
         ),
         migrations.AddField(
-            model_name='project',
-            name='value',
+            model_name="project",
+            name="value",
             field=models.DecimalField(decimal_places=2, default=0, max_digits=10),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0003_add_project_lead.py b/hypha/apply/projects/migrations/0003_add_project_lead.py
index 2699ce4b680cf93c13f080948e29f14370cc4976..4d7a15fe3901b3346e127cd54e4cdf5b10f81c8b 100644
--- a/hypha/apply/projects/migrations/0003_add_project_lead.py
+++ b/hypha/apply/projects/migrations/0003_add_project_lead.py
@@ -6,16 +6,19 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0002_add_submission_fields_to_project'),
+        ("application_projects", "0002_add_submission_fields_to_project"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='lead',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
+            model_name="project",
+            name="lead",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0004_project_rename_name_to_title.py b/hypha/apply/projects/migrations/0004_project_rename_name_to_title.py
index 2e735813cb68516d2da0ae8e9102ef2c86b3510a..9f6624db674c4b303ecb23426317a2e270909042 100644
--- a/hypha/apply/projects/migrations/0004_project_rename_name_to_title.py
+++ b/hypha/apply/projects/migrations/0004_project_rename_name_to_title.py
@@ -4,15 +4,14 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0003_add_project_lead'),
+        ("application_projects", "0003_add_project_lead"),
     ]
 
     operations = [
         migrations.RenameField(
-            model_name='project',
-            old_name='name',
-            new_name='title',
+            model_name="project",
+            old_name="name",
+            new_name="title",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0005_add_user_to_project.py b/hypha/apply/projects/migrations/0005_add_user_to_project.py
index b403e5f14d4de9a0e5e458146b4b7e4443277514..290e5a1f7b183f3277153844b620b63e42fc1ae5 100644
--- a/hypha/apply/projects/migrations/0005_add_user_to_project.py
+++ b/hypha/apply/projects/migrations/0005_add_user_to_project.py
@@ -6,21 +6,30 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0004_project_rename_name_to_title'),
+        ("application_projects", "0004_project_rename_name_to_title"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='user',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='owned_projects', to=settings.AUTH_USER_MODEL),
+            model_name="project",
+            name="user",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="owned_projects",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='project',
-            name='lead',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lead_projects', to=settings.AUTH_USER_MODEL),
+            model_name="project",
+            name="lead",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="lead_projects",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0006_add_project_paf_fields.py b/hypha/apply/projects/migrations/0006_add_project_paf_fields.py
index fd61f3cb20dd0684d853f464fa53cef87f931ea1..970f71bd309205efaf4a6a575c5df06ba8d33268 100644
--- a/hypha/apply/projects/migrations/0006_add_project_paf_fields.py
+++ b/hypha/apply/projects/migrations/0006_add_project_paf_fields.py
@@ -4,45 +4,46 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0005_add_user_to_project'),
+        ("application_projects", "0005_add_user_to_project"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='contact_phone',
-            field=models.TextField(default='', verbose_name='Phone'),
+            model_name="project",
+            name="contact_phone",
+            field=models.TextField(default="", verbose_name="Phone"),
         ),
         migrations.AddField(
-            model_name='project',
-            name='proposed_end',
-            field=models.DateTimeField(null=True, verbose_name='Proposed Start Date'),
+            model_name="project",
+            name="proposed_end",
+            field=models.DateTimeField(null=True, verbose_name="Proposed Start Date"),
         ),
         migrations.AddField(
-            model_name='project',
-            name='proposed_start',
-            field=models.DateTimeField(null=True, verbose_name='Proposed Start Date'),
+            model_name="project",
+            name="proposed_start",
+            field=models.DateTimeField(null=True, verbose_name="Proposed Start Date"),
         ),
         migrations.AddField(
-            model_name='project',
-            name='user_has_updated_details',
+            model_name="project",
+            name="user_has_updated_details",
             field=models.BooleanField(default=False),
         ),
         migrations.AlterField(
-            model_name='project',
-            name='contact_address',
-            field=models.TextField(default='', verbose_name='Address'),
+            model_name="project",
+            name="contact_address",
+            field=models.TextField(default="", verbose_name="Address"),
         ),
         migrations.AlterField(
-            model_name='project',
-            name='contact_email',
-            field=models.TextField(default='', verbose_name='Email'),
+            model_name="project",
+            name="contact_email",
+            field=models.TextField(default="", verbose_name="Email"),
         ),
         migrations.AlterField(
-            model_name='project',
-            name='contact_legal_name',
-            field=models.TextField(default='', verbose_name='Person or Organisation name'),
+            model_name="project",
+            name="contact_legal_name",
+            field=models.TextField(
+                default="", verbose_name="Person or Organisation name"
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0007_fix_proposed_end_date_verbose_name.py b/hypha/apply/projects/migrations/0007_fix_proposed_end_date_verbose_name.py
index 3dae6c5a1ac2fcfac3331d7d4f1bfc07d66a0f13..f3d1c90920408d61d92b5a1c1a4e7e8d56017c8c 100644
--- a/hypha/apply/projects/migrations/0007_fix_proposed_end_date_verbose_name.py
+++ b/hypha/apply/projects/migrations/0007_fix_proposed_end_date_verbose_name.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0006_add_project_paf_fields'),
+        ("application_projects", "0006_add_project_paf_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='proposed_end',
-            field=models.DateTimeField(null=True, verbose_name='Proposed End Date'),
+            model_name="project",
+            name="proposed_end",
+            field=models.DateTimeField(null=True, verbose_name="Proposed End Date"),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0008_add_value_validator.py b/hypha/apply/projects/migrations/0008_add_value_validator.py
index 27c2506895ffb54a4d911663b73339f3d56dbffc..8726a8e1ebb1fec303f4beaba1ed00b2496ec364 100644
--- a/hypha/apply/projects/migrations/0008_add_value_validator.py
+++ b/hypha/apply/projects/migrations/0008_add_value_validator.py
@@ -6,15 +6,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0007_fix_proposed_end_date_verbose_name'),
+        ("application_projects", "0007_fix_proposed_end_date_verbose_name"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='value',
-            field=models.DecimalField(decimal_places=2, default=0, max_digits=10, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))]),
+            model_name="project",
+            name="value",
+            field=models.DecimalField(
+                decimal_places=2,
+                default=0,
+                max_digits=10,
+                validators=[django.core.validators.MinValueValidator(Decimal("0.01"))],
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0009_add_approval.py b/hypha/apply/projects/migrations/0009_add_approval.py
index 92b0c41572e2d1549f53767d3da3dcff0b4424ae..79fb2bdd379dd96dca7a022e5b14b200c3046057 100644
--- a/hypha/apply/projects/migrations/0009_add_approval.py
+++ b/hypha/apply/projects/migrations/0009_add_approval.py
@@ -7,44 +7,71 @@ import django.utils.timezone
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0009_documentcategory'),
+        ("application_projects", "0009_documentcategory"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Approval',
+            name="Approval",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created_at', models.DateTimeField(auto_now_add=True)),
-                ('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("created_at", models.DateTimeField(auto_now_add=True)),
+                (
+                    "by",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='project',
-            name='created_at',
-            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
+            model_name="project",
+            name="created_at",
+            field=models.DateTimeField(
+                auto_now_add=True, default=django.utils.timezone.now
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='project',
-            name='is_locked',
+            model_name="project",
+            name="is_locked",
             field=models.BooleanField(default=False),
         ),
         migrations.AddField(
-            model_name='project',
-            name='status',
-            field=models.TextField(choices=[('committed', 'Committed'), ('contracting', 'Contracting'), ('in_progress', 'In Progress'), ('closing', 'Closing'), ('complete', 'Complete')], default='committed'),
+            model_name="project",
+            name="status",
+            field=models.TextField(
+                choices=[
+                    ("committed", "Committed"),
+                    ("contracting", "Contracting"),
+                    ("in_progress", "In Progress"),
+                    ("closing", "Closing"),
+                    ("complete", "Complete"),
+                ],
+                default="committed",
+            ),
         ),
         migrations.AddField(
-            model_name='approval',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='application_projects.Project'),
+            model_name="approval",
+            name="project",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                to="application_projects.Project",
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='approval',
-            unique_together={('project', 'by')},
+            name="approval",
+            unique_together={("project", "by")},
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0009_documentcategory.py b/hypha/apply/projects/migrations/0009_documentcategory.py
index 6925bcfa68c739c81951cf8a1bc8a21111caeb44..a49aed4925c4a03bcae1344f0a6c641168dc55d7 100644
--- a/hypha/apply/projects/migrations/0009_documentcategory.py
+++ b/hypha/apply/projects/migrations/0009_documentcategory.py
@@ -4,22 +4,29 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0008_add_value_validator'),
+        ("application_projects", "0008_add_value_validator"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='DocumentCategory',
+            name="DocumentCategory",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=254)),
-                ('recommended_minimum', models.PositiveIntegerField()),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=254)),
+                ("recommended_minimum", models.PositiveIntegerField()),
             ],
             options={
-                'ordering': ('name',),
-                'verbose_name_plural': 'Document Categories',
+                "ordering": ("name",),
+                "verbose_name_plural": "Document Categories",
             },
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0010_add_related_names_to_approval_fks.py b/hypha/apply/projects/migrations/0010_add_related_names_to_approval_fks.py
index 8bae011649d8504a7e77c3cb51548dc151b02b13..f349d14d99c69db080413c4745c3a90981cc3173 100644
--- a/hypha/apply/projects/migrations/0010_add_related_names_to_approval_fks.py
+++ b/hypha/apply/projects/migrations/0010_add_related_names_to_approval_fks.py
@@ -6,20 +6,27 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0009_add_approval'),
+        ("application_projects", "0009_add_approval"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='approval',
-            name='by',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='approvals', to=settings.AUTH_USER_MODEL),
+            model_name="approval",
+            name="by",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="approvals",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterField(
-            model_name='approval',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='approvals', to='application_projects.Project'),
+            model_name="approval",
+            name="project",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="approvals",
+                to="application_projects.Project",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0011_add_packet_file.py b/hypha/apply/projects/migrations/0011_add_packet_file.py
index 2091a75cc55e87b0d3e06174ca090edd393e2d61..71f5284d37be140b789cb8704037c366e8c28db2 100644
--- a/hypha/apply/projects/migrations/0011_add_packet_file.py
+++ b/hypha/apply/projects/migrations/0011_add_packet_file.py
@@ -6,20 +6,47 @@ import hypha.apply.projects.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0010_add_related_names_to_approval_fks'),
+        ("application_projects", "0010_add_related_names_to_approval_fks"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PacketFile',
+            name="PacketFile",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.TextField()),
-                ('document', models.FileField(upload_to=hypha.apply.projects.models.project.document_path)),
-                ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='packet_files', to='application_projects.DocumentCategory')),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='packet_files', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.TextField()),
+                (
+                    "document",
+                    models.FileField(
+                        upload_to=hypha.apply.projects.models.project.document_path
+                    ),
+                ),
+                (
+                    "category",
+                    models.ForeignKey(
+                        null=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="packet_files",
+                        to="application_projects.DocumentCategory",
+                    ),
+                ),
+                (
+                    "project",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="packet_files",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0012_adjust_storage_class.py b/hypha/apply/projects/migrations/0012_adjust_storage_class.py
index 2014f5fad64451973ba87d39d0968b59c4d65432..cc55a33aa70728dbf18885d6369258e6ad65b1f3 100644
--- a/hypha/apply/projects/migrations/0012_adjust_storage_class.py
+++ b/hypha/apply/projects/migrations/0012_adjust_storage_class.py
@@ -6,15 +6,17 @@ import hypha.apply.projects.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0011_add_packet_file'),
+        ("application_projects", "0011_add_packet_file"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='packetfile',
-            name='document',
-            field=models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.project.document_path),
+            model_name="packetfile",
+            name="document",
+            field=models.FileField(
+                storage=django.core.files.storage.FileSystemStorage(),
+                upload_to=hypha.apply.projects.models.project.document_path,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0013_add_contract.py b/hypha/apply/projects/migrations/0013_add_contract.py
index 7bc8973d77bbd309263e64a45e3f3d0ca0181b79..504d1b665ccae84f2abe7dd6a98801708c0ebb85 100644
--- a/hypha/apply/projects/migrations/0013_add_contract.py
+++ b/hypha/apply/projects/migrations/0013_add_contract.py
@@ -7,22 +7,49 @@ import hypha.apply.projects.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0012_adjust_storage_class'),
+        ("application_projects", "0012_adjust_storage_class"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Contract',
+            name="Contract",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('file', models.FileField(upload_to=hypha.apply.projects.models.project.contract_path)),
-                ('is_signed', models.BooleanField('Signed?', default=False)),
-                ('created_at', models.DateTimeField(auto_now_add=True)),
-                ('approver', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contracts', to=settings.AUTH_USER_MODEL)),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contracts', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "file",
+                    models.FileField(
+                        upload_to=hypha.apply.projects.models.project.contract_path
+                    ),
+                ),
+                ("is_signed", models.BooleanField("Signed?", default=False)),
+                ("created_at", models.DateTimeField(auto_now_add=True)),
+                (
+                    "approver",
+                    models.ForeignKey(
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="contracts",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "project",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="contracts",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0014_add_payment_related_models.py b/hypha/apply/projects/migrations/0014_add_payment_related_models.py
index 6d250951a2c5d0a80c9a78598c57d283099959b3..30b4e21f45593ed9b4ee704275a8d82884dea2fc 100644
--- a/hypha/apply/projects/migrations/0014_add_payment_related_models.py
+++ b/hypha/apply/projects/migrations/0014_add_payment_related_models.py
@@ -9,51 +9,135 @@ import hypha.apply.projects.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0013_add_contract'),
+        ("application_projects", "0013_add_contract"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PaymentApproval',
+            name="PaymentApproval",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created_at', models.DateTimeField(auto_now_add=True)),
-                ('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='payment_approvals', to=settings.AUTH_USER_MODEL)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("created_at", models.DateTimeField(auto_now_add=True)),
+                (
+                    "by",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="payment_approvals",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='PaymentReceipt',
+            name="PaymentReceipt",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('file', models.FileField(storage=django.core.files.storage.FileSystemStorage())),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "file",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage()
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='PaymentRequest',
+            name="PaymentRequest",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('invoice', models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.payment.invoice_path)),
-                ('value', models.DecimalField(decimal_places=2, default=0, max_digits=10, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))])),
-                ('requested_at', models.DateTimeField(auto_now_add=True)),
-                ('date_from', models.DateTimeField()),
-                ('date_to', models.DateTimeField()),
-                ('comment', models.TextField()),
-                ('status', models.TextField(choices=[('submitted', 'Submitted'), ('under_review', 'Under Review'), ('paid', 'Paid'), ('declined', 'Declined')], default='submitted')),
-                ('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='payment_requests', to=settings.AUTH_USER_MODEL)),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='payment_requests', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "invoice",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage(),
+                        upload_to=hypha.apply.projects.models.payment.invoice_path,
+                    ),
+                ),
+                (
+                    "value",
+                    models.DecimalField(
+                        decimal_places=2,
+                        default=0,
+                        max_digits=10,
+                        validators=[
+                            django.core.validators.MinValueValidator(Decimal("0.01"))
+                        ],
+                    ),
+                ),
+                ("requested_at", models.DateTimeField(auto_now_add=True)),
+                ("date_from", models.DateTimeField()),
+                ("date_to", models.DateTimeField()),
+                ("comment", models.TextField()),
+                (
+                    "status",
+                    models.TextField(
+                        choices=[
+                            ("submitted", "Submitted"),
+                            ("under_review", "Under Review"),
+                            ("paid", "Paid"),
+                            ("declined", "Declined"),
+                        ],
+                        default="submitted",
+                    ),
+                ),
+                (
+                    "by",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="payment_requests",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "project",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="payment_requests",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='paymentreceipt',
-            name='payment_request',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receipts', to='application_projects.PaymentRequest'),
+            model_name="paymentreceipt",
+            name="payment_request",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="receipts",
+                to="application_projects.PaymentRequest",
+            ),
         ),
         migrations.AddField(
-            model_name='paymentapproval',
-            name='request',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='approvals', to='application_projects.PaymentRequest'),
+            model_name="paymentapproval",
+            name="request",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="approvals",
+                to="application_projects.PaymentRequest",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0015_add_payment_request_changes_requested.py b/hypha/apply/projects/migrations/0015_add_payment_request_changes_requested.py
index 3d11bdabdbe040c017477e5c7663d203d7121a0b..05eb9150642008ff91269b21e61989d5061e7e1d 100644
--- a/hypha/apply/projects/migrations/0015_add_payment_request_changes_requested.py
+++ b/hypha/apply/projects/migrations/0015_add_payment_request_changes_requested.py
@@ -4,15 +4,23 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0014_add_payment_related_models'),
+        ("application_projects", "0014_add_payment_related_models"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='paymentrequest',
-            name='status',
-            field=models.TextField(choices=[('submitted', 'Submitted'), ('changes_requested', 'Changes Requested'), ('under_review', 'Under Review'), ('paid', 'Paid'), ('declined', 'Declined')], default='submitted'),
+            model_name="paymentrequest",
+            name="status",
+            field=models.TextField(
+                choices=[
+                    ("submitted", "Submitted"),
+                    ("changes_requested", "Changes Requested"),
+                    ("under_review", "Under Review"),
+                    ("paid", "Paid"),
+                    ("declined", "Declined"),
+                ],
+                default="submitted",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0016_add_project_settings.py b/hypha/apply/projects/migrations/0016_add_project_settings.py
index fcd5b8ae0ec1429ba00c827c432a079e768053e8..83af5d23f5c51ef36ee9cc74d3c46c491bb82aea 100644
--- a/hypha/apply/projects/migrations/0016_add_project_settings.py
+++ b/hypha/apply/projects/migrations/0016_add_project_settings.py
@@ -5,22 +5,36 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('application_projects', '0015_add_payment_request_changes_requested'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("application_projects", "0015_add_payment_request_changes_requested"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectSettings',
+            name="ProjectSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('compliance_email', models.TextField(verbose_name='Compliance Email')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("compliance_email", models.TextField(verbose_name="Compliance Email")),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0017_add_sent_to_compliance_at.py b/hypha/apply/projects/migrations/0017_add_sent_to_compliance_at.py
index 157528c41484389ea61408fc77bbda4a7697f1ae..247b0e979eec64359a3c1962fd17635059092b64 100644
--- a/hypha/apply/projects/migrations/0017_add_sent_to_compliance_at.py
+++ b/hypha/apply/projects/migrations/0017_add_sent_to_compliance_at.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0016_add_project_settings'),
+        ("application_projects", "0016_add_project_settings"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='sent_to_compliance_at',
+            model_name="project",
+            name="sent_to_compliance_at",
             field=models.DateTimeField(null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0018_projectapprovalform.py b/hypha/apply/projects/migrations/0018_projectapprovalform.py
index 917a0de13e057704ca287ae1370e94c459a856a3..a1c277de5ae81cce8b4a9731190798e7ff39e7f6 100644
--- a/hypha/apply/projects/migrations/0018_projectapprovalform.py
+++ b/hypha/apply/projects/migrations/0018_projectapprovalform.py
@@ -7,18 +7,455 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0017_add_sent_to_compliance_at'),
+        ("application_projects", "0017_add_sent_to_compliance_at"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectApprovalForm',
+            name="ProjectApprovalForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('form_fields', wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))])),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Custom", label="Section text/header"
+                                ),
+                            ),
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "number",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkbox",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "radios",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "dropdown",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkboxes",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "checkboxes",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Checkbox"
+                                                )
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "date",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "time",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TimeBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "datetime",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateTimeBlock(
+                                                required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "group_toggle",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                default=True, label="Required"
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Choice"
+                                                ),
+                                                help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                ),
+                            ),
+                            (
+                                "group_toggle_end",
+                                hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                                    group="Custom"
+                                ),
+                            ),
+                        ]
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0019_add_form_to_projects.py b/hypha/apply/projects/migrations/0019_add_form_to_projects.py
index 694b73b112e37a415d155fb7f3e0beb9acd014a1..225a63ae930b7d8d67b018638f19b4cf5c2786d9 100644
--- a/hypha/apply/projects/migrations/0019_add_form_to_projects.py
+++ b/hypha/apply/projects/migrations/0019_add_form_to_projects.py
@@ -9,20 +9,441 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0018_projectapprovalform'),
+        ("application_projects", "0018_projectapprovalform"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='form_data',
-            field=django.contrib.postgres.fields.jsonb.JSONField(default=dict, encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder),
+            model_name="project",
+            name="form_data",
+            field=django.contrib.postgres.fields.jsonb.JSONField(
+                default=dict,
+                encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder,
+            ),
         ),
         migrations.AddField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0020_rename_value_to_requested_value.py b/hypha/apply/projects/migrations/0020_rename_value_to_requested_value.py
index d3006c6ad30c780785475428b3c7d64c4f1b86ec..3d636b2ab7ec29e518f427b58ffb6a90cd17aec3 100644
--- a/hypha/apply/projects/migrations/0020_rename_value_to_requested_value.py
+++ b/hypha/apply/projects/migrations/0020_rename_value_to_requested_value.py
@@ -4,15 +4,14 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0019_add_form_to_projects'),
+        ("application_projects", "0019_add_form_to_projects"),
     ]
 
     operations = [
         migrations.RenameField(
-            model_name='paymentrequest',
-            old_name='value',
-            new_name='requested_value',
+            model_name="paymentrequest",
+            old_name="value",
+            new_name="requested_value",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0021_add_paid_value.py b/hypha/apply/projects/migrations/0021_add_paid_value.py
index a24f1cb74f29d7f8838b793bea2d9fcc02474b49..05dbf666fa2049089e4d02854103bf2740628a21 100644
--- a/hypha/apply/projects/migrations/0021_add_paid_value.py
+++ b/hypha/apply/projects/migrations/0021_add_paid_value.py
@@ -6,15 +6,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0020_rename_value_to_requested_value'),
+        ("application_projects", "0020_rename_value_to_requested_value"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='paymentrequest',
-            name='paid_value',
-            field=models.DecimalField(decimal_places=2, max_digits=10, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))]),
+            model_name="paymentrequest",
+            name="paid_value",
+            field=models.DecimalField(
+                decimal_places=2,
+                max_digits=10,
+                null=True,
+                validators=[django.core.validators.MinValueValidator(Decimal("0.01"))],
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0022_update_field_definitions_for_forms.py b/hypha/apply/projects/migrations/0022_update_field_definitions_for_forms.py
index 1dc0859652b4bcae9ae7932362d95642ecf9bf9b..1ad3c40a76c5dadc2d810949785ebc360b6510c8 100644
--- a/hypha/apply/projects/migrations/0022_update_field_definitions_for_forms.py
+++ b/hypha/apply/projects/migrations/0022_update_field_definitions_for_forms.py
@@ -7,20 +7,1024 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0021_add_paid_value'),
+        ("application_projects", "0021_add_paid_value"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectapprovalform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))]),
+            model_name="projectapprovalform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0023_ensure_contracts_uses_private_storage.py b/hypha/apply/projects/migrations/0023_ensure_contracts_uses_private_storage.py
index bd26175228abdda21f8df73df34697f306665631..12cffdf7c0e4f05c67a1078e621731aaae5cee7a 100644
--- a/hypha/apply/projects/migrations/0023_ensure_contracts_uses_private_storage.py
+++ b/hypha/apply/projects/migrations/0023_ensure_contracts_uses_private_storage.py
@@ -6,15 +6,17 @@ import hypha.apply.projects.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0022_update_field_definitions_for_forms'),
+        ("application_projects", "0022_update_field_definitions_for_forms"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='contract',
-            name='file',
-            field=models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.project.contract_path),
+            model_name="contract",
+            name="file",
+            field=models.FileField(
+                storage=django.core.files.storage.FileSystemStorage(),
+                upload_to=hypha.apply.projects.models.project.contract_path,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0024_allow_no_comments_on_pr.py b/hypha/apply/projects/migrations/0024_allow_no_comments_on_pr.py
index a694b4d9607c65c74d41dce65b1d7fe60f8288bd..1b8c13f1f6f5a7632c595cb769256c7993f6b7ed 100644
--- a/hypha/apply/projects/migrations/0024_allow_no_comments_on_pr.py
+++ b/hypha/apply/projects/migrations/0024_allow_no_comments_on_pr.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0023_ensure_contracts_uses_private_storage'),
+        ("application_projects", "0023_ensure_contracts_uses_private_storage"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='paymentrequest',
-            name='comment',
+            model_name="paymentrequest",
+            name="comment",
             field=models.TextField(blank=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0025_add_report_models.py b/hypha/apply/projects/migrations/0025_add_report_models.py
index 1c3069de3b057d647ee4bea6dc8db9a995c582b5..b13205a149afa39ca45fa0a1bae7986632f60449 100644
--- a/hypha/apply/projects/migrations/0025_add_report_models.py
+++ b/hypha/apply/projects/migrations/0025_add_report_models.py
@@ -7,58 +7,127 @@ import hypha.apply.projects.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0024_allow_no_comments_on_pr'),
+        ("application_projects", "0024_allow_no_comments_on_pr"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Report',
+            name="Report",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('public', models.BooleanField(default=True)),
-                ('end_date', models.DateField()),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reports', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("public", models.BooleanField(default=True)),
+                ("end_date", models.DateField()),
+                (
+                    "project",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="reports",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
             options={
-                'ordering': ('-end_date',),
+                "ordering": ("-end_date",),
             },
         ),
         migrations.CreateModel(
-            name='ReportConfig',
+            name="ReportConfig",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('schedule_start', models.DateField(null=True)),
-                ('occurrence', models.PositiveSmallIntegerField(default=1)),
-                ('frequency', models.CharField(choices=[('week', 'Weeks'), ('month', 'Months')], default='month', max_length=5)),
-                ('project', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='report_config', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("schedule_start", models.DateField(null=True)),
+                ("occurrence", models.PositiveSmallIntegerField(default=1)),
+                (
+                    "frequency",
+                    models.CharField(
+                        choices=[("week", "Weeks"), ("month", "Months")],
+                        default="month",
+                        max_length=5,
+                    ),
+                ),
+                (
+                    "project",
+                    models.OneToOneField(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="report_config",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='ReportPrivateFiles',
+            name="ReportPrivateFiles",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('document', models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.report.report_path)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "document",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage(),
+                        upload_to=hypha.apply.projects.models.report.report_path,
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='ReportVersion',
+            name="ReportVersion",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('submitted', models.DateTimeField()),
-                ('content', models.TextField()),
-                ('report', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='versions', to='application_projects.Report')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("submitted", models.DateTimeField()),
+                ("content", models.TextField()),
+                (
+                    "report",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="versions",
+                        to="application_projects.Report",
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='contract',
-            name='approved_at',
+            model_name="contract",
+            name="approved_at",
             field=models.DateTimeField(null=True),
         ),
         migrations.AddField(
-            model_name='reportprivatefiles',
-            name='report',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='application_projects.ReportVersion'),
+            model_name="reportprivatefiles",
+            name="report",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="files",
+                to="application_projects.ReportVersion",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0026_data_contract_approved_date.py b/hypha/apply/projects/migrations/0026_data_contract_approved_date.py
index 92ba2db6c134131359e3551ac9a5eec4b251152a..c66bc1d27db5fc68e3b38c059f6c3bf4ed3019ae 100644
--- a/hypha/apply/projects/migrations/0026_data_contract_approved_date.py
+++ b/hypha/apply/projects/migrations/0026_data_contract_approved_date.py
@@ -5,14 +5,13 @@ from django.db.models import F
 
 
 def copy_submitted_date(apps, schema_editor):
-    Contract = apps.get_model('application_projects', 'Contract')
-    Contract.objects.all().update(approved_at=F('created_at'))
+    Contract = apps.get_model("application_projects", "Contract")
+    Contract.objects.all().update(approved_at=F("created_at"))
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0025_add_report_models'),
+        ("application_projects", "0025_add_report_models"),
     ]
 
     operations = [
diff --git a/hypha/apply/projects/migrations/0027_report_current.py b/hypha/apply/projects/migrations/0027_report_current.py
index 5337aa8ba960084866ad169ed9acc0625ea8061a..3d22a521d9c1caa51371b40797498f3ab0684e82 100644
--- a/hypha/apply/projects/migrations/0027_report_current.py
+++ b/hypha/apply/projects/migrations/0027_report_current.py
@@ -5,15 +5,19 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0026_data_contract_approved_date'),
+        ("application_projects", "0026_data_contract_approved_date"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='report',
-            name='current',
-            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='live_for_report', to='application_projects.ReportVersion'),
+            model_name="report",
+            name="current",
+            field=models.OneToOneField(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="live_for_report",
+                to="application_projects.ReportVersion",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0028_report_draft.py b/hypha/apply/projects/migrations/0028_report_draft.py
index 8ff7c23512b5a5cdc28d6e4eabd0e2c75d3cc210..25fc1bacb9012230e12f309c86444de5604b5bf8 100644
--- a/hypha/apply/projects/migrations/0028_report_draft.py
+++ b/hypha/apply/projects/migrations/0028_report_draft.py
@@ -6,27 +6,36 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0027_report_current'),
+        ("application_projects", "0027_report_current"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='report',
-            name='draft',
-            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='draft_for_report', to='application_projects.ReportVersion'),
+            model_name="report",
+            name="draft",
+            field=models.OneToOneField(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="draft_for_report",
+                to="application_projects.ReportVersion",
+            ),
         ),
         migrations.AddField(
-            model_name='reportversion',
-            name='draft',
+            model_name="reportversion",
+            name="draft",
             field=models.BooleanField(default=False),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='reportversion',
-            name='author',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reports', to=settings.AUTH_USER_MODEL),
+            model_name="reportversion",
+            name="author",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="reports",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0029_report_submitted.py b/hypha/apply/projects/migrations/0029_report_submitted.py
index 635f0b796fed614a7adc5a0b34583c445df72221..a3d79fdd28e37f9f74dd225beda7216e2ca67a47 100644
--- a/hypha/apply/projects/migrations/0029_report_submitted.py
+++ b/hypha/apply/projects/migrations/0029_report_submitted.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0028_report_draft'),
+        ("application_projects", "0028_report_draft"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='report',
-            name='submitted',
+            model_name="report",
+            name="submitted",
             field=models.DateTimeField(null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0030_report_skipped.py b/hypha/apply/projects/migrations/0030_report_skipped.py
index 103f0df3f57e433fe568ed97770ba6c32085f531..9bac08dc024bb42a2815646bff92d733aea5763a 100644
--- a/hypha/apply/projects/migrations/0030_report_skipped.py
+++ b/hypha/apply/projects/migrations/0030_report_skipped.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0029_report_submitted'),
+        ("application_projects", "0029_report_submitted"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='report',
-            name='skipped',
+            model_name="report",
+            name="skipped",
             field=models.BooleanField(default=False),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0031_add_public_private_content.py b/hypha/apply/projects/migrations/0031_add_public_private_content.py
index c4af728a8736d4504e83693a75dbd1ecfc99c172..5b5849ef95f8e15f9040f283f09224cbef7bbc7e 100644
--- a/hypha/apply/projects/migrations/0031_add_public_private_content.py
+++ b/hypha/apply/projects/migrations/0031_add_public_private_content.py
@@ -4,25 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0030_report_skipped'),
+        ("application_projects", "0030_report_skipped"),
     ]
 
     operations = [
         migrations.RenameField(
-            model_name='reportversion',
-            old_name='content',
-            new_name='public_content',
+            model_name="reportversion",
+            old_name="content",
+            new_name="public_content",
         ),
         migrations.RemoveField(
-            model_name='report',
-            name='public',
+            model_name="report",
+            name="public",
         ),
         migrations.AddField(
-            model_name='reportversion',
-            name='private_content',
-            field=models.TextField(default=''),
+            model_name="reportversion",
+            name="private_content",
+            field=models.TextField(default=""),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0032_report_notified.py b/hypha/apply/projects/migrations/0032_report_notified.py
index ec7ae7bf0c846eb290df9950923434cc01a237bc..929daece20288357c156ea034904adda351a3b39 100644
--- a/hypha/apply/projects/migrations/0032_report_notified.py
+++ b/hypha/apply/projects/migrations/0032_report_notified.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0031_add_public_private_content'),
+        ("application_projects", "0031_add_public_private_content"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='report',
-            name='notified',
+            model_name="report",
+            name="notified",
             field=models.DateTimeField(null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0033_add_word_limit_to_text_blocks.py b/hypha/apply/projects/migrations/0033_add_word_limit_to_text_blocks.py
index acc961900cdd31654c0bee021de6085e130647b9..05b27abe4b06bac5cf2700feea508ea575541ee5 100644
--- a/hypha/apply/projects/migrations/0033_add_word_limit_to_text_blocks.py
+++ b/hypha/apply/projects/migrations/0033_add_word_limit_to_text_blocks.py
@@ -7,20 +7,1036 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0032_report_notified'),
+        ("application_projects", "0032_report_notified"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectapprovalform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))]),
+            model_name="projectapprovalform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0034_multi_input_char_block.py b/hypha/apply/projects/migrations/0034_multi_input_char_block.py
index e823e76f9aa6c33660c1945b098468dfbfb1b639..a1a7b2f0fd7e301162b416bc61256dad65a05350 100644
--- a/hypha/apply/projects/migrations/0034_multi_input_char_block.py
+++ b/hypha/apply/projects/migrations/0034_multi_input_char_block.py
@@ -7,20 +7,1148 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0033_add_word_limit_to_text_blocks'),
+        ("application_projects", "0033_add_word_limit_to_text_blocks"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectapprovalform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text/header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))]),
+            model_name="projectapprovalform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text/header"
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0035_add_heading_block_to_form_fields_block.py b/hypha/apply/projects/migrations/0035_add_heading_block_to_form_fields_block.py
index 582cde4ceabc0548ff6fb58cb98e417d6b07881a..5a0b07454959aacd7e92494079965cf8e6bc1e9a 100644
--- a/hypha/apply/projects/migrations/0035_add_heading_block_to_form_fields_block.py
+++ b/hypha/apply/projects/migrations/0035_add_heading_block_to_form_fields_block.py
@@ -7,20 +7,1198 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0034_multi_input_char_block'),
+        ("application_projects", "0034_multi_input_char_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectapprovalform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required')), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))]),
+            model_name="projectapprovalform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required"
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0036_add_vendor.py b/hypha/apply/projects/migrations/0036_add_vendor.py
index ee7aa313747e12de408216149b8abe181e9fc8a6..4d9d77c1a1479d6b530ffa64706c5077b6cb3943 100644
--- a/hypha/apply/projects/migrations/0036_add_vendor.py
+++ b/hypha/apply/projects/migrations/0036_add_vendor.py
@@ -8,123 +8,460 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0035_add_heading_block_to_form_fields_block'),
+        ("application_projects", "0035_add_heading_block_to_form_fields_block"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='BankInformation',
+            name="BankInformation",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('account_holder_name', models.CharField(max_length=150)),
-                ('account_routing_number', models.CharField(max_length=10)),
-                ('account_number', models.CharField(max_length=20)),
-                ('account_currency', models.CharField(max_length=10)),
-                ('need_extra_info', models.BooleanField(default=False)),
-                ('branch_address', models.TextField(blank=True, verbose_name='Address')),
-                ('nid_type', models.CharField(blank=True, max_length=25, verbose_name='National Identity Document Type')),
-                ('nid_number', models.CharField(blank=True, max_length=20, verbose_name='National Identity Document Number')),
-                ('iba_info', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bank_info', to='application_projects.BankInformation', verbose_name='Intermediary Bank Account Information')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("account_holder_name", models.CharField(max_length=150)),
+                ("account_routing_number", models.CharField(max_length=10)),
+                ("account_number", models.CharField(max_length=20)),
+                ("account_currency", models.CharField(max_length=10)),
+                ("need_extra_info", models.BooleanField(default=False)),
+                (
+                    "branch_address",
+                    models.TextField(blank=True, verbose_name="Address"),
+                ),
+                (
+                    "nid_type",
+                    models.CharField(
+                        blank=True,
+                        max_length=25,
+                        verbose_name="National Identity Document Type",
+                    ),
+                ),
+                (
+                    "nid_number",
+                    models.CharField(
+                        blank=True,
+                        max_length=20,
+                        verbose_name="National Identity Document Number",
+                    ),
+                ),
+                (
+                    "iba_info",
+                    models.OneToOneField(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="bank_info",
+                        to="application_projects.BankInformation",
+                        verbose_name="Intermediary Bank Account Information",
+                    ),
+                ),
             ],
         ),
         migrations.RemoveField(
-            model_name='project',
-            name='contact_address',
+            model_name="project",
+            name="contact_address",
         ),
         migrations.RemoveField(
-            model_name='project',
-            name='contact_email',
+            model_name="project",
+            name="contact_email",
         ),
         migrations.RemoveField(
-            model_name='project',
-            name='contact_legal_name',
+            model_name="project",
+            name="contact_legal_name",
         ),
         migrations.RemoveField(
-            model_name='project',
-            name='contact_phone',
+            model_name="project",
+            name="contact_phone",
         ),
         migrations.AddField(
-            model_name='projectsettings',
-            name='vendor_setup_required',
+            model_name="projectsettings",
+            name="vendor_setup_required",
             field=models.BooleanField(default=True),
         ),
         migrations.CreateModel(
-            name='VendorFormSettings',
+            name="VendorFormSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name_label', models.TextField(default='1. What is the name of the person/organisation on the contract?', verbose_name='label')),
-                ('name_help_text', wagtail.fields.RichTextField(blank=True, default='This is the party name in the contract.', verbose_name='help text')),
-                ('contractor_name_label', models.TextField(default="2. What is the individual's name who is signing the contract?", verbose_name='label')),
-                ('contractor_name_help_text', wagtail.fields.RichTextField(blank=True, default='This person is is authorised to sign contract on behalf of the person or organization named above.', verbose_name='help text')),
-                ('type_label', models.TextField(default='3. Is the bank account owned by the person or organisation in the Question 1 above?', verbose_name='label')),
-                ('type_help_text', wagtail.fields.RichTextField(blank=True, default='The name of the bank account must be the same as on the contract.', verbose_name='help text')),
-                ('required_to_pay_taxes_label', models.TextField(default='Is the organisation required to pay US taxes?', verbose_name='label')),
-                ('required_to_pay_taxes_help_text', wagtail.fields.RichTextField(blank=True, default='', verbose_name='help text')),
-                ('due_diligence_documents_label', models.TextField(default='Due Diligence Documents', verbose_name='label')),
-                ('due_diligence_documents_help_text', wagtail.fields.RichTextField(blank=True, default='Upload Due Diligence Documents. E.g. w8/w9 forms.', verbose_name='help text')),
-                ('account_holder_name_label', models.TextField(default='Bank Account Holder name', verbose_name='label')),
-                ('account_holder_name_help_text', wagtail.fields.RichTextField(blank=True, default='This name must be same as the person or organisation that signed the contract. This person is authorised to sign contracts on behalf of the person or organisation named above.', verbose_name='help text')),
-                ('account_routing_number_label', models.TextField(default='Bank Account Routing number', verbose_name='label')),
-                ('account_routing_number_help_text', wagtail.fields.RichTextField(blank=True, default='Depending on your country, this might be called the ACH, SWIFT, BIC or ABA number.', verbose_name='help text')),
-                ('account_number_label', models.TextField(default='Bank Account Number', verbose_name='label')),
-                ('account_number_help_text', wagtail.fields.RichTextField(blank=True, default='Depending on your country, this might be called the account number, IBAN, or BBAN number.', verbose_name='help text')),
-                ('account_currency_label', models.TextField(default='Bank Account Currency', verbose_name='label')),
-                ('account_currency_help_text', wagtail.fields.RichTextField(blank=True, default='This is the currency of this bank account.', verbose_name='help text')),
-                ('need_extra_info_label', models.TextField(default='Do you need to provide us with extra information?', verbose_name='label')),
-                ('need_extra_info_help_text', wagtail.fields.RichTextField(blank=True, default='', verbose_name='help text')),
-                ('branch_address_label', models.TextField(default='Bank Account Branch Address', verbose_name='label')),
-                ('branch_address_help_text', models.TextField(blank=True, default='The address of the bank branch where you have the bank account located(not the bank account holder address)', verbose_name='help text')),
-                ('ib_account_routing_number_label', models.TextField(default='Intermediary Bank Account Routing Number', verbose_name='label')),
-                ('ib_account_routing_number_help_text', wagtail.fields.RichTextField(blank=True, default='Depending on your country, this might be called ACH, SWIFT, BIC or ABA number', verbose_name='help text')),
-                ('ib_account_number_label', models.TextField(default='Intermediary Bank Account Number', verbose_name='label')),
-                ('ib_account_number_help_text', wagtail.fields.RichTextField(blank=True, default='Depending on your country, this might be called the account number, IBAN, or BBAN number', verbose_name='help text')),
-                ('ib_account_currency_label', models.TextField(default='Intermediary Bank Account Currency', verbose_name='label')),
-                ('ib_account_currency_help_text', wagtail.fields.RichTextField(blank=True, default='This is the currency of this bank account', verbose_name='help text')),
-                ('ib_branch_address_label', models.TextField(default='Intermediary Bank Branch Address', verbose_name='label')),
-                ('ib_branch_address_help_text', wagtail.fields.RichTextField(blank=True, default='Bank branch address(not the bank account holder address)', verbose_name='help text')),
-                ('nid_type_label', models.TextField(default='Account Holder National Identity Document Type', verbose_name='label')),
-                ('nid_type_help_text', wagtail.fields.RichTextField(blank=True, default='This could be a passport, a National Identity number, or other national identity document.', verbose_name='help text')),
-                ('nid_number_label', models.TextField(default='Account Holder National Identity Document Number', verbose_name='label')),
-                ('nid_number_help_text', wagtail.fields.RichTextField(blank=True, default='', verbose_name='help text')),
-                ('other_info_label', models.TextField(default='Other Information', verbose_name='label')),
-                ('other_info_help_text', wagtail.fields.RichTextField(blank=True, default='If you need to include other information not listed above, provide it here.', verbose_name='help text')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "name_label",
+                    models.TextField(
+                        default="1. What is the name of the person/organisation on the contract?",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "name_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="This is the party name in the contract.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "contractor_name_label",
+                    models.TextField(
+                        default="2. What is the individual's name who is signing the contract?",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "contractor_name_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="This person is is authorised to sign contract on behalf of the person or organization named above.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "type_label",
+                    models.TextField(
+                        default="3. Is the bank account owned by the person or organisation in the Question 1 above?",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "type_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="The name of the bank account must be the same as on the contract.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "required_to_pay_taxes_label",
+                    models.TextField(
+                        default="Is the organisation required to pay US taxes?",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "required_to_pay_taxes_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True, default="", verbose_name="help text"
+                    ),
+                ),
+                (
+                    "due_diligence_documents_label",
+                    models.TextField(
+                        default="Due Diligence Documents", verbose_name="label"
+                    ),
+                ),
+                (
+                    "due_diligence_documents_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="Upload Due Diligence Documents. E.g. w8/w9 forms.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "account_holder_name_label",
+                    models.TextField(
+                        default="Bank Account Holder name", verbose_name="label"
+                    ),
+                ),
+                (
+                    "account_holder_name_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="This name must be same as the person or organisation that signed the contract. This person is authorised to sign contracts on behalf of the person or organisation named above.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "account_routing_number_label",
+                    models.TextField(
+                        default="Bank Account Routing number", verbose_name="label"
+                    ),
+                ),
+                (
+                    "account_routing_number_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="Depending on your country, this might be called the ACH, SWIFT, BIC or ABA number.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "account_number_label",
+                    models.TextField(
+                        default="Bank Account Number", verbose_name="label"
+                    ),
+                ),
+                (
+                    "account_number_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="Depending on your country, this might be called the account number, IBAN, or BBAN number.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "account_currency_label",
+                    models.TextField(
+                        default="Bank Account Currency", verbose_name="label"
+                    ),
+                ),
+                (
+                    "account_currency_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="This is the currency of this bank account.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "need_extra_info_label",
+                    models.TextField(
+                        default="Do you need to provide us with extra information?",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "need_extra_info_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True, default="", verbose_name="help text"
+                    ),
+                ),
+                (
+                    "branch_address_label",
+                    models.TextField(
+                        default="Bank Account Branch Address", verbose_name="label"
+                    ),
+                ),
+                (
+                    "branch_address_help_text",
+                    models.TextField(
+                        blank=True,
+                        default="The address of the bank branch where you have the bank account located(not the bank account holder address)",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "ib_account_routing_number_label",
+                    models.TextField(
+                        default="Intermediary Bank Account Routing Number",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "ib_account_routing_number_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="Depending on your country, this might be called ACH, SWIFT, BIC or ABA number",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "ib_account_number_label",
+                    models.TextField(
+                        default="Intermediary Bank Account Number", verbose_name="label"
+                    ),
+                ),
+                (
+                    "ib_account_number_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="Depending on your country, this might be called the account number, IBAN, or BBAN number",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "ib_account_currency_label",
+                    models.TextField(
+                        default="Intermediary Bank Account Currency",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "ib_account_currency_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="This is the currency of this bank account",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "ib_branch_address_label",
+                    models.TextField(
+                        default="Intermediary Bank Branch Address", verbose_name="label"
+                    ),
+                ),
+                (
+                    "ib_branch_address_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="Bank branch address(not the bank account holder address)",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "nid_type_label",
+                    models.TextField(
+                        default="Account Holder National Identity Document Type",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "nid_type_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="This could be a passport, a National Identity number, or other national identity document.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "nid_number_label",
+                    models.TextField(
+                        default="Account Holder National Identity Document Number",
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "nid_number_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True, default="", verbose_name="help text"
+                    ),
+                ),
+                (
+                    "other_info_label",
+                    models.TextField(default="Other Information", verbose_name="label"),
+                ),
+                (
+                    "other_info_help_text",
+                    wagtail.fields.RichTextField(
+                        blank=True,
+                        default="If you need to include other information not listed above, provide it here.",
+                        verbose_name="help text",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='Vendor',
+            name="Vendor",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Creation time')),
-                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Update time')),
-                ('name', models.CharField(blank=True, max_length=150)),
-                ('contractor_name', models.CharField(blank=True, max_length=150)),
-                ('address', models.TextField(blank=True, verbose_name='Address')),
-                ('type', models.CharField(blank=True, choices=[('organization', 'Yes, the account belongs to the organisation above'), ('personal', 'No, it is a personal bank account')], max_length=15)),
-                ('required_to_pay_taxes', models.BooleanField(default=False)),
-                ('other_info', models.TextField(blank=True)),
-                ('user_has_updated_details', models.BooleanField(default=False)),
-                ('bank_info', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='application_projects.BankInformation')),
-                ('user', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='vendor', to=settings.AUTH_USER_MODEL)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "created_at",
+                    models.DateTimeField(
+                        auto_now_add=True, verbose_name="Creation time"
+                    ),
+                ),
+                (
+                    "updated_at",
+                    models.DateTimeField(auto_now=True, verbose_name="Update time"),
+                ),
+                ("name", models.CharField(blank=True, max_length=150)),
+                ("contractor_name", models.CharField(blank=True, max_length=150)),
+                ("address", models.TextField(blank=True, verbose_name="Address")),
+                (
+                    "type",
+                    models.CharField(
+                        blank=True,
+                        choices=[
+                            (
+                                "organization",
+                                "Yes, the account belongs to the organisation above",
+                            ),
+                            ("personal", "No, it is a personal bank account"),
+                        ],
+                        max_length=15,
+                    ),
+                ),
+                ("required_to_pay_taxes", models.BooleanField(default=False)),
+                ("other_info", models.TextField(blank=True)),
+                ("user_has_updated_details", models.BooleanField(default=False)),
+                (
+                    "bank_info",
+                    models.OneToOneField(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        to="application_projects.BankInformation",
+                    ),
+                ),
+                (
+                    "user",
+                    models.OneToOneField(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        related_name="vendor",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='DueDiligenceDocument',
+            name="DueDiligenceDocument",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('document', models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to='due_diligence_documents')),
-                ('vendor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='due_diligence_documents', to='application_projects.Vendor')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "document",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage(),
+                        upload_to="due_diligence_documents",
+                    ),
+                ),
+                (
+                    "vendor",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="due_diligence_documents",
+                        to="application_projects.Vendor",
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='project',
-            name='vendor',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='projects', to='application_projects.Vendor'),
+            model_name="project",
+            name="vendor",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="projects",
+                to="application_projects.Vendor",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0037_add_project_invoicing.py b/hypha/apply/projects/migrations/0037_add_project_invoicing.py
index 996bb3761dac2541915ff64afb3c7ddbc325bb3c..e56c5fe79386443a07ebf21c1571c4c4a19199e8 100644
--- a/hypha/apply/projects/migrations/0037_add_project_invoicing.py
+++ b/hypha/apply/projects/migrations/0037_add_project_invoicing.py
@@ -10,36 +10,116 @@ import hypha.apply.projects.models.payment
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0036_add_vendor'),
+        ("application_projects", "0036_add_vendor"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Invoice',
+            name="Invoice",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('date_from', models.DateTimeField()),
-                ('date_to', models.DateTimeField()),
-                ('amount', models.DecimalField(decimal_places=2, default=0, max_digits=10, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))])),
-                ('paid_value', models.DecimalField(decimal_places=2, max_digits=10, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))])),
-                ('document', models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.payment.invoice_path)),
-                ('requested_at', models.DateTimeField(auto_now_add=True)),
-                ('message_for_pm', models.TextField(blank=True)),
-                ('comment', models.TextField(blank=True)),
-                ('status', models.TextField(choices=[('submitted', 'Submitted'), ('changes_requested', 'Changes Requested'), ('under_review', 'Under Review'), ('paid', 'Paid'), ('declined', 'Declined')], default='submitted')),
-                ('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invoices', to=settings.AUTH_USER_MODEL)),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invoices', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("date_from", models.DateTimeField()),
+                ("date_to", models.DateTimeField()),
+                (
+                    "amount",
+                    models.DecimalField(
+                        decimal_places=2,
+                        default=0,
+                        max_digits=10,
+                        validators=[
+                            django.core.validators.MinValueValidator(Decimal("0.01"))
+                        ],
+                    ),
+                ),
+                (
+                    "paid_value",
+                    models.DecimalField(
+                        decimal_places=2,
+                        max_digits=10,
+                        null=True,
+                        validators=[
+                            django.core.validators.MinValueValidator(Decimal("0.01"))
+                        ],
+                    ),
+                ),
+                (
+                    "document",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage(),
+                        upload_to=hypha.apply.projects.models.payment.invoice_path,
+                    ),
+                ),
+                ("requested_at", models.DateTimeField(auto_now_add=True)),
+                ("message_for_pm", models.TextField(blank=True)),
+                ("comment", models.TextField(blank=True)),
+                (
+                    "status",
+                    models.TextField(
+                        choices=[
+                            ("submitted", "Submitted"),
+                            ("changes_requested", "Changes Requested"),
+                            ("under_review", "Under Review"),
+                            ("paid", "Paid"),
+                            ("declined", "Declined"),
+                        ],
+                        default="submitted",
+                    ),
+                ),
+                (
+                    "by",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="invoices",
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "project",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="invoices",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='SupportingDocument',
+            name="SupportingDocument",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('document', models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to='supporting_documents')),
-                ('invoice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='supporting_documents', to='application_projects.Invoice')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "document",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage(),
+                        upload_to="supporting_documents",
+                    ),
+                ),
+                (
+                    "invoice",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="supporting_documents",
+                        to="application_projects.Invoice",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0038_project_translateble.py b/hypha/apply/projects/migrations/0038_project_translateble.py
index 7748e2e84a8af561f45a00c0516d88f532bf2d51..058c7d94e98b9fd3688ec4073d6ab79bb42c619f 100644
--- a/hypha/apply/projects/migrations/0038_project_translateble.py
+++ b/hypha/apply/projects/migrations/0038_project_translateble.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0037_add_project_invoicing'),
+        ("application_projects", "0037_add_project_invoicing"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='invoice',
-            name='message_for_pm',
-            field=models.TextField(blank=True, verbose_name='Message'),
+            model_name="invoice",
+            name="message_for_pm",
+            field=models.TextField(blank=True, verbose_name="Message"),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0039_add_deliverables.py b/hypha/apply/projects/migrations/0039_add_deliverables.py
index 7fb5075207d5767a244ebcd9b3381020520c2221..2bfff8f03b4349a2d84b91093cc014e6311bd1b8 100644
--- a/hypha/apply/projects/migrations/0039_add_deliverables.py
+++ b/hypha/apply/projects/migrations/0039_add_deliverables.py
@@ -7,34 +7,86 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0038_project_translateble'),
+        ("application_projects", "0038_project_translateble"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Deliverable',
+            name="Deliverable",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.TextField()),
-                ('available_to_invoice', models.IntegerField(default=1)),
-                ('invoice_quantity', models.IntegerField(default=0, help_text='Quantity Selected on an Invoice')),
-                ('unit_price', models.DecimalField(decimal_places=2, max_digits=10, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))])),
-                ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='deliverables', to='application_projects.Project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.TextField()),
+                ("available_to_invoice", models.IntegerField(default=1)),
+                (
+                    "invoice_quantity",
+                    models.IntegerField(
+                        default=0, help_text="Quantity Selected on an Invoice"
+                    ),
+                ),
+                (
+                    "unit_price",
+                    models.DecimalField(
+                        decimal_places=2,
+                        max_digits=10,
+                        validators=[
+                            django.core.validators.MinValueValidator(Decimal("0.01"))
+                        ],
+                    ),
+                ),
+                (
+                    "project",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="deliverables",
+                        to="application_projects.Project",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='InvoiceDeliverable',
+            name="InvoiceDeliverable",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('quantity', models.IntegerField(default=0, help_text='Quantity Selected on an Invoice')),
-                ('deliverable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='deliverables', to='application_projects.Deliverable')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "quantity",
+                    models.IntegerField(
+                        default=0, help_text="Quantity Selected on an Invoice"
+                    ),
+                ),
+                (
+                    "deliverable",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="deliverables",
+                        to="application_projects.Deliverable",
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='invoice',
-            name='deliverables',
-            field=models.ManyToManyField(related_name='invoices', to='application_projects.InvoiceDeliverable'),
+            model_name="invoice",
+            name="deliverables",
+            field=models.ManyToManyField(
+                related_name="invoices", to="application_projects.InvoiceDeliverable"
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0040_remove_deliverable_invoice_quantity.py b/hypha/apply/projects/migrations/0040_remove_deliverable_invoice_quantity.py
index 2f6fcb31dc3ce59810b6e5f3cdc43e22327db086..cc149e2af0539727861e64319f840c8b0d0c801d 100644
--- a/hypha/apply/projects/migrations/0040_remove_deliverable_invoice_quantity.py
+++ b/hypha/apply/projects/migrations/0040_remove_deliverable_invoice_quantity.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0039_add_deliverables'),
+        ("application_projects", "0039_add_deliverables"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='deliverable',
-            name='invoice_quantity',
+            model_name="deliverable",
+            name="invoice_quantity",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0041_payment_requests_cleanup.py b/hypha/apply/projects/migrations/0041_payment_requests_cleanup.py
index 0663a83cfb699e49393d1bad684150c5b24a775e..95cec9ef4521eb8a3162ade1f58ce18a187250ba 100644
--- a/hypha/apply/projects/migrations/0041_payment_requests_cleanup.py
+++ b/hypha/apply/projects/migrations/0041_payment_requests_cleanup.py
@@ -4,31 +4,30 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0040_remove_deliverable_invoice_quantity'),
+        ("application_projects", "0040_remove_deliverable_invoice_quantity"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='paymentreceipt',
-            name='payment_request',
+            model_name="paymentreceipt",
+            name="payment_request",
         ),
         migrations.RemoveField(
-            model_name='paymentrequest',
-            name='by',
+            model_name="paymentrequest",
+            name="by",
         ),
         migrations.RemoveField(
-            model_name='paymentrequest',
-            name='project',
+            model_name="paymentrequest",
+            name="project",
         ),
         migrations.DeleteModel(
-            name='PaymentApproval',
+            name="PaymentApproval",
         ),
         migrations.DeleteModel(
-            name='PaymentReceipt',
+            name="PaymentReceipt",
         ),
         migrations.DeleteModel(
-            name='PaymentRequest',
+            name="PaymentRequest",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0042_delete_project_approval_form.py b/hypha/apply/projects/migrations/0042_delete_project_approval_form.py
index b4fe159b4dd58cc6a5301970283fe2fc177f93c5..0f8eb0621f26135e082f5873e22c2ad6f91f8fe9 100644
--- a/hypha/apply/projects/migrations/0042_delete_project_approval_form.py
+++ b/hypha/apply/projects/migrations/0042_delete_project_approval_form.py
@@ -9,9 +9,8 @@ def migrate_label_and_relations(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0041_payment_requests_cleanup'),
+        ("application_projects", "0041_payment_requests_cleanup"),
     ]
 
     operations = [
diff --git a/hypha/apply/projects/migrations/0043_remove_project_approval_form.py b/hypha/apply/projects/migrations/0043_remove_project_approval_form.py
index 35df01fee5a91ff117f1677e5d61a73ffd4257a6..889468d36d263416de46cecd7907d21e82c4cb35 100644
--- a/hypha/apply/projects/migrations/0043_remove_project_approval_form.py
+++ b/hypha/apply/projects/migrations/0043_remove_project_approval_form.py
@@ -4,13 +4,12 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0042_delete_project_approval_form'),
+        ("application_projects", "0042_delete_project_approval_form"),
     ]
 
     operations = [
         migrations.DeleteModel(
-            name='ProjectApprovalForm',
+            name="ProjectApprovalForm",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0044_add_resubmitted_status.py b/hypha/apply/projects/migrations/0044_add_resubmitted_status.py
index bde6ad06cc2d4a62e8d8fcef163013ceae4a77fc..3c58f3746e67f0c40d1fb7b345b0e451d3277cc8 100644
--- a/hypha/apply/projects/migrations/0044_add_resubmitted_status.py
+++ b/hypha/apply/projects/migrations/0044_add_resubmitted_status.py
@@ -4,15 +4,26 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0043_remove_project_approval_form'),
+        ("application_projects", "0043_remove_project_approval_form"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='invoice',
-            name='status',
-            field=models.TextField(choices=[('submitted', 'Submitted'), ('changes_requested', 'Changes Requested'), ('approved_by_staff', 'Approved by staff'), ('approved_by_finance1', 'Approved By Finance 1'), ('approved_by_finance2', 'Approved By Finance 2'), ('resubmitted', 'Resubmitted'), ('paid', 'Paid'), ('declined', 'Declined')], default='submitted'),
+            model_name="invoice",
+            name="status",
+            field=models.TextField(
+                choices=[
+                    ("submitted", "Submitted"),
+                    ("changes_requested", "Changes Requested"),
+                    ("approved_by_staff", "Approved by staff"),
+                    ("approved_by_finance1", "Approved By Finance 1"),
+                    ("approved_by_finance2", "Approved By Finance 2"),
+                    ("resubmitted", "Resubmitted"),
+                    ("paid", "Paid"),
+                    ("declined", "Declined"),
+                ],
+                default="submitted",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0045_use_fsm_field_for_status.py b/hypha/apply/projects/migrations/0045_use_fsm_field_for_status.py
index 7043630bb3745f8476b00e58a8351e3f9b49f122..a206e44b21977a7eacbe8aa7a556e9d036ea65b2 100644
--- a/hypha/apply/projects/migrations/0045_use_fsm_field_for_status.py
+++ b/hypha/apply/projects/migrations/0045_use_fsm_field_for_status.py
@@ -5,15 +5,29 @@ import django_fsm
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0044_add_resubmitted_status'),
+        ("application_projects", "0044_add_resubmitted_status"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='invoice',
-            name='status',
-            field=django_fsm.FSMField(choices=[('submitted', 'Submitted'), ('resubmitted', 'Resubmitted'), ('changes_requested_staff', 'Changes Requested by Staff'), ('changes_requested_finance_1', 'Changes Requested by Finance 1'), ('changes_requested_finance_2', 'Changes Requested by Finance 2'), ('approved_by_staff', 'Approved by Staff'), ('approved_by_finance_1', 'Approved by Finance 1'), ('approved_by_finance_2', 'Approved by Finance 2'), ('paid', 'Paid'), ('declined', 'Declined')], default='submitted', max_length=50),
+            model_name="invoice",
+            name="status",
+            field=django_fsm.FSMField(
+                choices=[
+                    ("submitted", "Submitted"),
+                    ("resubmitted", "Resubmitted"),
+                    ("changes_requested_staff", "Changes Requested by Staff"),
+                    ("changes_requested_finance_1", "Changes Requested by Finance 1"),
+                    ("changes_requested_finance_2", "Changes Requested by Finance 2"),
+                    ("approved_by_staff", "Approved by Staff"),
+                    ("approved_by_finance_1", "Approved by Finance 1"),
+                    ("approved_by_finance_2", "Approved by Finance 2"),
+                    ("paid", "Paid"),
+                    ("declined", "Declined"),
+                ],
+                default="submitted",
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0046_add_required_checks_field.py b/hypha/apply/projects/migrations/0046_add_required_checks_field.py
index 2ce8f695740440d6a4c29314ba0142b332d3c024..4a27d482f352a5dd0e92885e054b301e213aed7d 100644
--- a/hypha/apply/projects/migrations/0046_add_required_checks_field.py
+++ b/hypha/apply/projects/migrations/0046_add_required_checks_field.py
@@ -4,20 +4,21 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0045_use_fsm_field_for_status'),
+        ("application_projects", "0045_use_fsm_field_for_status"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='invoice',
-            name='valid_checks',
-            field=models.BooleanField(default=False, help_text='Valid OFAC, SAM, W8/W9 on file'),
+            model_name="invoice",
+            name="valid_checks",
+            field=models.BooleanField(
+                default=False, help_text="Valid OFAC, SAM, W8/W9 on file"
+            ),
         ),
         migrations.AddField(
-            model_name='invoice',
-            name='valid_checks_link',
-            field=models.URLField(blank=True, help_text='Link to SAM/OFAC/W8/W9'),
+            model_name="invoice",
+            name="valid_checks_link",
+            field=models.URLField(blank=True, help_text="Link to SAM/OFAC/W8/W9"),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0047_alter_project_form_data.py b/hypha/apply/projects/migrations/0047_alter_project_form_data.py
index 12c346ebb7af157f0ac42fe7e2d90372710dbc6f..92e98b6f89dae352c15f0604b41b92034e18af61 100644
--- a/hypha/apply/projects/migrations/0047_alter_project_form_data.py
+++ b/hypha/apply/projects/migrations/0047_alter_project_form_data.py
@@ -5,15 +5,17 @@ import hypha.apply.stream_forms.files
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0046_add_required_checks_field'),
+        ("application_projects", "0046_add_required_checks_field"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_data',
-            field=models.JSONField(default=dict, encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder),
+            model_name="project",
+            name="form_data",
+            field=models.JSONField(
+                default=dict,
+                encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0048_alter_project_value.py b/hypha/apply/projects/migrations/0048_alter_project_value.py
index ee1986ce4de5908e5ad951c64acec68388876293..2c1e2fd179d373e673a6654cf30e4f81df05a898 100644
--- a/hypha/apply/projects/migrations/0048_alter_project_value.py
+++ b/hypha/apply/projects/migrations/0048_alter_project_value.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0047_alter_project_form_data'),
+        ("application_projects", "0047_alter_project_form_data"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='value',
+            model_name="project",
+            name="value",
             field=models.PositiveIntegerField(default=0),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0049_add_fields_for_finance_integrations.py b/hypha/apply/projects/migrations/0049_add_fields_for_finance_integrations.py
index 08f99759d63225668f7c4bcc5c70245fcdb4cbae..5265d0c23f680a699a93c6682e6d0116ed0e9d90 100644
--- a/hypha/apply/projects/migrations/0049_add_fields_for_finance_integrations.py
+++ b/hypha/apply/projects/migrations/0049_add_fields_for_finance_integrations.py
@@ -4,30 +4,43 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0048_alter_project_value'),
+        ("application_projects", "0048_alter_project_value"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='deliverable',
-            name='external_id',
-            field=models.CharField(blank=True, help_text='ID of this deliverable at integrated payment service.', max_length=30),
+            model_name="deliverable",
+            name="external_id",
+            field=models.CharField(
+                blank=True,
+                help_text="ID of this deliverable at integrated payment service.",
+                max_length=30,
+            ),
         ),
         migrations.AddField(
-            model_name='deliverable',
-            name='extra_information',
-            field=models.JSONField(default=dict, help_text='More details of the deliverable at integrated payment service.'),
+            model_name="deliverable",
+            name="extra_information",
+            field=models.JSONField(
+                default=dict,
+                help_text="More details of the deliverable at integrated payment service.",
+            ),
         ),
         migrations.AddField(
-            model_name='project',
-            name='external_project_information',
-            field=models.JSONField(default=dict, help_text='More details of the project integrated at payment service.'),
+            model_name="project",
+            name="external_project_information",
+            field=models.JSONField(
+                default=dict,
+                help_text="More details of the project integrated at payment service.",
+            ),
         ),
         migrations.AddField(
-            model_name='project',
-            name='external_projectid',
-            field=models.CharField(blank=True, help_text='ID of this project at integrated payment service.', max_length=30),
+            model_name="project",
+            name="external_projectid",
+            field=models.CharField(
+                blank=True,
+                help_text="ID of this project at integrated payment service.",
+                max_length=30,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0050_add_new_invoice_status.py b/hypha/apply/projects/migrations/0050_add_new_invoice_status.py
index ebb9bfbf690b91a2ced19ddc019d2ec513268b73..2cd1e9d6dc8110cfd1478c7c18fad90a86520c11 100644
--- a/hypha/apply/projects/migrations/0050_add_new_invoice_status.py
+++ b/hypha/apply/projects/migrations/0050_add_new_invoice_status.py
@@ -5,15 +5,30 @@ import django_fsm
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0049_add_fields_for_finance_integrations'),
+        ("application_projects", "0049_add_fields_for_finance_integrations"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='invoice',
-            name='status',
-            field=django_fsm.FSMField(choices=[('submitted', 'Submitted'), ('resubmitted', 'Resubmitted'), ('changes_requested_staff', 'Changes Requested by Staff'), ('changes_requested_finance_1', 'Changes Requested by Finance 1'), ('changes_requested_finance_2', 'Changes Requested by Finance 2'), ('approved_by_staff', 'Approved by Staff'), ('approved_by_finance_1', 'Approved by Finance 1'), ('approved_by_finance_2', 'Approved by Finance 2'), ('paid', 'Paid'), ('converted', 'Converted'), ('declined', 'Declined')], default='submitted', max_length=50),
+            model_name="invoice",
+            name="status",
+            field=django_fsm.FSMField(
+                choices=[
+                    ("submitted", "Submitted"),
+                    ("resubmitted", "Resubmitted"),
+                    ("changes_requested_staff", "Changes Requested by Staff"),
+                    ("changes_requested_finance_1", "Changes Requested by Finance 1"),
+                    ("changes_requested_finance_2", "Changes Requested by Finance 2"),
+                    ("approved_by_staff", "Approved by Staff"),
+                    ("approved_by_finance_1", "Approved by Finance 1"),
+                    ("approved_by_finance_2", "Approved by Finance 2"),
+                    ("paid", "Paid"),
+                    ("converted", "Converted"),
+                    ("declined", "Declined"),
+                ],
+                default="submitted",
+                max_length=50,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py b/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py
index 11ad637d548ba6d70e8286efcb3f98d24703c04d..036bffa793e22f0c090fb461602935fbe5feee1b 100644
--- a/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py
+++ b/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py
@@ -4,22 +4,21 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0050_add_new_invoice_status'),
+        ("application_projects", "0050_add_new_invoice_status"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='invoice',
-            name='amount',
+            model_name="invoice",
+            name="amount",
         ),
         migrations.RemoveField(
-            model_name='invoice',
-            name='date_from',
+            model_name="invoice",
+            name="date_from",
         ),
         migrations.RemoveField(
-            model_name='invoice',
-            name='date_to',
+            model_name="invoice",
+            name="date_to",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0052_alter_project_form_fields.py b/hypha/apply/projects/migrations/0052_alter_project_form_fields.py
index c02dc98ac49f9038083c8408e46f9cecb3cc1903..1aafe403474e68e533763d0a6c5c92a5c3caef85 100644
--- a/hypha/apply/projects/migrations/0052_alter_project_form_fields.py
+++ b/hypha/apply/projects/migrations/0052_alter_project_form_fields.py
@@ -7,15 +7,604 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0051_remove_unnecessary_fields_from_invoice'),
+        ("application_projects", "0051_remove_unnecessary_fields_from_invoice"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0053_projectapprovalform.py b/hypha/apply/projects/migrations/0053_projectapprovalform.py
index 6c6850883733e3fdbe538da9b4a05a0903d0e758..56e9752d919b98560f632ca2fef2b572333bbe13 100644
--- a/hypha/apply/projects/migrations/0053_projectapprovalform.py
+++ b/hypha/apply/projects/migrations/0053_projectapprovalform.py
@@ -8,18 +8,631 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0052_alter_project_form_fields'),
+        ("application_projects", "0052_alter_project_form_fields"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectApprovalForm',
+            name="ProjectApprovalForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('form_fields', wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))])),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Custom", label="Section text"
+                                ),
+                            ),
+                            (
+                                "header_markup",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "heading_text",
+                                            wagtail.blocks.CharBlock(
+                                                form_classname="title", required=True
+                                            ),
+                                        ),
+                                        (
+                                            "size",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("h2", "H2"),
+                                                    ("h3", "H3"),
+                                                    ("h4", "H4"),
+                                                ]
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                    label="Section header",
+                                ),
+                            ),
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_inputs_char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "number_of_inputs",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=2, label="Max number of inputs"
+                                            ),
+                                        ),
+                                        (
+                                            "add_button_text",
+                                            wagtail.blocks.CharBlock(
+                                                default="Add new item", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "word_limit",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=1000, label="Word limit"
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "number",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkbox",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "radios",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "dropdown",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkboxes",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "checkboxes",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Checkbox"
+                                                )
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "date",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "time",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TimeBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "datetime",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateTimeBlock(
+                                                required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "group_toggle",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                default=True,
+                                                label="Required",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Choice"
+                                                ),
+                                                help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                ),
+                            ),
+                            (
+                                "group_toggle_end",
+                                hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                                    group="Custom"
+                                ),
+                            ),
+                        ]
+                    ),
+                ),
             ],
             bases=(hypha.apply.stream_forms.models.BaseStreamForm, models.Model),
         ),
diff --git a/hypha/apply/projects/migrations/0054_alter_project_form_fields.py b/hypha/apply/projects/migrations/0054_alter_project_form_fields.py
index 1f509b95a99f2a7aa7e6844ad3936f5760db4bf7..b5e350c8a4ca49cf2caa364212646d9e62af0fc4 100644
--- a/hypha/apply/projects/migrations/0054_alter_project_form_fields.py
+++ b/hypha/apply/projects/migrations/0054_alter_project_form_fields.py
@@ -7,15 +7,605 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0053_projectapprovalform'),
+        ("application_projects", "0053_projectapprovalform"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True, use_json_field=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(
+                            group="Custom", label="Section text"
+                        ),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0055_alter_project_status_add_pafreviewersrole.py b/hypha/apply/projects/migrations/0055_alter_project_status_add_pafreviewersrole.py
index 83d1dc25ac02f2070a4ce2592e404a5ce145df19..59fe1460d6ca71009c2788eb9e0299780d7bbdaf 100644
--- a/hypha/apply/projects/migrations/0055_alter_project_status_add_pafreviewersrole.py
+++ b/hypha/apply/projects/migrations/0055_alter_project_status_add_pafreviewersrole.py
@@ -6,33 +6,62 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0054_alter_project_form_fields'),
+        ("application_projects", "0054_alter_project_form_fields"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='paf_reviews_meta_data',
-            field=models.JSONField(default=dict, help_text='Reviewers role and their actions/comments'),
+            model_name="project",
+            name="paf_reviews_meta_data",
+            field=models.JSONField(
+                default=dict, help_text="Reviewers role and their actions/comments"
+            ),
         ),
         migrations.AlterField(
-            model_name='project',
-            name='status',
-            field=models.TextField(choices=[('committed', 'Committed'), ('waiting_for_approval', 'Waiting for Approval'), ('contracting', 'Contracting'), ('in_progress', 'In Progress'), ('closing', 'Closing'), ('complete', 'Complete')], default='committed'),
+            model_name="project",
+            name="status",
+            field=models.TextField(
+                choices=[
+                    ("committed", "Committed"),
+                    ("waiting_for_approval", "Waiting for Approval"),
+                    ("contracting", "Contracting"),
+                    ("in_progress", "In Progress"),
+                    ("closing", "Closing"),
+                    ("complete", "Complete"),
+                ],
+                default="committed",
+            ),
         ),
         migrations.CreateModel(
-            name='PAFReviewersRole',
+            name="PAFReviewersRole",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('role', models.CharField(max_length=200)),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='paf_reviewers_roles', to='application_projects.projectsettings')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                ("role", models.CharField(max_length=200)),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="paf_reviewers_roles",
+                        to="application_projects.projectsettings",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0056_packetfile_created_at.py b/hypha/apply/projects/migrations/0056_packetfile_created_at.py
index 6ade1ca1f248f218de0daeeaee07c71a4a19f0c1..1814193be76cc6ee702bae1427c8a40ec069d824 100644
--- a/hypha/apply/projects/migrations/0056_packetfile_created_at.py
+++ b/hypha/apply/projects/migrations/0056_packetfile_created_at.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0055_alter_project_status_add_pafreviewersrole'),
+        ("application_projects", "0055_alter_project_status_add_pafreviewersrole"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='packetfile',
-            name='created_at',
+            model_name="packetfile",
+            name="created_at",
             field=models.DateField(auto_now_add=True, null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0057_alter_report_config.py b/hypha/apply/projects/migrations/0057_alter_report_config.py
index fc64c2d4baa8f9e17d9a45f4b393028a57a3c7bf..777582469289277b239dc0058c9a2258cf61a444 100644
--- a/hypha/apply/projects/migrations/0057_alter_report_config.py
+++ b/hypha/apply/projects/migrations/0057_alter_report_config.py
@@ -4,25 +4,28 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0056_packetfile_created_at'),
+        ("application_projects", "0056_packetfile_created_at"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='reportconfig',
-            name='disable_reporting',
+            model_name="reportconfig",
+            name="disable_reporting",
             field=models.BooleanField(default=False),
         ),
         migrations.AddField(
-            model_name='reportconfig',
-            name='does_not_repeat',
+            model_name="reportconfig",
+            name="does_not_repeat",
             field=models.BooleanField(default=False),
         ),
         migrations.AlterField(
-            model_name='reportconfig',
-            name='frequency',
-            field=models.CharField(choices=[('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')], default='month', max_length=6),
+            model_name="reportconfig",
+            name="frequency",
+            field=models.CharField(
+                choices=[("week", "Weeks"), ("month", "Months"), ("year", "Years")],
+                default="month",
+                max_length=6,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0058_project_ready_for_final_approval.py b/hypha/apply/projects/migrations/0058_project_ready_for_final_approval.py
index 6d582b36aa781f084d6220eaeed966721349cf46..b09a1614ea1212a49e120625c936f9223f5d057e 100644
--- a/hypha/apply/projects/migrations/0058_project_ready_for_final_approval.py
+++ b/hypha/apply/projects/migrations/0058_project_ready_for_final_approval.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0057_alter_report_config'),
+        ("application_projects", "0057_alter_report_config"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='project',
-            name='ready_for_final_approval',
+            model_name="project",
+            name="ready_for_final_approval",
             field=models.BooleanField(blank=True, default=False),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0059_set_ready_for_final_approval.py b/hypha/apply/projects/migrations/0059_set_ready_for_final_approval.py
index 998833eb842adf88aeeb6d57a9138a7099c1577a..b0c6c3d15b60789073a5e60a836d35e3b51e1f8a 100644
--- a/hypha/apply/projects/migrations/0059_set_ready_for_final_approval.py
+++ b/hypha/apply/projects/migrations/0059_set_ready_for_final_approval.py
@@ -8,28 +8,29 @@ def is_paf_approved_by_all_reviewers(project, paf_reviewers_count):
         return True
     elif paf_reviewers_count == len(project.paf_reviews_meta_data):
         for paf_review_data in project.paf_reviews_meta_data.values():
-            if paf_review_data['status'] == 'request_change':
+            if paf_review_data["status"] == "request_change":
                 return False
         return True
     return False
 
 
 def set_value_to_ready_for_final_approval(apps, schema_editor):
-    Project = apps.get_model('application_projects', 'Project')
-    PAFReviewersRole = apps.get_model('application_projects', 'PAFReviewersRole')
-
-    for project in Project.objects.filter(status='waiting_for_approval', ready_for_final_approval=False):
-        if is_paf_approved_by_all_reviewers(project, PAFReviewersRole.objects.all().count()):
+    Project = apps.get_model("application_projects", "Project")
+    PAFReviewersRole = apps.get_model("application_projects", "PAFReviewersRole")
+
+    for project in Project.objects.filter(
+        status="waiting_for_approval", ready_for_final_approval=False
+    ):
+        if is_paf_approved_by_all_reviewers(
+            project, PAFReviewersRole.objects.all().count()
+        ):
             project.ready_for_final_approval = True
-            project.save(update_fields={'ready_for_final_approval'})
+            project.save(update_fields={"ready_for_final_approval"})
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0058_project_ready_for_final_approval'),
+        ("application_projects", "0058_project_ready_for_final_approval"),
     ]
 
-    operations = [
-        migrations.RunPython(set_value_to_ready_for_final_approval)
-    ]
+    operations = [migrations.RunPython(set_value_to_ready_for_final_approval)]
diff --git a/hypha/apply/projects/migrations/0060_auto_20230116_0712.py b/hypha/apply/projects/migrations/0060_auto_20230116_0712.py
index 9fd43c77448fa5e5e654e2f7047759179b8be1d5..90565f6f0cf07d8a7b2fe840dae8240a974580ee 100644
--- a/hypha/apply/projects/migrations/0060_auto_20230116_0712.py
+++ b/hypha/apply/projects/migrations/0060_auto_20230116_0712.py
@@ -4,29 +4,34 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0059_set_ready_for_final_approval'),
+        ("application_projects", "0059_set_ready_for_final_approval"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='projectsettings',
-            name='compliance_email',
+            model_name="projectsettings",
+            name="compliance_email",
         ),
         migrations.AddField(
-            model_name='projectsettings',
-            name='contracting_gp_email',
-            field=models.TextField(blank=True, null=True, verbose_name='Contracting Group Email'),
+            model_name="projectsettings",
+            name="contracting_gp_email",
+            field=models.TextField(
+                blank=True, null=True, verbose_name="Contracting Group Email"
+            ),
         ),
         migrations.AddField(
-            model_name='projectsettings',
-            name='finance_gp_email',
-            field=models.TextField(blank=True, null=True, verbose_name='Finance Group Email'),
+            model_name="projectsettings",
+            name="finance_gp_email",
+            field=models.TextField(
+                blank=True, null=True, verbose_name="Finance Group Email"
+            ),
         ),
         migrations.AddField(
-            model_name='projectsettings',
-            name='staff_gp_email',
-            field=models.TextField(blank=True, null=True, verbose_name='Staff Group Email'),
+            model_name="projectsettings",
+            name="staff_gp_email",
+            field=models.TextField(
+                blank=True, null=True, verbose_name="Staff Group Email"
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0061_remove_checks.py b/hypha/apply/projects/migrations/0061_remove_checks.py
index aa8f99526b5ec724d504aea6aecbb0bd6dc370f2..f73b2b29a7e99dbdb85380f6bc85a8204a4e313b 100644
--- a/hypha/apply/projects/migrations/0061_remove_checks.py
+++ b/hypha/apply/projects/migrations/0061_remove_checks.py
@@ -4,18 +4,17 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0060_auto_20230116_0712'),
+        ("application_projects", "0060_auto_20230116_0712"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='invoice',
-            name='valid_checks',
+            model_name="invoice",
+            name="valid_checks",
         ),
         migrations.RemoveField(
-            model_name='invoice',
-            name='valid_checks_link',
+            model_name="invoice",
+            name="valid_checks_link",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0062_auto_20230228_1218.py b/hypha/apply/projects/migrations/0062_auto_20230228_1218.py
index 88656c52b88d2e2b49777ea16723045fbb84e797..b27261a63bb89fdb14efff512db375700490c73f 100644
--- a/hypha/apply/projects/migrations/0062_auto_20230228_1218.py
+++ b/hypha/apply/projects/migrations/0062_auto_20230228_1218.py
@@ -7,53 +7,77 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('auth', '0012_alter_user_first_name_max_length'),
-        ('application_projects', '0061_remove_checks'),
+        ("auth", "0012_alter_user_first_name_max_length"),
+        ("application_projects", "0061_remove_checks"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PAFApprovals',
+            name="PAFApprovals",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('approved', models.BooleanField(default=False)),
-                ('created_at', models.DateTimeField(auto_now_add=True)),
-                ('updated_at', models.DateTimeField()),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("approved", models.BooleanField(default=False)),
+                ("created_at", models.DateTimeField(auto_now_add=True)),
+                ("updated_at", models.DateTimeField()),
             ],
         ),
         migrations.RenameField(
-            model_name='pafreviewersrole',
-            old_name='role',
-            new_name='label',
+            model_name="pafreviewersrole",
+            old_name="role",
+            new_name="label",
         ),
         migrations.AddField(
-            model_name='pafreviewersrole',
-            name='user_roles',
-            field=modelcluster.fields.ParentalManyToManyField(help_text="Only selected group's users will be listed for this PAFReviewerRole", related_name='paf_reviewers_roles', to='auth.Group', verbose_name='user groups'),
+            model_name="pafreviewersrole",
+            name="user_roles",
+            field=modelcluster.fields.ParentalManyToManyField(
+                help_text="Only selected group's users will be listed for this PAFReviewerRole",
+                related_name="paf_reviewers_roles",
+                to="auth.Group",
+                verbose_name="user groups",
+            ),
         ),
         migrations.DeleteModel(
-            name='Approval',
+            name="Approval",
         ),
         migrations.AddField(
-            model_name='pafapprovals',
-            name='paf_reviewer_role',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='paf_approvals', to='application_projects.pafreviewersrole'),
+            model_name="pafapprovals",
+            name="paf_reviewer_role",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="paf_approvals",
+                to="application_projects.pafreviewersrole",
+            ),
         ),
         migrations.AddField(
-            model_name='pafapprovals',
-            name='project',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='paf_approvals', to='application_projects.project'),
+            model_name="pafapprovals",
+            name="project",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="paf_approvals",
+                to="application_projects.project",
+            ),
         ),
         migrations.AddField(
-            model_name='pafapprovals',
-            name='user',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='paf_approvals', to=settings.AUTH_USER_MODEL),
+            model_name="pafapprovals",
+            name="user",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="paf_approvals",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='pafapprovals',
-            unique_together={('project', 'paf_reviewer_role')},
+            name="pafapprovals",
+            unique_together={("project", "paf_reviewer_role")},
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0063_projectsettings_paf_approval_sequential.py b/hypha/apply/projects/migrations/0063_projectsettings_paf_approval_sequential.py
index e515c33bb3cd18a1d9e03b4f31e81aa3a0cde9a2..b82a6c8be263cb92b84d9ff0fbae8cf55985651e 100644
--- a/hypha/apply/projects/migrations/0063_projectsettings_paf_approval_sequential.py
+++ b/hypha/apply/projects/migrations/0063_projectsettings_paf_approval_sequential.py
@@ -4,15 +4,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0062_auto_20230228_1218'),
+        ("application_projects", "0062_auto_20230228_1218"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='projectsettings',
-            name='paf_approval_sequential',
-            field=models.BooleanField(default=True, help_text='Uncheck it to approve PAF parallely'),
+            model_name="projectsettings",
+            name="paf_approval_sequential",
+            field=models.BooleanField(
+                default=True, help_text="Uncheck it to approve PAF parallely"
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0064_alter_pafapprovals_options.py b/hypha/apply/projects/migrations/0064_alter_pafapprovals_options.py
index 2a510daa187896fb9d844656510eaaa5cb39c605..76de84eb2e879d5359dd76d834ee4774b9f4f073 100644
--- a/hypha/apply/projects/migrations/0064_alter_pafapprovals_options.py
+++ b/hypha/apply/projects/migrations/0064_alter_pafapprovals_options.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0063_projectsettings_paf_approval_sequential'),
+        ("application_projects", "0063_projectsettings_paf_approval_sequential"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='pafapprovals',
-            options={'ordering': ['paf_reviewer_role__sort_order']},
+            name="pafapprovals",
+            options={"ordering": ["paf_reviewer_role__sort_order"]},
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0065_remove_project_ready_for_final_approval.py b/hypha/apply/projects/migrations/0065_remove_project_ready_for_final_approval.py
index 57218a08210cb31d9ac5b0825068f72c0b2268d4..3a255edccf9c3e416e09b45b4fc32c346d39bfec 100644
--- a/hypha/apply/projects/migrations/0065_remove_project_ready_for_final_approval.py
+++ b/hypha/apply/projects/migrations/0065_remove_project_ready_for_final_approval.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0064_alter_pafapprovals_options'),
+        ("application_projects", "0064_alter_pafapprovals_options"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='project',
-            name='ready_for_final_approval',
+            model_name="project",
+            name="ready_for_final_approval",
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0066_projectsowform.py b/hypha/apply/projects/migrations/0066_projectsowform.py
index 531791015ea0eede6c9dfb931a7338fd7b1f01d7..affc81bdd5201cfd2c6050fb6870ffb57e602221 100644
--- a/hypha/apply/projects/migrations/0066_projectsowform.py
+++ b/hypha/apply/projects/migrations/0066_projectsowform.py
@@ -8,21 +8,635 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0065_remove_project_ready_for_final_approval'),
+        ("application_projects", "0065_remove_project_ready_for_final_approval"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectSOWForm',
+            name="ProjectSOWForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('form_fields', wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], use_json_field=None)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Custom", label="Section text"
+                                ),
+                            ),
+                            (
+                                "header_markup",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "heading_text",
+                                            wagtail.blocks.CharBlock(
+                                                form_classname="title", required=True
+                                            ),
+                                        ),
+                                        (
+                                            "size",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("h2", "H2"),
+                                                    ("h3", "H3"),
+                                                    ("h4", "H4"),
+                                                ]
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                    label="Section header",
+                                ),
+                            ),
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_inputs_char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "number_of_inputs",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=2, label="Max number of inputs"
+                                            ),
+                                        ),
+                                        (
+                                            "add_button_text",
+                                            wagtail.blocks.CharBlock(
+                                                default="Add new item", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "word_limit",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=1000, label="Word limit"
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "number",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkbox",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "radios",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "dropdown",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkboxes",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "checkboxes",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Checkbox"
+                                                )
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "date",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "time",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TimeBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "datetime",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateTimeBlock(
+                                                required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "group_toggle",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                default=True,
+                                                label="Required",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Choice"
+                                                ),
+                                                help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                ),
+                            ),
+                            (
+                                "group_toggle_end",
+                                hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                                    group="Custom"
+                                ),
+                            ),
+                        ],
+                        use_json_field=None,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
             bases=(hypha.apply.stream_forms.models.BaseStreamForm, models.Model),
         ),
diff --git a/hypha/apply/projects/migrations/0067_projectsow.py b/hypha/apply/projects/migrations/0067_projectsow.py
index 200d73d5b298e2d69fdef78057da3efa4cf4721b..e8e1a6f9df3a1664c9535ce417b789e79361f8ee 100644
--- a/hypha/apply/projects/migrations/0067_projectsow.py
+++ b/hypha/apply/projects/migrations/0067_projectsow.py
@@ -11,20 +11,652 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0066_projectsowform'),
+        ("application_projects", "0066_projectsowform"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectSOW',
+            name="ProjectSOW",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('form_data', models.JSONField(default=dict, encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder)),
-                ('form_fields', wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Section text')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True, use_json_field=True)),
-                ('project', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='sow', to='application_projects.project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "form_data",
+                    models.JSONField(
+                        default=dict,
+                        encoder=hypha.apply.stream_forms.files.StreamFieldDataEncoder,
+                    ),
+                ),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Custom", label="Section text"
+                                ),
+                            ),
+                            (
+                                "header_markup",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "heading_text",
+                                            wagtail.blocks.CharBlock(
+                                                form_classname="title", required=True
+                                            ),
+                                        ),
+                                        (
+                                            "size",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("h2", "H2"),
+                                                    ("h3", "H3"),
+                                                    ("h4", "H4"),
+                                                ]
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                    label="Section header",
+                                ),
+                            ),
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_inputs_char",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "number_of_inputs",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=2, label="Max number of inputs"
+                                            ),
+                                        ),
+                                        (
+                                            "add_button_text",
+                                            wagtail.blocks.CharBlock(
+                                                default="Add new item", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "word_limit",
+                                            wagtail.blocks.IntegerBlock(
+                                                default=1000, label="Word limit"
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "number",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkbox",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.BooleanBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "radios",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "dropdown",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(label="Choice")
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "checkboxes",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "checkboxes",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Checkbox"
+                                                )
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "date",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "time",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TimeBlock(required=False),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "datetime",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.DateTimeBlock(
+                                                required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "multi_file",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ],
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "group_toggle",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "help_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Help link", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                default=True,
+                                                label="Required",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "choices",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.CharBlock(
+                                                    label="Choice"
+                                                ),
+                                                help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                            ),
+                                        ),
+                                    ],
+                                    group="Custom",
+                                ),
+                            ),
+                            (
+                                "group_toggle_end",
+                                hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                                    group="Custom"
+                                ),
+                            ),
+                        ],
+                        null=True,
+                        use_json_field=True,
+                    ),
+                ),
+                (
+                    "project",
+                    models.OneToOneField(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="sow",
+                        to="application_projects.project",
+                    ),
+                ),
             ],
-            bases=(hypha.apply.stream_forms.models.BaseStreamForm, hypha.apply.funds.models.mixins.AccessFormData, models.Model),
+            bases=(
+                hypha.apply.stream_forms.models.BaseStreamForm,
+                hypha.apply.funds.models.mixins.AccessFormData,
+                models.Model,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0068_rename_section_text_field.py b/hypha/apply/projects/migrations/0068_rename_section_text_field.py
index 973f22f8af4826bbea3dcb0385059ac0532cd042..d1b64dcc3419253033804d22914fe95595f708a7 100644
--- a/hypha/apply/projects/migrations/0068_rename_section_text_field.py
+++ b/hypha/apply/projects/migrations/0068_rename_section_text_field.py
@@ -7,30 +7,2383 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0067_projectsow'),
+        ("application_projects", "0067_projectsow"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True, use_json_field=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectapprovalform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], use_json_field=None),
+            model_name="projectapprovalform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                use_json_field=None,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectsow',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], null=True, use_json_field=True),
+            model_name="projectsow",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                null=True,
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectsowform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom'))], use_json_field=None),
+            model_name="projectsowform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                ],
+                use_json_field=None,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0069_contractpacketfile_contractdocumentcategory.py b/hypha/apply/projects/migrations/0069_contractpacketfile_contractdocumentcategory.py
index 7b9bf4af17b3bb5f021dbd4a4d2693cc39dab723..214f76188f73ab7e41a626437dec9c0a6ace96d9 100644
--- a/hypha/apply/projects/migrations/0069_contractpacketfile_contractdocumentcategory.py
+++ b/hypha/apply/projects/migrations/0069_contractpacketfile_contractdocumentcategory.py
@@ -7,51 +7,92 @@ import hypha.apply.projects.models.project
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0068_rename_section_text_field'),
+        ("application_projects", "0068_rename_section_text_field"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ContractDocumentCategory',
+            name="ContractDocumentCategory",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=254)),
-                ('recommended_minimum', models.PositiveIntegerField()),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=254)),
+                ("recommended_minimum", models.PositiveIntegerField()),
             ],
             options={
-                'verbose_name_plural': 'Contract Document Categories',
-                'ordering': ('name',),
+                "verbose_name_plural": "Contract Document Categories",
+                "ordering": ("name",),
             },
         ),
         migrations.AlterModelOptions(
-            name='documentcategory',
-            options={'ordering': ('name',), 'verbose_name_plural': 'Project Document Categories'},
+            name="documentcategory",
+            options={
+                "ordering": ("name",),
+                "verbose_name_plural": "Project Document Categories",
+            },
         ),
         migrations.RemoveField(
-            model_name='contract',
-            name='is_signed',
+            model_name="contract",
+            name="is_signed",
         ),
         migrations.AddField(
-            model_name='contract',
-            name='signed_by_applicant',
-            field=models.BooleanField(default=False, verbose_name='Counter Signed?'),
+            model_name="contract",
+            name="signed_by_applicant",
+            field=models.BooleanField(default=False, verbose_name="Counter Signed?"),
         ),
         migrations.AddField(
-            model_name='project',
-            name='submitted_contract_documents',
-            field=models.BooleanField(default=False, verbose_name='Submit Contracting Documents'),
+            model_name="project",
+            name="submitted_contract_documents",
+            field=models.BooleanField(
+                default=False, verbose_name="Submit Contracting Documents"
+            ),
         ),
         migrations.CreateModel(
-            name='ContractPacketFile',
+            name="ContractPacketFile",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.TextField()),
-                ('document', models.FileField(storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.project.contract_document_path)),
-                ('created_at', models.DateField(auto_now_add=True, null=True)),
-                ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contract_packet_files', to='application_projects.contractdocumentcategory')),
-                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contract_packet_files', to='application_projects.project')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.TextField()),
+                (
+                    "document",
+                    models.FileField(
+                        storage=django.core.files.storage.FileSystemStorage(),
+                        upload_to=hypha.apply.projects.models.project.contract_document_path,
+                    ),
+                ),
+                ("created_at", models.DateField(auto_now_add=True, null=True)),
+                (
+                    "category",
+                    models.ForeignKey(
+                        null=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="contract_packet_files",
+                        to="application_projects.contractdocumentcategory",
+                    ),
+                ),
+                (
+                    "project",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="contract_packet_files",
+                        to="application_projects.project",
+                    ),
+                ),
             ],
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0070_auto_20230327_1109.py b/hypha/apply/projects/migrations/0070_auto_20230327_1109.py
index ec02b2130d4e16ee4a484684c52f8b0644972413..3a804a273b0b5479be3c31c9bf0ebd0985343d46 100644
--- a/hypha/apply/projects/migrations/0070_auto_20230327_1109.py
+++ b/hypha/apply/projects/migrations/0070_auto_20230327_1109.py
@@ -4,25 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0069_contractpacketfile_contractdocumentcategory'),
+        ("application_projects", "0069_contractpacketfile_contractdocumentcategory"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='contract',
-            name='updated_at',
+            model_name="contract",
+            name="updated_at",
             field=models.DateTimeField(null=True),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='uploaded_by_applicant_at',
+            model_name="contract",
+            name="uploaded_by_applicant_at",
             field=models.DateTimeField(null=True),
         ),
         migrations.AddField(
-            model_name='contract',
-            name='uploaded_by_contractor_at',
+            model_name="contract",
+            name="uploaded_by_contractor_at",
             field=models.DateTimeField(null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0071_add_customformfields_to_paf_and_sow.py b/hypha/apply/projects/migrations/0071_add_customformfields_to_paf_and_sow.py
index e6a6d389813b2b32de9fd736d0bd0f1b298d41cc..00b915029b278059757cf73aeb3c1b4ff9d74eae 100644
--- a/hypha/apply/projects/migrations/0071_add_customformfields_to_paf_and_sow.py
+++ b/hypha/apply/projects/migrations/0071_add_customformfields_to_paf_and_sow.py
@@ -7,30 +7,2719 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0070_auto_20230327_1109'),
+        ("application_projects", "0070_auto_20230327_1109"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields'))], null=True, use_json_field=True),
+            model_name="project",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                ],
+                null=True,
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectapprovalform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields'))], use_json_field=True),
+            model_name="projectapprovalform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectsow',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields'))], null=True, use_json_field=True),
+            model_name="projectsow",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                ],
+                null=True,
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='projectsowform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('text_markup', wagtail.blocks.RichTextBlock(group='Custom', label='Paragraph')), ('header_markup', wagtail.blocks.StructBlock([('heading_text', wagtail.blocks.CharBlock(form_classname='title', required=True)), ('size', wagtail.blocks.ChoiceBlock(choices=[('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')]))], group='Custom', label='Section header')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('multi_inputs_char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False)), ('number_of_inputs', wagtail.blocks.IntegerBlock(default=2, label='Max number of inputs')), ('add_button_text', wagtail.blocks.CharBlock(default='Add new item', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('number', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('radios', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('checkboxes', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('checkboxes', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Checkbox')))], group='Fields')), ('date', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateBlock(required=False))], group='Fields')), ('time', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TimeBlock(required=False))], group='Fields')), ('datetime', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.DateTimeBlock(required=False))], group='Fields')), ('image', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('multi_file', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('group_toggle', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(default=True, label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice'), help_text='Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.'))], group='Custom')), ('group_toggle_end', hypha.apply.stream_forms.blocks.GroupToggleEndBlock(group='Custom')), ('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields'))], use_json_field=True),
+            model_name="projectsowform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Custom", label="Paragraph"),
+                    ),
+                    (
+                        "header_markup",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "heading_text",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title", required=True
+                                    ),
+                                ),
+                                (
+                                    "size",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[
+                                            ("h2", "H2"),
+                                            ("h3", "H3"),
+                                            ("h4", "H4"),
+                                        ]
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                            label="Section header",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_inputs_char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "number_of_inputs",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=2, label="Max number of inputs"
+                                    ),
+                                ),
+                                (
+                                    "add_button_text",
+                                    wagtail.blocks.CharBlock(
+                                        default="Add new item", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "number",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "radios",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkboxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "checkboxes",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Checkbox")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "date",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "time",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "datetime",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.DateTimeBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "multi_file",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "group_toggle",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        default=True, label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice"),
+                                        help_text="Please create only two choices for toggle. First choice will revel the group and the second hide it. Additional choices will be ignored.",
+                                    ),
+                                ),
+                            ],
+                            group="Custom",
+                        ),
+                    ),
+                    (
+                        "group_toggle_end",
+                        hypha.apply.stream_forms.blocks.GroupToggleEndBlock(
+                            group="Custom"
+                        ),
+                    ),
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0072_pafapprovals_approved_at.py b/hypha/apply/projects/migrations/0072_pafapprovals_approved_at.py
index 7de4db38924b5fd4e2d86a12d7dd709863e34a35..f3a5128c30c167e0c3fc211f81afe5732afa624f 100644
--- a/hypha/apply/projects/migrations/0072_pafapprovals_approved_at.py
+++ b/hypha/apply/projects/migrations/0072_pafapprovals_approved_at.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0071_add_customformfields_to_paf_and_sow'),
+        ("application_projects", "0071_add_customformfields_to_paf_and_sow"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='pafapprovals',
-            name='approved_at',
+            model_name="pafapprovals",
+            name="approved_at",
             field=models.DateTimeField(blank=True, null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0073_alter_project_status.py b/hypha/apply/projects/migrations/0073_alter_project_status.py
index 8f88000aa17c7bf48060bd971e08826bb2087f7b..9025aa979b70b2403073020c997bad15a6cc29af 100644
--- a/hypha/apply/projects/migrations/0073_alter_project_status.py
+++ b/hypha/apply/projects/migrations/0073_alter_project_status.py
@@ -4,15 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0072_pafapprovals_approved_at'),
+        ("application_projects", "0072_pafapprovals_approved_at"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='project',
-            name='status',
-            field=models.TextField(choices=[('draft', 'Draft'), ('waiting_for_approval', 'Waiting for Approval'), ('contracting', 'Contracting'), ('in_progress', 'In Progress'), ('closing', 'Closing'), ('complete', 'Complete')], default='draft'),
+            model_name="project",
+            name="status",
+            field=models.TextField(
+                choices=[
+                    ("draft", "Draft"),
+                    ("waiting_for_approval", "Waiting for Approval"),
+                    ("contracting", "Contracting"),
+                    ("in_progress", "In Progress"),
+                    ("closing", "Closing"),
+                    ("complete", "Complete"),
+                ],
+                default="draft",
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0074_update_projects_status_committed_to_draft.py b/hypha/apply/projects/migrations/0074_update_projects_status_committed_to_draft.py
index 66dbbd60f7f067a7b387411f7cb6f5d0bfa4b04f..47488495b93eb1ff1e6f43a934ab3ee36d596229 100644
--- a/hypha/apply/projects/migrations/0074_update_projects_status_committed_to_draft.py
+++ b/hypha/apply/projects/migrations/0074_update_projects_status_committed_to_draft.py
@@ -4,19 +4,16 @@ from django.db import migrations
 
 
 def update_committed_project_status_to_draft(apps, schema_editor):
-    Project = apps.get_model('application_projects', 'Project')
+    Project = apps.get_model("application_projects", "Project")
 
-    for project in Project.objects.filter(status='committed'):
-        project.status = 'draft'
-        project.save(update_fields={'status'})
+    for project in Project.objects.filter(status="committed"):
+        project.status = "draft"
+        project.save(update_fields={"status"})
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0073_alter_project_status'),
+        ("application_projects", "0073_alter_project_status"),
     ]
 
-    operations = [
-        migrations.RunPython(update_committed_project_status_to_draft)
-    ]
+    operations = [migrations.RunPython(update_committed_project_status_to_draft)]
diff --git a/hypha/apply/projects/migrations/0075_alter_pafapprovals_user.py b/hypha/apply/projects/migrations/0075_alter_pafapprovals_user.py
index 32369c66bb6c4004b7e75fdc095cb96e651ca907..86e02b34709c8dd655c96281c7a7d2ca65cffecd 100644
--- a/hypha/apply/projects/migrations/0075_alter_pafapprovals_user.py
+++ b/hypha/apply/projects/migrations/0075_alter_pafapprovals_user.py
@@ -6,16 +6,21 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('application_projects', '0074_update_projects_status_committed_to_draft'),
+        ("application_projects", "0074_update_projects_status_committed_to_draft"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='pafapprovals',
-            name='user',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paf_approvals', to=settings.AUTH_USER_MODEL),
+            model_name="pafapprovals",
+            name="user",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="paf_approvals",
+                to=settings.AUTH_USER_MODEL,
+            ),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0076_alter_projectdocument_and_contractdocument_category.py b/hypha/apply/projects/migrations/0076_alter_projectdocument_and_contractdocument_category.py
index c00f82f070a2d19ecd5609188a4e00081a16c385..fc785ee66482d1cf51f51dc91bb925b6659048d0 100644
--- a/hypha/apply/projects/migrations/0076_alter_projectdocument_and_contractdocument_category.py
+++ b/hypha/apply/projects/migrations/0076_alter_projectdocument_and_contractdocument_category.py
@@ -6,52 +6,67 @@ import hypha.apply.projects.models.project
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('application_projects', '0075_alter_pafapprovals_user'),
+        ("application_projects", "0075_alter_pafapprovals_user"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='contractdocumentcategory',
-            options={'ordering': ('-required', 'name'), 'verbose_name_plural': 'Contract Document Categories'},
+            name="contractdocumentcategory",
+            options={
+                "ordering": ("-required", "name"),
+                "verbose_name_plural": "Contract Document Categories",
+            },
         ),
         migrations.AlterModelOptions(
-            name='documentcategory',
-            options={'ordering': ('-required', 'name'), 'verbose_name_plural': 'Project Document Categories'},
+            name="documentcategory",
+            options={
+                "ordering": ("-required", "name"),
+                "verbose_name_plural": "Project Document Categories",
+            },
         ),
         migrations.AlterModelOptions(
-            name='packetfile',
-            options={'ordering': ('-created_at',)},
+            name="packetfile",
+            options={"ordering": ("-created_at",)},
         ),
         migrations.AddField(
-            model_name='contractdocumentcategory',
-            name='required',
+            model_name="contractdocumentcategory",
+            name="required",
             field=models.BooleanField(default=True),
         ),
         migrations.AddField(
-            model_name='contractdocumentcategory',
-            name='template',
-            field=models.FileField(blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.project.contract_document_template_path),
+            model_name="contractdocumentcategory",
+            name="template",
+            field=models.FileField(
+                blank=True,
+                null=True,
+                storage=django.core.files.storage.FileSystemStorage(),
+                upload_to=hypha.apply.projects.models.project.contract_document_template_path,
+            ),
         ),
         migrations.AddField(
-            model_name='documentcategory',
-            name='required',
+            model_name="documentcategory",
+            name="required",
             field=models.BooleanField(default=False),
         ),
         migrations.AddField(
-            model_name='documentcategory',
-            name='template',
-            field=models.FileField(blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(), upload_to=hypha.apply.projects.models.project.document_template_path),
+            model_name="documentcategory",
+            name="template",
+            field=models.FileField(
+                blank=True,
+                null=True,
+                storage=django.core.files.storage.FileSystemStorage(),
+                upload_to=hypha.apply.projects.models.project.document_template_path,
+            ),
         ),
         migrations.AlterField(
-            model_name='contractdocumentcategory',
-            name='recommended_minimum',
+            model_name="contractdocumentcategory",
+            name="recommended_minimum",
             field=models.PositiveIntegerField(blank=True, null=True),
         ),
         migrations.AlterField(
-            model_name='documentcategory',
-            name='recommended_minimum',
+            model_name="documentcategory",
+            name="recommended_minimum",
             field=models.PositiveIntegerField(blank=True, null=True),
         ),
     ]
diff --git a/hypha/apply/projects/migrations/0077_alter_invoice_status.py b/hypha/apply/projects/migrations/0077_alter_invoice_status.py
new file mode 100644
index 0000000000000000000000000000000000000000..65669731f24960d32fdb09928f859cd4ec24ffca
--- /dev/null
+++ b/hypha/apply/projects/migrations/0077_alter_invoice_status.py
@@ -0,0 +1,36 @@
+# Generated by Django 3.2.19 on 2023-06-22 05:12
+
+from django.db import migrations
+import django_fsm
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        (
+            "application_projects",
+            "0076_alter_projectdocument_and_contractdocument_category",
+        ),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="invoice",
+            name="status",
+            field=django_fsm.FSMField(
+                choices=[
+                    ("submitted", "Submitted"),
+                    ("resubmitted", "Resubmitted"),
+                    ("changes_requested_staff", "Changes Requested by Staff"),
+                    ("changes_requested_finance_1", "Changes Requested by Finance 1"),
+                    ("changes_requested_finance_2", "Changes Requested by Finance 2"),
+                    ("approved_by_staff", "Approved by Staff"),
+                    ("approved_by_finance_1", "Approved by Finance 1"),
+                    ("approved_by_finance_2", "Approved by Finance 2"),
+                    ("paid", "Paid"),
+                    ("declined", "Declined"),
+                ],
+                default="submitted",
+                max_length=50,
+            ),
+        ),
+    ]
diff --git a/hypha/apply/projects/migrations/0078_update_project_statuses.py b/hypha/apply/projects/migrations/0078_update_project_statuses.py
new file mode 100644
index 0000000000000000000000000000000000000000..4af72d711e7c47b1352ae0cfae44c5f763f71193
--- /dev/null
+++ b/hypha/apply/projects/migrations/0078_update_project_statuses.py
@@ -0,0 +1,40 @@
+# Generated by Django 3.2.19 on 2023-07-19 11:54
+
+from django.db import migrations, models
+
+
+def update_project_statuses(apps, schema_editor):
+    Project = apps.get_model("application_projects", "Project")
+
+    for project in Project.objects.filter(status="waiting_for_approval"):
+        project.status = "internal_approval"
+        project.save(update_fields={"status"})
+
+    for project in Project.objects.filter(status="in_progress"):
+        project.status = "invoicing_and_reporting"
+        project.save()
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("application_projects", "0077_alter_invoice_status"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="project",
+            name="status",
+            field=models.TextField(
+                choices=[
+                    ("draft", "Draft"),
+                    ("internal_approval", "Internal approval"),
+                    ("contracting", "Contracting"),
+                    ("invoicing_and_reporting", "Invoicing and reporting"),
+                    ("closing", "Closing"),
+                    ("complete", "Complete"),
+                ],
+                default="draft",
+            ),
+        ),
+        migrations.RunPython(update_project_statuses),
+    ]
diff --git a/hypha/apply/projects/migrations/0079_alter_invoice_add_fields.py b/hypha/apply/projects/migrations/0079_alter_invoice_add_fields.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f69c510d8e00f87425fc407af52ac7562f8eded
--- /dev/null
+++ b/hypha/apply/projects/migrations/0079_alter_invoice_add_fields.py
@@ -0,0 +1,32 @@
+# Generated by Django 3.2.19 on 2023-07-23 13:17
+
+from decimal import Decimal
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("application_projects", "0078_update_project_statuses"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="invoice",
+            name="invoice_amount",
+            field=models.DecimalField(
+                decimal_places=2,
+                max_digits=10,
+                null=True,
+                validators=[django.core.validators.MinValueValidator(Decimal("0.01"))],
+                verbose_name="Invoice amount",
+            ),
+        ),
+        migrations.AddField(
+            model_name="invoice",
+            name="invoice_number",
+            field=models.CharField(
+                max_length=50, null=True, verbose_name="Invoice number"
+            ),
+        ),
+    ]
diff --git a/hypha/apply/projects/models/__init__.py b/hypha/apply/projects/models/__init__.py
index 0b802842d7c1eb02f19be6d12f42c1280b50087f..5e289c2031b104c9a347b36be36a1e3520d10d88 100644
--- a/hypha/apply/projects/models/__init__.py
+++ b/hypha/apply/projects/models/__init__.py
@@ -16,26 +16,26 @@ from .report import Report, ReportConfig, ReportPrivateFiles, ReportVersion
 from .vendor import BankInformation, DueDiligenceDocument, Vendor, VendorFormSettings
 
 __all__ = [
-    'Project',
-    'ProjectApprovalForm',
-    'ProjectSOWForm',
-    'ProjectSettings',
-    'PAFApprovals',
-    'Contract',
-    'PacketFile',
-    'ContractPacketFile',
-    'DocumentCategory',
-    'ContractDocumentCategory',
-    'Report',
-    'ReportVersion',
-    'ReportPrivateFiles',
-    'ReportConfig',
-    'Vendor',
-    'VendorFormSettings',
-    'BankInformation',
-    'DueDiligenceDocument',
-    'Invoice',
-    'SupportingDocument',
-    'Deliverable',
-    'InvoiceDeliverable',
+    "Project",
+    "ProjectApprovalForm",
+    "ProjectSOWForm",
+    "ProjectSettings",
+    "PAFApprovals",
+    "Contract",
+    "PacketFile",
+    "ContractPacketFile",
+    "DocumentCategory",
+    "ContractDocumentCategory",
+    "Report",
+    "ReportVersion",
+    "ReportPrivateFiles",
+    "ReportConfig",
+    "Vendor",
+    "VendorFormSettings",
+    "BankInformation",
+    "DueDiligenceDocument",
+    "Invoice",
+    "SupportingDocument",
+    "Deliverable",
+    "InvoiceDeliverable",
 ]
diff --git a/hypha/apply/projects/models/payment.py b/hypha/apply/projects/models/payment.py
index 40ebfff2ea062cb4dec638a04f5ff91ad5e40361..952ec3264c4ce33b345111c042efca24fa28dea8 100644
--- a/hypha/apply/projects/models/payment.py
+++ b/hypha/apply/projects/models/payment.py
@@ -15,44 +15,56 @@ from django_fsm import FSMField, transition
 
 from hypha.apply.utils.storage import PrivateStorage
 
-SUBMITTED = 'submitted'
-RESUBMITTED = 'resubmitted'
-CHANGES_REQUESTED_BY_STAFF = 'changes_requested_staff'
-CHANGES_REQUESTED_BY_FINANCE_1 = 'changes_requested_finance_1'
-CHANGES_REQUESTED_BY_FINANCE_2 = 'changes_requested_finance_2'
-APPROVED_BY_STAFF = 'approved_by_staff'
-APPROVED_BY_FINANCE_1 = 'approved_by_finance_1'
-APPROVED_BY_FINANCE_2 = 'approved_by_finance_2'
-CONVERTED = 'converted'
-PAID = 'paid'
-DECLINED = 'declined'
+SUBMITTED = "submitted"
+RESUBMITTED = "resubmitted"
+CHANGES_REQUESTED_BY_STAFF = "changes_requested_staff"
+CHANGES_REQUESTED_BY_FINANCE_1 = "changes_requested_finance_1"
+CHANGES_REQUESTED_BY_FINANCE_2 = "changes_requested_finance_2"
+APPROVED_BY_STAFF = "approved_by_staff"
+APPROVED_BY_FINANCE_1 = "approved_by_finance_1"
+APPROVED_BY_FINANCE_2 = "approved_by_finance_2"
+PAID = "paid"
+DECLINED = "declined"
 
 INVOICE_STATUS_CHOICES = [
-    (SUBMITTED, _('Submitted')),
-    (RESUBMITTED, _('Resubmitted')),
-    (CHANGES_REQUESTED_BY_STAFF, _('Changes Requested by Staff')),
-    (CHANGES_REQUESTED_BY_FINANCE_1, _('Changes Requested by Finance 1')),
-    (CHANGES_REQUESTED_BY_FINANCE_2, _('Changes Requested by Finance 2')),
-    (APPROVED_BY_STAFF, _('Approved by Staff')),
-    (APPROVED_BY_FINANCE_1, _('Approved by Finance 1')),
-    (APPROVED_BY_FINANCE_2, _('Approved by Finance 2')),
-    (PAID, _('Paid')),
-    (CONVERTED, _('Converted')),
-    (DECLINED, _('Declined')),
+    (SUBMITTED, _("Submitted")),
+    (RESUBMITTED, _("Resubmitted")),
+    (CHANGES_REQUESTED_BY_STAFF, _("Changes Requested by Staff")),
+    (CHANGES_REQUESTED_BY_FINANCE_1, _("Changes Requested by Finance 1")),
+    (CHANGES_REQUESTED_BY_FINANCE_2, _("Changes Requested by Finance 2")),
+    (APPROVED_BY_STAFF, _("Approved by Staff")),
+    (APPROVED_BY_FINANCE_1, _("Approved by Finance 1")),
+    (APPROVED_BY_FINANCE_2, _("Approved by Finance 2")),
+    (PAID, _("Paid")),
+    (DECLINED, _("Declined")),
 ]
 
 # All invoice statuses that allows invoice to be transition directly to RESUBMITTED.
 INVOICE_TRANISTION_TO_RESUBMITTED = [
-    SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_STAFF,
-    CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2,
+    SUBMITTED,
+    RESUBMITTED,
+    CHANGES_REQUESTED_BY_STAFF,
+    CHANGES_REQUESTED_BY_FINANCE_1,
+    CHANGES_REQUESTED_BY_FINANCE_2,
 ]
 
 INVOICE_STATUS_PM_CHOICES = [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED]
-INVOICE_STATUS_FINANCE_1_CHOICES = [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1, CONVERTED, PAID]
+INVOICE_STATUS_FINANCE_1_CHOICES = [
+    CHANGES_REQUESTED_BY_FINANCE_1,
+    APPROVED_BY_FINANCE_1,
+    PAID,
+]
 INVOICE_STATUS_FINANCE_2_CHOICES = []
 if settings.INVOICE_EXTENDED_WORKFLOW:
-    INVOICE_STATUS_FINANCE_1_CHOICES = [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1]
-    INVOICE_STATUS_FINANCE_2_CHOICES = [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2, CONVERTED, PAID]
+    INVOICE_STATUS_FINANCE_1_CHOICES = [
+        CHANGES_REQUESTED_BY_FINANCE_1,
+        APPROVED_BY_FINANCE_1,
+    ]
+    INVOICE_STATUS_FINANCE_2_CHOICES = [
+        CHANGES_REQUESTED_BY_FINANCE_2,
+        APPROVED_BY_FINANCE_2,
+        PAID,
+    ]
 
 
 def invoice_status_user_choices(user):
@@ -66,7 +78,7 @@ def invoice_status_user_choices(user):
 
 
 def invoice_path(instance, filename):
-    return f'projects/{instance.project_id}/payment_invoices/{filename}'
+    return f"projects/{instance.project_id}/payment_invoices/{filename}"
 
 
 class InvoiceQueryset(models.QuerySet):
@@ -89,12 +101,16 @@ class InvoiceQueryset(models.QuerySet):
 
     def for_finance_1(self):
         if settings.INVOICE_EXTENDED_WORKFLOW:
-            return self.filter(status__in=[APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_2])
-        return self.filter(status__in=[APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1, CONVERTED])
+            return self.filter(
+                status__in=[APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_2]
+            )
+        return self.filter(status__in=[APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1])
 
     def for_finance_2(self):
         if settings.INVOICE_EXTENDED_WORKFLOW:
-            return self.filter(status__in=[APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CONVERTED])
+            return self.filter(
+                status__in=[APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2]
+            )
         return []
 
     def rejected(self):
@@ -104,24 +120,23 @@ class InvoiceQueryset(models.QuerySet):
         return self.exclude(status=DECLINED)
 
     def total_value(self, field):
-        return self.aggregate(total=Coalesce(Sum(field), Value(0), output_field=models.DecimalField()))['total']
+        return self.aggregate(
+            total=Coalesce(Sum(field), Value(0), output_field=models.DecimalField())
+        )["total"]
 
     def paid_value(self):
-        return self.filter(status=PAID).total_value('paid_value')
+        return self.filter(status=PAID).total_value("paid_value")
 
     def unpaid_value(self):
-        return self.filter(~Q(status=PAID)).total_value('paid_value')
+        return self.filter(~Q(status=PAID)).total_value("paid_value")
 
 
 class InvoiceDeliverable(models.Model):
     deliverable = models.ForeignKey(
-        'Deliverable',
-        on_delete=models.CASCADE,
-        related_name='deliverables'
+        "Deliverable", on_delete=models.CASCADE, related_name="deliverables"
     )
     quantity = models.IntegerField(
-        help_text=_('Quantity Selected on an Invoice'),
-        default=0
+        help_text=_("Quantity Selected on an Invoice"), default=0
     )
 
     wagtail_reference_index_ignore = True
@@ -131,42 +146,54 @@ class InvoiceDeliverable(models.Model):
 
     def get_absolute_api_url(self):
         return reverse(
-            'api:v1:remove-deliverables',
-            kwargs={'pk': self.pk, 'invoice_pk': self.pk}
+            "api:v1:remove-deliverables", kwargs={"pk": self.pk, "invoice_pk": self.pk}
         )
 
 
 class Invoice(models.Model):
-    project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="invoices")
-    by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="invoices")
+    project = models.ForeignKey(
+        "Project", on_delete=models.CASCADE, related_name="invoices"
+    )
+    by = models.ForeignKey(
+        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="invoices"
+    )
     paid_value = models.DecimalField(
         max_digits=10,
         decimal_places=2,
-        validators=[MinValueValidator(decimal.Decimal('0.01'))],
-        null=True
+        validators=[MinValueValidator(decimal.Decimal("0.01"))],
+        null=True,
     )
     document = models.FileField(upload_to=invoice_path, storage=PrivateStorage())
     requested_at = models.DateTimeField(auto_now_add=True)
-    message_for_pm = models.TextField(blank=True, verbose_name=_('Message'))
+    message_for_pm = models.TextField(blank=True, verbose_name=_("Message"))
     comment = models.TextField(blank=True)
-    status = FSMField(default=SUBMITTED, choices=INVOICE_STATUS_CHOICES)
-    deliverables = ManyToManyField(
-        'InvoiceDeliverable',
-        related_name='invoices'
+    invoice_number = models.CharField(
+        max_length=50, null=True, verbose_name=_("Invoice number")
     )
+    invoice_amount = models.DecimalField(
+        max_digits=10,
+        decimal_places=2,
+        validators=[MinValueValidator(decimal.Decimal("0.01"))],
+        null=True,
+        verbose_name=_("Invoice amount"),
+    )
+    status = FSMField(default=SUBMITTED, choices=INVOICE_STATUS_CHOICES)
+    deliverables = ManyToManyField("InvoiceDeliverable", related_name="invoices")
     objects = InvoiceQueryset.as_manager()
 
     wagtail_reference_index_ignore = True
 
     def __str__(self):
-        return _('Invoice requested for {project}').format(project=self.project)
+        return _("Invoice requested for {project}").format(project=self.project)
 
-    @transition(field=status, source=INVOICE_TRANISTION_TO_RESUBMITTED, target=RESUBMITTED)
+    @transition(
+        field=status, source=INVOICE_TRANISTION_TO_RESUBMITTED, target=RESUBMITTED
+    )
     def transition_invoice_to_resubmitted(self):
-        '''
+        """
         Tranistion invoice to resubmitted status.
         This method generally gets used on invoice edit.
-        '''
+        """
         pass
 
     @property
@@ -179,13 +206,13 @@ class Invoice(models.Model):
 
     @property
     def vendor_document_number(self):
-        '''
+        """
         Vendor document number is a required field to create invoices in IntAcct.
 
         Formatting should be HP###### i.e. HP000001 and so on.
-        '''
-        prefix = 'HP-'
-        return prefix + '-'.join(wrap(f"{self.id:06}", 3))
+        """
+        prefix = "HP-"
+        return prefix + "-".join(wrap(f"{self.id:06}", 3))
 
     def can_user_delete(self, user):
         if user.is_applicant or user.is_apply_staff:
@@ -195,10 +222,10 @@ class Invoice(models.Model):
         return False
 
     def can_user_edit(self, user):
-        '''
+        """
         Check when an user can edit an invoice.
         Only applicant and staff have permission to edit invoice based on its current status.
-        '''
+        """
         if user.is_applicant:
             if self.status in {SUBMITTED, CHANGES_REQUESTED_BY_STAFF, RESUBMITTED}:
                 return True
@@ -210,10 +237,15 @@ class Invoice(models.Model):
         return False
 
     def can_user_change_status(self, user):
-        '''
+        """
         Check user roles that can tranistion invoice status based on the current status.
-        '''
-        if not (user.is_contracting or user.is_apply_staff or user.is_finance_level_1 or user.is_finance_level_2):
+        """
+        if not (
+            user.is_contracting
+            or user.is_apply_staff
+            or user.is_finance_level_1
+            or user.is_finance_level_2
+        ):
             return False  # Users can't change status
 
         if self.status in {PAID, DECLINED}:
@@ -224,7 +256,12 @@ class Invoice(models.Model):
                 return True
 
         if user.is_apply_staff:
-            if self.status in {SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1}:
+            if self.status in {
+                SUBMITTED,
+                RESUBMITTED,
+                CHANGES_REQUESTED_BY_STAFF,
+                CHANGES_REQUESTED_BY_FINANCE_1,
+            }:
                 return True
 
         if user.is_finance_level_1:
@@ -232,17 +269,19 @@ class Invoice(models.Model):
                 if self.status in {APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_2}:
                     return True
             else:
-                if self.status in {APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1, CONVERTED}:
+                if self.status in {APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1}:
                     return True
 
         if user.is_finance_level_2:
-            if self.status in {APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CONVERTED}:
+            if self.status in {APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2}:
                 return True
 
         return False
 
     def can_user_edit_deliverables(self, user):
-        if not (user.is_apply_staff or user.is_finance_level_1 or user.is_finance_level_2):
+        if not (
+            user.is_apply_staff or user.is_finance_level_1 or user.is_finance_level_2
+        ):
             return False
         if user.is_apply_staff:
             if self.status in {SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_FINANCE_1}:
@@ -250,7 +289,9 @@ class Invoice(models.Model):
         if user.is_finance_level_1:
             if self.status in {APPROVED_BY_STAFF}:
                 return True
-            elif settings.INVOICE_EXTENDED_WORKFLOW and self.status in [CHANGES_REQUESTED_BY_FINANCE_2]:
+            elif settings.INVOICE_EXTENDED_WORKFLOW and self.status in [
+                CHANGES_REQUESTED_BY_FINANCE_2
+            ]:
                 return True
         if user.is_finance_level_2:
             if self.status in {APPROVED_BY_FINANCE_1}:
@@ -263,13 +304,17 @@ class Invoice(models.Model):
 
     def get_absolute_url(self):
         return reverse(
-            'apply:projects:invoice-detail',
-            kwargs={'pk': self.project.pk, 'invoice_pk': self.pk}
+            "apply:projects:invoice-detail",
+            kwargs={"pk": self.project.pk, "invoice_pk": self.pk},
         )
 
     @property
     def deliverables_total_amount(self):
-        return self.deliverables.all().aggregate(total=Sum(F('deliverable__unit_price') * F('quantity'), output_field=FloatField()))
+        return self.deliverables.all().aggregate(
+            total=Sum(
+                F("deliverable__unit_price") * F("quantity"), output_field=FloatField()
+            )
+        )
 
     @property
     def filename(self):
@@ -285,11 +330,11 @@ class SupportingDocument(models.Model):
     invoice = models.ForeignKey(
         Invoice,
         on_delete=models.CASCADE,
-        related_name='supporting_documents',
+        related_name="supporting_documents",
     )
 
     def __str__(self):
-        return "{invoice}".format(invoice=self.invoice) + ' -> ' + self.document.name
+        return "{invoice}".format(invoice=self.invoice) + " -> " + self.document.name
 
     @property
     def filename(self):
diff --git a/hypha/apply/projects/models/project.py b/hypha/apply/projects/models/project.py
index ca1ec3074aa0bfdf43d2a928d1e5dfe75156a565..6ab5d0ef7d7217997f25c9caeabdeb2a3da1baad 100644
--- a/hypha/apply/projects/models/project.py
+++ b/hypha/apply/projects/models/project.py
@@ -1,4 +1,3 @@
-import collections
 import decimal
 import json
 import logging
@@ -38,47 +37,55 @@ logger = logging.getLogger(__name__)
 
 
 def contract_path(instance, filename):
-    return f'projects/{instance.project_id}/contracts/{filename}'
+    return f"projects/{instance.project_id}/contracts/{filename}"
 
 
 def document_path(instance, filename):
-    return f'projects/{instance.project_id}/supporting_documents/{filename}'
+    return f"projects/{instance.project_id}/supporting_documents/{filename}"
 
 
 def document_template_path(instance, filename):
-    return f'projects/supporting_documents/{instance.id}/template/{filename}'
+    return f"projects/supporting_documents/{instance.id}/template/{filename}"
 
 
 def contract_document_template_path(instance, filename):
-    return f'projects/contract_documents/{instance.id}/template/{filename}'
+    return f"projects/contract_documents/{instance.id}/template/{filename}"
 
 
 def contract_document_path(instance, filename):
-    return f'projects/{instance.project_id}/contracting_documents/{filename}'
+    return f"projects/{instance.project_id}/contracting_documents/{filename}"
 
 
-PROJECT_ACTION_MESSAGE_TAG = 'project_action_message'
+PROJECT_ACTION_MESSAGE_TAG = "project_action_message"
 
-APPROVE = 'approve'
-REQUEST_CHANGE = 'request_change'
+APPROVE = "approve"
+REQUEST_CHANGE = "request_change"
 PAF_STATUS_CHOICES = (
-    (APPROVE, 'Approve'),
-    (REQUEST_CHANGE, 'Request Change')
+    (APPROVE, "Approve"),
+    (REQUEST_CHANGE, "Request changes or more information"),
 )
 
-DRAFT = 'draft'
-WAITING_FOR_APPROVAL = 'waiting_for_approval'
-CONTRACTING = 'contracting'
-IN_PROGRESS = 'in_progress'
-CLOSING = 'closing'
-COMPLETE = 'complete'
+DRAFT = "draft"
+INTERNAL_APPROVAL = "internal_approval"
+CONTRACTING = "contracting"
+INVOICING_AND_REPORTING = "invoicing_and_reporting"
+CLOSING = "closing"
+COMPLETE = "complete"
 PROJECT_STATUS_CHOICES = [
-    (DRAFT, _('Draft')),
-    (WAITING_FOR_APPROVAL, _('Waiting for Approval')),
-    (CONTRACTING, _('Contracting')),
-    (IN_PROGRESS, _('In Progress')),
-    (CLOSING, _('Closing')),
-    (COMPLETE, _('Complete')),
+    (DRAFT, _("Draft")),
+    (INTERNAL_APPROVAL, _("Internal approval")),
+    (CONTRACTING, _("Contracting")),
+    (INVOICING_AND_REPORTING, _("Invoicing and reporting")),
+    (CLOSING, _("Closing")),
+    (COMPLETE, _("Complete")),
+]
+PROJECT_PUBLIC_STATUSES = [
+    (DRAFT, _("Draft")),
+    (INTERNAL_APPROVAL, _("{} approval").format(settings.ORG_SHORT_NAME)),
+    (CONTRACTING, _("Contracting")),
+    (INVOICING_AND_REPORTING, _("Invoicing and reporting")),
+    (CLOSING, _("Closing")),
+    (COMPLETE, _("Complete")),
 ]
 
 
@@ -90,7 +97,10 @@ class ProjectQuerySet(models.QuerySet):
     def in_progress(self):
         # Projects that users need to interact with, submitting reports or payment request.
         return self.filter(
-            status__in=(IN_PROGRESS, CLOSING,)
+            status__in=(
+                INVOICING_AND_REPORTING,
+                CLOSING,
+            )
         )
 
     def complete(self):
@@ -99,35 +109,46 @@ class ProjectQuerySet(models.QuerySet):
     def in_contracting(self):
         return self.filter(status=CONTRACTING)
 
-    def waiting_for_approval(self):
+    def internal_approval(self):
         return self.filter(
-            status=WAITING_FOR_APPROVAL,
+            status=INTERNAL_APPROVAL,
         )
 
     def by_end_date(self, desc=False):
-        order = getattr(F('proposed_end'), 'desc' if desc else 'asc')(nulls_last=True)
+        order = getattr(F("proposed_end"), "desc" if desc else "asc")(nulls_last=True)
 
         return self.order_by(order)
 
     def with_amount_paid(self):
         return self.annotate(
-            amount_paid=Coalesce(Sum('invoices__paid_value'), Value(0), output_field=models.DecimalField()),
+            amount_paid=Coalesce(
+                Sum("invoices__paid_value"),
+                Value(0),
+                output_field=models.DecimalField(),
+            ),
         )
 
     def with_last_payment(self):
         return self.annotate(
-            last_payment_request=Max('invoices__requested_at', output_field=models.DateTimeField()),
+            last_payment_request=Max(
+                "invoices__requested_at", output_field=models.DateTimeField()
+            ),
         )
 
     def with_outstanding_reports(self):
-        Report = apps.get_model('application_projects', 'Report')
+        Report = apps.get_model("application_projects", "Report")
         return self.annotate(
             outstanding_reports=Subquery(
                 Report.objects.filter(
-                    project=OuterRef('pk'),
-                ).to_do().order_by().values('project').annotate(
-                    count=Count('pk'),
-                ).values('count'),
+                    project=OuterRef("pk"),
+                )
+                .to_do()
+                .order_by()
+                .values("project")
+                .annotate(
+                    count=Count("pk"),
+                )
+                .values("count"),
                 output_field=models.IntegerField(),
             )
         )
@@ -137,71 +158,94 @@ class ProjectQuerySet(models.QuerySet):
             start=Cast(
                 Subquery(
                     Contract.objects.filter(
-                        project=OuterRef('pk'),
-                    ).approved().order_by(
-                        'approved_at'
-                    ).values('approved_at')[:1]
+                        project=OuterRef("pk"),
+                    )
+                    .approved()
+                    .order_by("approved_at")
+                    .values("approved_at")[:1]
                 ),
                 models.DateField(),
             )
         )
 
     def for_table(self):
-        return self.with_amount_paid().with_last_payment().with_outstanding_reports().select_related(
-            'report_config',
-            'submission__page',
-            'lead',
+        return (
+            self.with_amount_paid()
+            .with_last_payment()
+            .with_outstanding_reports()
+            .select_related(
+                "report_config",
+                "submission__page",
+                "lead",
+            )
         )
 
 
 class Project(BaseStreamForm, AccessFormData, models.Model):
-    lead = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL, related_name='lead_projects')
-    submission = models.OneToOneField("funds.ApplicationSubmission", on_delete=models.CASCADE)
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='owned_projects')
+    lead = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        null=True,
+        on_delete=models.SET_NULL,
+        related_name="lead_projects",
+    )
+    submission = models.OneToOneField(
+        "funds.ApplicationSubmission", on_delete=models.CASCADE
+    )
+    user = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        on_delete=models.SET_NULL,
+        null=True,
+        related_name="owned_projects",
+    )
 
     title = models.TextField()
     vendor = models.ForeignKey(
         "application_projects.Vendor",
         on_delete=models.SET_NULL,
-        null=True, blank=True, related_name='projects'
+        null=True,
+        blank=True,
+        related_name="projects",
     )
     value = models.PositiveIntegerField(default=0)
-    proposed_start = models.DateTimeField(_('Proposed Start Date'), null=True)
-    proposed_end = models.DateTimeField(_('Proposed End Date'), null=True)
+    proposed_start = models.DateTimeField(_("Proposed Start Date"), null=True)
+    proposed_end = models.DateTimeField(_("Proposed End Date"), null=True)
 
     status = models.TextField(choices=PROJECT_STATUS_CHOICES, default=DRAFT)
 
     form_data = models.JSONField(encoder=StreamFieldDataEncoder, default=dict)
-    form_fields = StreamField(ProjectApprovalFormCustomFormFieldsBlock(), null=True, use_json_field=True)
+    form_fields = StreamField(
+        ProjectApprovalFormCustomFormFieldsBlock(), null=True, use_json_field=True
+    )
 
     # tracks read/write state of the Project
     is_locked = models.BooleanField(default=False)
 
     # tracks updates to the Projects fields via the Project Application Form.
     user_has_updated_details = models.BooleanField(default=False)
-    submitted_contract_documents = models.BooleanField("Submit Contracting Documents", default=False)
+    submitted_contract_documents = models.BooleanField(
+        "Submit Contracting Documents", default=False
+    )
 
     activities = GenericRelation(
-        'activity.Activity',
-        content_type_field='source_content_type',
-        object_id_field='source_object_id',
-        related_query_name='project',
+        "activity.Activity",
+        content_type_field="source_content_type",
+        object_id_field="source_object_id",
+        related_query_name="project",
     )
     created_at = models.DateTimeField(auto_now_add=True)
     external_projectid = models.CharField(
         max_length=30,
         blank=True,
-        help_text='ID of this project at integrated payment service.'
+        help_text="ID of this project at integrated payment service.",
     )
     external_project_information = models.JSONField(
         default=dict,
-        help_text='More details of the project integrated at payment service.'
+        help_text="More details of the project integrated at payment service.",
     )
     sent_to_compliance_at = models.DateTimeField(null=True)
 
     paf_reviews_meta_data = models.JSONField(
-        default=dict,
-        help_text='Reviewers role and their actions/comments'
+        default=dict, help_text="Reviewers role and their actions/comments"
     )
 
     objects = ProjectQuerySet.as_manager()
@@ -219,9 +263,9 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
         try:
             address = json.loads(self.vendor.address)
         except (json.JSONDecodeError, AttributeError):
-            return ''
+            return ""
         else:
-            return ', '.join(
+            return ", ".join(
                 address.get(field)
                 for field in ADDRESS_FIELDS_ORDER
                 if address.get(field)
@@ -236,22 +280,24 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
         Project.
         """
         if not settings.PROJECTS_ENABLED:
-            logging.error(f'Tried to create a Project for Submission ID={submission.id} while projects are disabled')
+            logging.error(
+                f"Tried to create a Project for Submission ID={submission.id} while projects are disabled"
+            )
             return None
 
         # OneToOne relations on the targetted model cannot be accessed without
         # an exception when the relation doesn't exist (is None).  Since we
         # want to fail fast here, we can use hasattr instead.
-        if hasattr(submission, 'project'):
+        if hasattr(submission, "project"):
             return submission.project
 
         # See if there is a form field named "legal name", if not use user name.
-        legal_name = submission.get_answer_from_label('legal name') or submission.user.full_name
-        vendor, _ = Vendor.objects.get_or_create(
-            user=submission.user
+        legal_name = (
+            submission.get_answer_from_label("legal name") or submission.user.full_name
         )
+        vendor, _ = Vendor.objects.get_or_create(user=submission.user)
         vendor.name = legal_name
-        vendor.address = submission.form_data.get('address', '')
+        vendor.address = submission.form_data.get("address", "")
         vendor.save()
         return Project.objects.create(
             submission=submission,
@@ -259,13 +305,15 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
             title=submission.title,
             vendor=vendor,
             lead=lead if lead else None,
-            value=submission.form_data.get('value', 0),
+            value=submission.form_data.get("value", 0),
         )
 
     @property
     def start_date(self):
         # Assume project starts when OTF are happy with the first signed contract
-        first_approved_contract = self.contracts.approved().order_by('approved_at').first()
+        first_approved_contract = (
+            self.contracts.approved().order_by("approved_at").first()
+        )
         if not first_approved_contract:
             return None
 
@@ -296,7 +344,9 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
             return
 
         if self.proposed_start > self.proposed_end:
-            raise ValidationError(_('Proposed End Date must be after Proposed Start Date'))
+            raise ValidationError(
+                _("Proposed End Date must be after Proposed Start Date")
+            )
 
     def save(self, *args, **kwargs):
         creating = not self.pk
@@ -331,35 +381,37 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
     def editable(self):
         if self.is_locked:
             return False
-        elif self.status == DRAFT:  # locked condition is enough,it is just for double check
+        elif (
+            self.status == DRAFT
+        ):  # locked condition is enough,it is just for double check
             return True
         return False
 
     def get_absolute_url(self):
         if settings.PROJECTS_ENABLED:
-            return reverse('apply:projects:detail', args=[self.id])
-        return '#'
+            return reverse("apply:projects:detail", args=[self.id])
+        return "#"
 
     @property
     def can_make_approval(self):
-        return self.status == WAITING_FOR_APPROVAL
+        return self.status == INTERNAL_APPROVAL
 
     @property
     def is_approved_by_all_paf_reviewers(self):
-        if self.status == WAITING_FOR_APPROVAL:
+        if self.status == INTERNAL_APPROVAL:
             if not self.paf_approvals.filter(approved=False):
                 return True
         return False
 
     @property
     def can_update_paf_status(self):
-        return self.status == WAITING_FOR_APPROVAL
+        return self.status == INTERNAL_APPROVAL
 
     def can_request_funding(self):
         """
         Should we show this Project's funding block?
         """
-        return self.status in (CLOSING, IN_PROGRESS)
+        return self.status in (CLOSING, INVOICING_AND_REPORTING)
 
     @property
     def can_send_for_approval(self):
@@ -373,45 +425,9 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
         correct_state = self.status == DRAFT and not self.is_locked
         return correct_state and self.user_has_updated_details
 
-    def get_missing_document_categories(self):
-        """
-        Get the number of documents required to meet each DocumentCategorys minimum
-        """
-        # Count the number of documents in each category currently
-        existing_categories = DocumentCategory.objects.filter(packet_files__project=self)
-        counter = collections.Counter(existing_categories)
-
-        # Find the difference between the current count and recommended count
-        for category in DocumentCategory.objects.all():
-            current_count = counter[category]
-            difference = category.recommended_minimum - current_count
-            if difference > 0:
-                yield {
-                    'category': category,
-                    'difference': difference,
-                }
-
-    def get_missing_contract_document_categories(self):
-        """
-        Get the number of documents required to meet each ContractDocumentCategories minimum
-        """
-        # Count the number of documents in each category currently
-        existing_categories = ContractDocumentCategory.objects.filter(contract_packet_files__project=self)
-        counter = collections.Counter(existing_categories)
-
-        # Find the difference between the current count and recommended count
-        for category in ContractDocumentCategory.objects.all():
-            current_count = counter[category]
-            difference = category.recommended_minimum - current_count
-            if difference > 0:
-                yield {
-                    'category': category,
-                    'difference': difference,
-                }
-
     @property
     def is_in_progress(self):
-        return self.status == IN_PROGRESS
+        return self.status == INVOICING_AND_REPORTING
 
     @property
     def has_deliverables(self):
@@ -419,30 +435,36 @@ class Project(BaseStreamForm, AccessFormData, models.Model):
 
     @property
     def program_project_id(self):
-        '''
+        """
         Program project id is used to fetch deliverables from IntAcct.
 
         Stored in external_project_information as the first item of referenceno(PONUMBER).
-        '''
-        reference_number = self.external_project_information.get('PONUMBER', None)
+        """
+        reference_number = self.external_project_information.get("PONUMBER", None)
         if reference_number:
-            return reference_number.split('-')[0]
-        return ''
+            return reference_number.split("-")[0]
+        return ""
 
 
 class ProjectSOW(BaseStreamForm, AccessFormData, models.Model):
-    project = models.OneToOneField(Project, related_name='sow', on_delete=models.CASCADE)
+    project = models.OneToOneField(
+        Project, related_name="sow", on_delete=models.CASCADE
+    )
     form_data = models.JSONField(encoder=StreamFieldDataEncoder, default=dict)
-    form_fields = StreamField(ProjectApprovalFormCustomFormFieldsBlock(), null=True, use_json_field=True)
+    form_fields = StreamField(
+        ProjectApprovalFormCustomFormFieldsBlock(), null=True, use_json_field=True
+    )
 
 
 class ProjectBaseStreamForm(BaseStreamForm, models.Model):
     name = models.CharField(max_length=255)
-    form_fields = StreamField(ProjectApprovalFormCustomFormFieldsBlock(), use_json_field=True)
+    form_fields = StreamField(
+        ProjectApprovalFormCustomFormFieldsBlock(), use_json_field=True
+    )
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('form_fields'),
+        FieldPanel("name"),
+        FieldPanel("form_fields"),
     ]
 
     class Meta:
@@ -470,11 +492,11 @@ class PAFReviewersRole(Orderable, ClusterableModel):
         ),
         related_name="paf_reviewers_roles",
     )
-    page = ParentalKey('ProjectSettings', related_name='paf_reviewers_roles')
+    page = ParentalKey("ProjectSettings", related_name="paf_reviewers_roles")
 
     panels = [
-        FieldPanel('label'),
-        FieldPanel('user_roles', widget=forms.CheckboxSelectMultiple),
+        FieldPanel("label"),
+        FieldPanel("user_roles", widget=forms.CheckboxSelectMultiple),
     ]
 
     def __str__(self):
@@ -483,42 +505,60 @@ class PAFReviewersRole(Orderable, ClusterableModel):
 
 @register_setting
 class ProjectSettings(BaseSiteSetting, ClusterableModel):
-    contracting_gp_email = models.TextField("Contracting Group Email", null=True, blank=True)
+    contracting_gp_email = models.TextField(
+        "Contracting Group Email", null=True, blank=True
+    )
     finance_gp_email = models.TextField("Finance Group Email", null=True, blank=True)
     staff_gp_email = models.TextField("Staff Group Email", null=True, blank=True)
     vendor_setup_required = models.BooleanField(default=True)
-    paf_approval_sequential = models.BooleanField(default=True, help_text="Uncheck it to approve PAF parallely")
+    paf_approval_sequential = models.BooleanField(
+        default=True, help_text="Uncheck it to approve PAF parallely"
+    )
 
     panels = [
-        FieldPanel('staff_gp_email'),
-        FieldPanel('contracting_gp_email'),
-        FieldPanel('finance_gp_email'),
-        FieldPanel('vendor_setup_required'),
+        FieldPanel("staff_gp_email"),
+        FieldPanel("contracting_gp_email"),
+        FieldPanel("finance_gp_email"),
+        FieldPanel("vendor_setup_required"),
         MultiFieldPanel(
             [
-                FieldPanel('paf_approval_sequential', heading='Approve PAF Sequentially'),
-                InlinePanel('paf_reviewers_roles', label=_('PAF Reviewers Roles')),
+                FieldPanel(
+                    "paf_approval_sequential", heading="Approve PAF Sequentially"
+                ),
+                InlinePanel("paf_reviewers_roles", label=_("PAF Reviewers Roles")),
             ],
-            heading=_('PAF Reviewers Roles'),
-        )
+            heading=_("PAF Reviewers Roles"),
+        ),
     ]
 
 
 class PAFApprovals(models.Model):
-    project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="paf_approvals")
-    paf_reviewer_role = models.ForeignKey("PAFReviewersRole", on_delete=models.CASCADE, related_name="paf_approvals")
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name="paf_approvals")
+    project = models.ForeignKey(
+        "Project", on_delete=models.CASCADE, related_name="paf_approvals"
+    )
+    paf_reviewer_role = models.ForeignKey(
+        "PAFReviewersRole", on_delete=models.CASCADE, related_name="paf_approvals"
+    )
+    user = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        on_delete=models.SET_NULL,
+        null=True,
+        blank=True,
+        related_name="paf_approvals",
+    )
     approved = models.BooleanField(default=False)
     created_at = models.DateTimeField(auto_now_add=True)
     updated_at = models.DateTimeField()
     approved_at = models.DateTimeField(null=True, blank=True)
 
     class Meta:
-        unique_together = ['project', 'paf_reviewer_role']
+        unique_together = ["project", "paf_reviewer_role"]
         ordering = ["paf_reviewer_role__sort_order"]
 
     def __str__(self):
-        return _('Approval of {project} by {user}').format(project=self.project, user=self.user)
+        return _("Approval of {project} by {user}").format(
+            project=self.project, user=self.user
+        )
 
     def save(self, *args, **kwargs):
         self.updated_at = timezone.now()
@@ -531,8 +571,15 @@ class ContractQuerySet(models.QuerySet):
 
 
 class Contract(models.Model):
-    approver = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL, related_name='contracts')
-    project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="contracts")
+    approver = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        null=True,
+        on_delete=models.SET_NULL,
+        related_name="contracts",
+    )
+    project = models.ForeignKey(
+        "Project", on_delete=models.CASCADE, related_name="contracts"
+    )
 
     file = models.FileField(upload_to=contract_path, storage=PrivateStorage())
 
@@ -551,28 +598,37 @@ class Contract(models.Model):
 
     @property
     def state(self):
-        return _('Counter Signed') if self.signed_by_applicant else _('Unsigned')
+        return _("Counter Signed") if self.signed_by_applicant else _("Unsigned")
 
     def __str__(self):
-        return _('Contract for {project} ({state})').format(project=self.project, state=self.state)
+        return _("Contract for {project} ({state})").format(
+            project=self.project, state=self.state
+        )
 
     def get_absolute_url(self):
-        return reverse('apply:projects:contract', args=[self.project.pk, self.pk])
+        return reverse("apply:projects:contract", args=[self.project.pk, self.pk])
 
 
 class PacketFile(models.Model):
-    category = models.ForeignKey("DocumentCategory", null=True, on_delete=models.CASCADE, related_name="packet_files")
-    project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="packet_files")
+    category = models.ForeignKey(
+        "DocumentCategory",
+        null=True,
+        on_delete=models.CASCADE,
+        related_name="packet_files",
+    )
+    project = models.ForeignKey(
+        "Project", on_delete=models.CASCADE, related_name="packet_files"
+    )
 
     title = models.TextField()
     document = models.FileField(upload_to=document_path, storage=PrivateStorage())
     created_at = models.DateField(auto_now_add=True, null=True)
 
     def __str__(self):
-        return _('Project file: {title}').format(title=self.title)
+        return _("Project file: {title}").format(title=self.title)
 
     class Meta:
-        ordering = ('-created_at',)
+        ordering = ("-created_at",)
 
     def get_remove_form(self):
         """
@@ -582,8 +638,9 @@ class PacketFile(models.Model):
         instance of PacketFile in the supporting documents template.  The
         standard Delegated View flow makes it difficult to create these forms
         in the view or template.
-       """
+        """
         from ..forms import RemoveDocumentForm
+
         return RemoveDocumentForm(instance=self)
 
 
@@ -594,15 +651,24 @@ def delete_packetfile_file(sender, instance, **kwargs):
 
 
 class ContractPacketFile(models.Model):
-    category = models.ForeignKey("ContractDocumentCategory", null=True, on_delete=models.CASCADE, related_name="contract_packet_files")
-    project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="contract_packet_files")
+    category = models.ForeignKey(
+        "ContractDocumentCategory",
+        null=True,
+        on_delete=models.CASCADE,
+        related_name="contract_packet_files",
+    )
+    project = models.ForeignKey(
+        "Project", on_delete=models.CASCADE, related_name="contract_packet_files"
+    )
 
     title = models.TextField()
-    document = models.FileField(upload_to=contract_document_path, storage=PrivateStorage())
+    document = models.FileField(
+        upload_to=contract_document_path, storage=PrivateStorage()
+    )
     created_at = models.DateField(auto_now_add=True, null=True)
 
     def __str__(self):
-        return _('Contract file: {title}').format(title=self.title)
+        return _("Contract file: {title}").format(title=self.title)
 
     def get_remove_form(self):
         """
@@ -612,8 +678,9 @@ class ContractPacketFile(models.Model):
         instance of ContractPacketFile in the contracting documents template.  The
         standard Delegated View flow makes it difficult to create these forms
         in the view or template.
-       """
+        """
         from ..forms import RemoveContractDocumentForm
+
         return RemoveContractDocumentForm(instance=self)
 
 
@@ -627,19 +694,24 @@ class DocumentCategory(models.Model):
     name = models.CharField(max_length=254)
     recommended_minimum = models.PositiveIntegerField(null=True, blank=True)
     required = models.BooleanField(default=False)
-    template = models.FileField(upload_to=document_template_path, storage=PrivateStorage(), blank=True, null=True)
+    template = models.FileField(
+        upload_to=document_template_path,
+        storage=PrivateStorage(),
+        blank=True,
+        null=True,
+    )
 
     def __str__(self):
         return self.name
 
     class Meta:
-        ordering = ('-required', 'name')
-        verbose_name_plural = 'Project Document Categories'
+        ordering = ("-required", "name")
+        verbose_name_plural = "Project Document Categories"
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('required'),
-        FieldPanel('template'),
+        FieldPanel("name"),
+        FieldPanel("required"),
+        FieldPanel("template"),
     ]
 
 
@@ -647,19 +719,24 @@ class ContractDocumentCategory(models.Model):
     name = models.CharField(max_length=254)
     recommended_minimum = models.PositiveIntegerField(null=True, blank=True)
     required = models.BooleanField(default=True)
-    template = models.FileField(upload_to=contract_document_template_path, storage=PrivateStorage(), blank=True, null=True)
+    template = models.FileField(
+        upload_to=contract_document_template_path,
+        storage=PrivateStorage(),
+        blank=True,
+        null=True,
+    )
 
     def __str__(self):
         return self.name
 
     class Meta:
-        ordering = ('-required', 'name')
-        verbose_name_plural = 'Contract Document Categories'
+        ordering = ("-required", "name")
+        verbose_name_plural = "Contract Document Categories"
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('required'),
-        FieldPanel('template'),
+        FieldPanel("name"),
+        FieldPanel("required"),
+        FieldPanel("template"),
     ]
 
 
@@ -667,24 +744,25 @@ class Deliverable(models.Model):
     external_id = models.CharField(
         max_length=30,
         blank=True,
-        help_text='ID of this deliverable at integrated payment service.'
+        help_text="ID of this deliverable at integrated payment service.",
     )
     name = models.TextField()
     available_to_invoice = models.IntegerField(default=1)
     unit_price = models.DecimalField(
         max_digits=10,
         decimal_places=2,
-        validators=[MinValueValidator(decimal.Decimal('0.01'))],
+        validators=[MinValueValidator(decimal.Decimal("0.01"))],
     )
     extra_information = models.JSONField(
         default=dict,
-        help_text='More details of the deliverable at integrated payment service.'
+        help_text="More details of the deliverable at integrated payment service.",
     )
     project = models.ForeignKey(
         Project,
-        null=True, blank=True,
+        null=True,
+        blank=True,
         on_delete=models.CASCADE,
-        related_name='deliverables'
+        related_name="deliverables",
     )
 
     def __str__(self):
diff --git a/hypha/apply/projects/models/report.py b/hypha/apply/projects/models/report.py
index 2e92062f27d85dfef7599f2ae2de184fa25c0b62..9467b2f03340857c98add2afc71eaa7253eed4c4 100644
--- a/hypha/apply/projects/models/report.py
+++ b/hypha/apply/projects/models/report.py
@@ -17,7 +17,9 @@ from hypha.apply.utils.storage import PrivateStorage
 
 
 def report_path(instance, filename):
-    return f'reports/{instance.report.report_id}/version/{instance.report_id}/{filename}'
+    return (
+        f"reports/{instance.report.report_id}/version/{instance.report_id}/{filename}"
+    )
 
 
 class ReportQueryset(models.QuerySet):
@@ -32,7 +34,7 @@ class ReportQueryset(models.QuerySet):
             current__isnull=True,
             skipped=False,
             end_date__lt=today,
-        ).order_by('end_date')
+        ).order_by("end_date")
 
     def any_very_late(self):
         two_weeks_ago = timezone.now().date() - relativedelta(weeks=2)
@@ -42,18 +44,19 @@ class ReportQueryset(models.QuerySet):
         return self.filter(current__isnull=False)
 
     def for_table(self):
-        Project = apps.get_model('application_projects', 'Project')
+        Project = apps.get_model("application_projects", "Project")
         return self.annotate(
             last_end_date=Subquery(
                 Report.objects.filter(
-                    project=OuterRef('project_id'),
-                    end_date__lt=OuterRef('end_date')
-                ).values('end_date')[:1]
+                    project=OuterRef("project_id"), end_date__lt=OuterRef("end_date")
+                ).values("end_date")[:1]
             ),
             project_start_date=Subquery(
                 Project.objects.filter(
-                    pk=OuterRef('project_id'),
-                ).with_start_date().values('start')[:1]
+                    pk=OuterRef("project_id"),
+                )
+                .with_start_date()
+                .values("start")[:1]
             ),
             start=Case(
                 When(
@@ -62,34 +65,36 @@ class ReportQueryset(models.QuerySet):
                     # Use cast to get an actual date object
                     then=Cast(
                         ExpressionWrapper(
-                            F('last_end_date') + datetime.timedelta(days=1),
+                            F("last_end_date") + datetime.timedelta(days=1),
                             output_field=models.DateTimeField(),
                         ),
                         models.DateField(),
                     ),
                 ),
-                default=F('project_start_date'),
+                default=F("project_start_date"),
                 output_field=models.DateField(),
-            )
+            ),
         )
 
 
 class Report(models.Model):
     skipped = models.BooleanField(default=False)
     end_date = models.DateField()
-    project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="reports")
+    project = models.ForeignKey(
+        "Project", on_delete=models.CASCADE, related_name="reports"
+    )
     submitted = models.DateTimeField(null=True)
     notified = models.DateTimeField(null=True)
     current = models.OneToOneField(
         "ReportVersion",
         on_delete=models.CASCADE,
-        related_name='live_for_report',
+        related_name="live_for_report",
         null=True,
     )
     draft = models.OneToOneField(
         "ReportVersion",
         on_delete=models.CASCADE,
-        related_name='draft_for_report',
+        related_name="draft_for_report",
         null=True,
     )
 
@@ -98,28 +103,39 @@ class Report(models.Model):
     wagtail_reference_index_ignore = True
 
     class Meta:
-        ordering = ('-end_date',)
+        ordering = ("-end_date",)
 
     def get_absolute_url(self):
-        return reverse('apply:projects:reports:detail', kwargs={'pk': self.pk})
+        return reverse("apply:projects:reports:detail", kwargs={"pk": self.pk})
 
     @property
     def previous(self):
-        return Report.objects.submitted().filter(
-            project=self.project_id,
-            end_date__lt=self.end_date,
-        ).exclude(
-            pk=self.pk,
-        ).first()
+        return (
+            Report.objects.submitted()
+            .filter(
+                project=self.project_id,
+                end_date__lt=self.end_date,
+            )
+            .exclude(
+                pk=self.pk,
+            )
+            .first()
+        )
 
     @property
     def next(self):
-        return Report.objects.submitted().filter(
-            project=self.project_id,
-            end_date__gt=self.end_date,
-        ).exclude(
-            pk=self.pk,
-        ).order_by('end_date').first()
+        return (
+            Report.objects.submitted()
+            .filter(
+                project=self.project_id,
+                end_date__gt=self.end_date,
+            )
+            .exclude(
+                pk=self.pk,
+            )
+            .order_by("end_date")
+            .first()
+        )
 
     @property
     def past_due(self):
@@ -151,7 +167,9 @@ class Report(models.Model):
 
 
 class ReportVersion(models.Model):
-    report = models.ForeignKey("Report", on_delete=models.CASCADE, related_name="versions")
+    report = models.ForeignKey(
+        "Report", on_delete=models.CASCADE, related_name="versions"
+    )
     submitted = models.DateTimeField()
     public_content = models.TextField()
     private_content = models.TextField()
@@ -167,7 +185,9 @@ class ReportVersion(models.Model):
 
 
 class ReportPrivateFiles(models.Model):
-    report = models.ForeignKey("ReportVersion", on_delete=models.CASCADE, related_name="files")
+    report = models.ForeignKey(
+        "ReportVersion", on_delete=models.CASCADE, related_name="files"
+    )
     document = models.FileField(upload_to=report_path, storage=PrivateStorage())
 
     wagtail_reference_index_ignore = True
@@ -180,22 +200,27 @@ class ReportPrivateFiles(models.Model):
         return self.filename
 
     def get_absolute_url(self):
-        return reverse('apply:projects:reports:document', kwargs={'pk': self.report.report_id, 'file_pk': self.pk})
+        return reverse(
+            "apply:projects:reports:document",
+            kwargs={"pk": self.report.report_id, "file_pk": self.pk},
+        )
 
 
 class ReportConfig(models.Model):
     """Persists configuration about the reporting schedule etc"""
 
-    WEEK = _('week')
-    MONTH = _('month')
-    YEAR = _('year')
+    WEEK = _("week")
+    MONTH = _("month")
+    YEAR = _("year")
     FREQUENCY_CHOICES = [
-        (WEEK, _('Weeks')),
-        (MONTH, _('Months')),
-        (YEAR, _('Years')),
+        (WEEK, _("Weeks")),
+        (MONTH, _("Months")),
+        (YEAR, _("Years")),
     ]
 
-    project = models.OneToOneField("Project", on_delete=models.CASCADE, related_name="report_config")
+    project = models.OneToOneField(
+        "Project", on_delete=models.CASCADE, related_name="report_config"
+    )
     schedule_start = models.DateField(null=True)
     occurrence = models.PositiveSmallIntegerField(default=1)
     frequency = models.CharField(choices=FREQUENCY_CHOICES, default=MONTH, max_length=6)
@@ -204,40 +229,55 @@ class ReportConfig(models.Model):
 
     def get_frequency_display(self):
         if self.disable_reporting:
-            return _('Reporting Disabled')
+            return _("Reporting Disabled")
         if self.does_not_repeat:
             last_report = self.last_report()
             if last_report:
-                return _('One time, that already has reported on {date}'.format(
-                    date=last_report.end_date.strftime('%d %B, %Y')))
-            return _('One time on {date}'.format(date=self.schedule_start.strftime('%d %B, %Y')))
+                return _(
+                    "One time, that already has reported on {date}".format(
+                        date=last_report.end_date.strftime("%d %B, %Y")
+                    )
+                )
+            return _(
+                "One time on {date}".format(
+                    date=self.schedule_start.strftime("%d %B, %Y")
+                )
+            )
         next_report = self.current_due_report()
 
         if self.frequency == self.YEAR:
             if self.schedule_start and self.schedule_start.day == 31:
-                day_of_month = _('last day')
-                month = self.schedule_start.strftime('%B')
+                day_of_month = _("last day")
+                month = self.schedule_start.strftime("%B")
             else:
                 day_of_month = ordinal(next_report.end_date.day)
-                month = next_report.end_date.strftime('%B')
+                month = next_report.end_date.strftime("%B")
             if self.occurrence == 1:
-                return _('Once a year on {month} {day}').format(day=day_of_month, month=month)
-            return _('Every {occurrence} years on {month} {day}').format(occurrence=self.occurrence, day=day_of_month, month=month)
+                return _("Once a year on {month} {day}").format(
+                    day=day_of_month, month=month
+                )
+            return _("Every {occurrence} years on {month} {day}").format(
+                occurrence=self.occurrence, day=day_of_month, month=month
+            )
 
         if self.frequency == self.MONTH:
             if self.schedule_start and self.schedule_start.day == 31:
-                day_of_month = _('last day')
+                day_of_month = _("last day")
             else:
                 day_of_month = ordinal(next_report.end_date.day)
             if self.occurrence == 1:
-                return _('Once a month on the {day}').format(day=day_of_month)
-            return _('Every {occurrence} months on the {day}').format(occurrence=self.occurrence, day=day_of_month)
+                return _("Once a month on the {day}").format(day=day_of_month)
+            return _("Every {occurrence} months on the {day}").format(
+                occurrence=self.occurrence, day=day_of_month
+            )
 
-        weekday = next_report.end_date.strftime('%A')
+        weekday = next_report.end_date.strftime("%A")
 
         if self.occurrence == 1:
-            return _('Once a week on {weekday}').format(weekday=weekday)
-        return _('Every {occurrence} weeks on {weekday}').format(occurrence=self.occurrence, weekday=weekday)
+            return _("Once a week on {weekday}").format(weekday=weekday)
+        return _("Every {occurrence} weeks on {weekday}").format(
+            occurrence=self.occurrence, weekday=weekday
+        )
 
     def is_up_to_date(self):
         return len(self.project.reports.to_do()) == 0
@@ -258,9 +298,7 @@ class ReportConfig(models.Model):
         # - was skipped but due after today
         # - was submitted but due after today
         return self.project.reports.filter(
-            Q(end_date__lt=today) |
-            Q(skipped=True) |
-            Q(submitted__isnull=False)
+            Q(end_date__lt=today) | Q(skipped=True) | Q(submitted__isnull=False)
         ).first()
 
     def current_due_report(self):
@@ -309,12 +347,12 @@ class ReportConfig(models.Model):
             current__isnull=True,
             skipped=False,
             end_date__gte=today,
-            defaults={'end_date': next_due_date}
+            defaults={"end_date": next_due_date},
         )
         return report
 
     def next_date(self, last_date):
-        delta_frequency = self.frequency + 's'
+        delta_frequency = self.frequency + "s"
         delta = relativedelta(**{delta_frequency: self.occurrence})
         next_date = last_date + delta
         return next_date
diff --git a/hypha/apply/projects/models/vendor.py b/hypha/apply/projects/models/vendor.py
index 20b2a50ce89fdf95b5b18ab8a24b4796fbc8dc60..1b530524f2126a2b9db4a4cd5b66c3ca9d7138f4 100644
--- a/hypha/apply/projects/models/vendor.py
+++ b/hypha/apply/projects/models/vendor.py
@@ -13,27 +13,22 @@ class BankInformation(models.Model):
     account_holder_name = models.CharField(max_length=150)
     account_routing_number = models.CharField(max_length=10)
     account_number = models.CharField(max_length=20)
-    account_currency = models.CharField(
-        max_length=10
-    )
+    account_currency = models.CharField(max_length=10)
     need_extra_info = models.BooleanField(default=False)
-    branch_address = models.TextField(_('Address'), blank=True)
+    branch_address = models.TextField(_("Address"), blank=True)
     iba_info = models.OneToOneField(
-        'self',
-        null=True, blank=True,
+        "self",
+        null=True,
+        blank=True,
         on_delete=models.SET_NULL,
-        related_name='bank_info',
-        verbose_name='Intermediary Bank Account Information'
+        related_name="bank_info",
+        verbose_name="Intermediary Bank Account Information",
     )
     nid_type = models.CharField(
-        max_length=25,
-        verbose_name='National Identity Document Type',
-        blank=True
+        max_length=25, verbose_name="National Identity Document Type", blank=True
     )
     nid_number = models.CharField(
-        max_length=20,
-        blank=True,
-        verbose_name='National Identity Document Number'
+        max_length=20, blank=True, verbose_name="National Identity Document Number"
     )
 
     wagtail_reference_index_ignore = True
@@ -43,26 +38,27 @@ class BankInformation(models.Model):
 
 
 class Vendor(models.Model):
-
     TYPE_CHOICES = [
-        ('organization', _('Yes, the account belongs to the organisation above')),
-        ('personal', _('No, it is a personal bank account')),
+        ("organization", _("Yes, the account belongs to the organisation above")),
+        ("personal", _("No, it is a personal bank account")),
     ]
-    created_at = models.DateTimeField(verbose_name=_('Creation time'), auto_now_add=True)
-    updated_at = models.DateTimeField(verbose_name=_('Update time'), auto_now=True)
+    created_at = models.DateTimeField(
+        verbose_name=_("Creation time"), auto_now_add=True
+    )
+    updated_at = models.DateTimeField(verbose_name=_("Update time"), auto_now=True)
     user = models.OneToOneField(
-        settings.AUTH_USER_MODEL, on_delete=models.PROTECT,
-        related_name='vendor'
+        settings.AUTH_USER_MODEL, on_delete=models.PROTECT, related_name="vendor"
     )
     name = models.CharField(max_length=150, blank=True)
     contractor_name = models.CharField(max_length=150, blank=True)
-    address = models.TextField(_('Address'), blank=True)
+    address = models.TextField(_("Address"), blank=True)
     type = models.CharField(max_length=15, choices=TYPE_CHOICES, blank=True)
     required_to_pay_taxes = models.BooleanField(default=False)
     bank_info = models.OneToOneField(
         BankInformation,
         on_delete=models.SET_NULL,
-        null=True, blank=True,
+        null=True,
+        blank=True,
     )
     other_info = models.TextField(blank=True)
     # tracks updates to the Vendor fields via the Vendor Setup Form.
@@ -74,24 +70,23 @@ class Vendor(models.Model):
         return self.name
 
     def get_absolute_url(self):
-        return reverse('apply:projects:vendor-detail', args=[self.pk])
+        return reverse("apply:projects:vendor-detail", args=[self.pk])
 
 
 class DueDiligenceDocument(models.Model):
-
     document = models.FileField(
         upload_to="due_diligence_documents", storage=PrivateStorage()
     )
     vendor = models.ForeignKey(
         Vendor,
         on_delete=models.CASCADE,
-        related_name='due_diligence_documents',
+        related_name="due_diligence_documents",
     )
 
     wagtail_reference_index_ignore = True
 
     def __str__(self):
-        return self.vendor.name + ' -> ' + self.document.name
+        return self.vendor.name + " -> " + self.document.name
 
 
 @register_setting
@@ -99,239 +94,264 @@ class VendorFormSettings(BaseSiteSetting):
     wagtail_reference_index_ignore = True
 
     name_label = models.TextField(
-        'label',
-        default='1. What is the name of the person/organisation on the contract?'
+        "label",
+        default="1. What is the name of the person/organisation on the contract?",
     )
     name_help_text = RichTextField(
-        'help text', blank=True,
-        default='This is the party name in the contract.'
+        "help text", blank=True, default="This is the party name in the contract."
     )
     contractor_name_label = models.TextField(
-        'label',
-        default="2. What is the individual's name who is signing the contract?"
+        "label", default="2. What is the individual's name who is signing the contract?"
     )
     contractor_name_help_text = RichTextField(
-        'help text', blank=True,
-        default="This person is is authorised to sign contract on behalf of the person or organization named above."
+        "help text",
+        blank=True,
+        default="This person is is authorised to sign contract on behalf of the person or organization named above.",
     )
     type_label = models.TextField(
-        'label',
-        default='3. Is the bank account owned by the person or organisation in the Question 1 above?'
+        "label",
+        default="3. Is the bank account owned by the person or organisation in the Question 1 above?",
     )
     type_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='The name of the bank account must be the same as on the contract.'
+        default="The name of the bank account must be the same as on the contract.",
     )
     required_to_pay_taxes_label = models.TextField(
-        'label',
-        default='Is the organisation required to pay US taxes?'
+        "label", default="Is the organisation required to pay US taxes?"
     )
     required_to_pay_taxes_help_text = RichTextField(
-        'help text',
-        default='', blank=True,
+        "help text",
+        default="",
+        blank=True,
     )
     due_diligence_documents_label = models.TextField(
-        'label',
-        default='Due Diligence Documents'
+        "label", default="Due Diligence Documents"
     )
     due_diligence_documents_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='Upload Due Diligence Documents. E.g. w8/w9 forms.'
+        default="Upload Due Diligence Documents. E.g. w8/w9 forms.",
     )
     account_holder_name_label = models.TextField(
-        'label',
-        default='Bank Account Holder name'
+        "label", default="Bank Account Holder name"
     )
     account_holder_name_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='This name must be same as the person or organisation that signed the contract. '
-        'This person is authorised to sign contracts on behalf of the person or organisation named above.'
+        default="This name must be same as the person or organisation that signed the contract. "
+        "This person is authorised to sign contracts on behalf of the person or organisation named above.",
     )
     account_routing_number_label = models.TextField(
-        'label',
-        default='Bank Account Routing number'
+        "label", default="Bank Account Routing number"
     )
     account_routing_number_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='Depending on your country, this might be called the ACH, SWIFT, BIC or ABA number.'
-    )
-    account_number_label = models.TextField(
-        'label',
-        default='Bank Account Number'
+        default="Depending on your country, this might be called the ACH, SWIFT, BIC or ABA number.",
     )
+    account_number_label = models.TextField("label", default="Bank Account Number")
     account_number_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='Depending on your country, this might be called the account number, IBAN, or BBAN number.'
-    )
-    account_currency_label = models.TextField(
-        'label',
-        default='Bank Account Currency'
+        default="Depending on your country, this might be called the account number, IBAN, or BBAN number.",
     )
+    account_currency_label = models.TextField("label", default="Bank Account Currency")
     account_currency_help_text = RichTextField(
-        'help text',
-        blank=True,
-        default='This is the currency of this bank account.'
+        "help text", blank=True, default="This is the currency of this bank account."
     )
     need_extra_info_label = models.TextField(
-        'label',
-        default='Do you need to provide us with extra information?'
-    )
-    need_extra_info_help_text = RichTextField(
-        'help text',
-        blank=True,
-        default=''
+        "label", default="Do you need to provide us with extra information?"
     )
+    need_extra_info_help_text = RichTextField("help text", blank=True, default="")
     branch_address_label = models.TextField(
-        'label',
-        default='Bank Account Branch Address'
+        "label", default="Bank Account Branch Address"
     )
     branch_address_help_text = models.TextField(
-        'help text',
+        "help text",
         blank=True,
-        default='The address of the bank branch where you have the bank account '
-        'located(not the bank account holder address)'
+        default="The address of the bank branch where you have the bank account "
+        "located(not the bank account holder address)",
     )
     ib_account_routing_number_label = models.TextField(
-        'label',
-        default='Intermediary Bank Account Routing Number'
+        "label", default="Intermediary Bank Account Routing Number"
     )
     ib_account_routing_number_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='Depending on your country, this might be called ACH, SWIFT, BIC or ABA number'
+        default="Depending on your country, this might be called ACH, SWIFT, BIC or ABA number",
     )
     ib_account_number_label = models.TextField(
-        'label',
-        default='Intermediary Bank Account Number'
+        "label", default="Intermediary Bank Account Number"
     )
     ib_account_number_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='Depending on your country, this might be called the account number, IBAN, or BBAN number'
+        default="Depending on your country, this might be called the account number, IBAN, or BBAN number",
     )
     ib_account_currency_label = models.TextField(
-        'label',
-        default='Intermediary Bank Account Currency'
+        "label", default="Intermediary Bank Account Currency"
     )
     ib_account_currency_help_text = RichTextField(
-        'help text',
-        blank=True,
-        default='This is the currency of this bank account'
+        "help text", blank=True, default="This is the currency of this bank account"
     )
     ib_branch_address_label = models.TextField(
-        'label',
-        default='Intermediary Bank Branch Address'
+        "label", default="Intermediary Bank Branch Address"
     )
     ib_branch_address_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='Bank branch address(not the bank account holder address)'
+        default="Bank branch address(not the bank account holder address)",
     )
     nid_type_label = models.TextField(
-        'label',
-        default='Account Holder National Identity Document Type'
+        "label", default="Account Holder National Identity Document Type"
     )
     nid_type_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='This could be a passport, a National Identity number, '
-        'or other national identity document.'
+        default="This could be a passport, a National Identity number, "
+        "or other national identity document.",
     )
     nid_number_label = models.TextField(
-        'label',
-        default='Account Holder National Identity Document Number'
+        "label", default="Account Holder National Identity Document Number"
     )
     nid_number_help_text = RichTextField(
-        'help text',
-        default='',
+        "help text",
+        default="",
         blank=True,
     )
-    other_info_label = models.TextField(
-        'label',
-        default='Other Information'
-    )
+    other_info_label = models.TextField("label", default="Other Information")
     other_info_help_text = RichTextField(
-        'help text',
+        "help text",
         blank=True,
-        default='If you need to include other information not listed above, provide it here.'
+        default="If you need to include other information not listed above, provide it here.",
     )
 
     panels = [
-        MultiFieldPanel([
-            FieldPanel('name_label'),
-            FieldPanel('name_help_text'),
-        ], 'Name'),
-        MultiFieldPanel([
-            FieldPanel('contractor_name_label'),
-            FieldPanel('contractor_name_help_text'),
-        ], 'Contractor Name'),
-        MultiFieldPanel([
-            FieldPanel('type_label'),
-            FieldPanel('type_help_text'),
-        ], 'Type'),
-        MultiFieldPanel([
-            FieldPanel('required_to_pay_taxes_label'),
-            FieldPanel('required_to_pay_taxes_help_text'),
-        ], 'Required to pay taxes'),
-        MultiFieldPanel([
-            FieldPanel('due_diligence_documents_label'),
-            FieldPanel('due_diligence_documents_help_text'),
-        ], 'Due Diligence Documents'),
-        MultiFieldPanel([
-            FieldPanel('account_holder_name_label'),
-            FieldPanel('account_holder_name_help_text'),
-        ], 'Account Holder Name'),
-        MultiFieldPanel([
-            FieldPanel('account_routing_number_label'),
-            FieldPanel('account_routing_number_help_text'),
-        ], 'Account Routing Number'),
-        MultiFieldPanel([
-            FieldPanel('account_number_label'),
-            FieldPanel('account_number_help_text'),
-        ], 'Account Number'),
-        MultiFieldPanel([
-            FieldPanel('account_currency_label'),
-            FieldPanel('account_currency_help_text'),
-        ], 'Account Currency'),
-        MultiFieldPanel([
-            FieldPanel('need_extra_info_label'),
-            FieldPanel('need_extra_info_help_text'),
-        ], 'Need Extra Info'),
-        MultiFieldPanel([
-            FieldPanel('branch_address_label'),
-            FieldPanel('branch_address_help_text'),
-        ], 'Account Branch Address'),
-        MultiFieldPanel([
-            FieldPanel('ib_account_routing_number_label'),
-            FieldPanel('ib_account_routing_number_help_text'),
-        ], 'Intermediary Account Routing Number'),
-        MultiFieldPanel([
-            FieldPanel('ib_account_number_label'),
-            FieldPanel('ib_account_number_help_text'),
-        ], 'Intermediary Account Number'),
-        MultiFieldPanel([
-            FieldPanel('ib_account_currency_label'),
-            FieldPanel('ib_account_currency_help_text'),
-        ], 'Intermediary Account Currency'),
-        MultiFieldPanel([
-            FieldPanel('ib_branch_address_label'),
-            FieldPanel('ib_branch_address_help_text'),
-        ], 'Intermediary Account Branch Address'),
-        MultiFieldPanel([
-            FieldPanel('nid_type_label'),
-            FieldPanel('nid_type_help_text'),
-        ], 'National Identity Document Type'),
-        MultiFieldPanel([
-            FieldPanel('nid_number_label'),
-            FieldPanel('nid_number_help_text'),
-        ], 'National Identity Document Number'),
-        MultiFieldPanel([
-            FieldPanel('other_info_label'),
-            FieldPanel('other_info_help_text'),
-        ], 'Other Information'),
+        MultiFieldPanel(
+            [
+                FieldPanel("name_label"),
+                FieldPanel("name_help_text"),
+            ],
+            "Name",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("contractor_name_label"),
+                FieldPanel("contractor_name_help_text"),
+            ],
+            "Contractor Name",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("type_label"),
+                FieldPanel("type_help_text"),
+            ],
+            "Type",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("required_to_pay_taxes_label"),
+                FieldPanel("required_to_pay_taxes_help_text"),
+            ],
+            "Required to pay taxes",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("due_diligence_documents_label"),
+                FieldPanel("due_diligence_documents_help_text"),
+            ],
+            "Due Diligence Documents",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("account_holder_name_label"),
+                FieldPanel("account_holder_name_help_text"),
+            ],
+            "Account Holder Name",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("account_routing_number_label"),
+                FieldPanel("account_routing_number_help_text"),
+            ],
+            "Account Routing Number",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("account_number_label"),
+                FieldPanel("account_number_help_text"),
+            ],
+            "Account Number",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("account_currency_label"),
+                FieldPanel("account_currency_help_text"),
+            ],
+            "Account Currency",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("need_extra_info_label"),
+                FieldPanel("need_extra_info_help_text"),
+            ],
+            "Need Extra Info",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("branch_address_label"),
+                FieldPanel("branch_address_help_text"),
+            ],
+            "Account Branch Address",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("ib_account_routing_number_label"),
+                FieldPanel("ib_account_routing_number_help_text"),
+            ],
+            "Intermediary Account Routing Number",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("ib_account_number_label"),
+                FieldPanel("ib_account_number_help_text"),
+            ],
+            "Intermediary Account Number",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("ib_account_currency_label"),
+                FieldPanel("ib_account_currency_help_text"),
+            ],
+            "Intermediary Account Currency",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("ib_branch_address_label"),
+                FieldPanel("ib_branch_address_help_text"),
+            ],
+            "Intermediary Account Branch Address",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("nid_type_label"),
+                FieldPanel("nid_type_help_text"),
+            ],
+            "National Identity Document Type",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("nid_number_label"),
+                FieldPanel("nid_number_help_text"),
+            ],
+            "National Identity Document Number",
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("other_info_label"),
+                FieldPanel("other_info_help_text"),
+            ],
+            "Other Information",
+        ),
     ]
diff --git a/hypha/apply/projects/permissions.py b/hypha/apply/projects/permissions.py
index 5c460f016be9c77ca018771aa34490702708fcc2..87b22573d090bd26ae258622e6f1d3308b5a3710 100644
--- a/hypha/apply/projects/permissions.py
+++ b/hypha/apply/projects/permissions.py
@@ -7,8 +7,8 @@ from .models.project import (
     COMPLETE,
     CONTRACTING,
     DRAFT,
-    IN_PROGRESS,
-    WAITING_FOR_APPROVAL,
+    INTERNAL_APPROVAL,
+    INVOICING_AND_REPORTING,
     ProjectSettings,
 )
 
@@ -25,77 +25,91 @@ def has_permission(action, user, object=None, raise_exception=True, **kwargs):
 
 def can_approve_contract(user, project, **kwargs):
     if project.status != CONTRACTING:
-        return False, 'Project is not in Contracting State'
+        return False, "Project is not in Contracting State"
 
     if not project.submitted_contract_documents:
-        return False, 'No contract documents submission yet'
+        return False, "No contract documents submission yet"
 
     if not user.is_authenticated:
-        return False, 'Login Required'
+        return False, "Login Required"
 
     if user.is_apply_staff and not user.is_contracting and not user.is_applicant:
-        return True, 'Only Staff can approve the contract'
+        return True, "Only Staff can approve the contract"
 
-    return False, 'Forbidden Error'
+    return False, "Forbidden Error"
 
 
 def can_upload_contract(user, project, **kwargs):
     if project.status != CONTRACTING:
-        return False, 'Project is not in Contracting State'
+        return False, "Project is not in Contracting State"
 
     if not user.is_authenticated:
-        return False, 'Login Required'
+        return False, "Login Required"
 
     if user == project.user and project.contracts.exists():
-        return True, 'Project Owner can only re-upload contract with countersigned'
+        return True, "Project Owner can only re-upload contract with countersigned"
 
     if user.is_contracting:
-        return True, 'Contracting team can upload the contract'
+        return True, "Contracting team can upload the contract"
 
-    return False, 'Forbidden Error'
+    return False, "Forbidden Error"
 
 
 def can_submit_contract_documents(user, project, **kwargs):
     if project.status != CONTRACTING:
-        return False, 'Project is not in Contracting State'
+        return False, "Project is not in Contracting State"
     if user != project.user:
-        return False, 'Only Applicant can submit contracting documents'
-    if not kwargs.get('contract', None):
-        return False, 'Can not submit without contract'
+        return False, "Only Vendor can submit contracting documents"
+    if not kwargs.get("contract", None):
+        return False, "Can not submit without contract"
     if not project.submitted_contract_documents:
-        return True, 'Applicant can submit contracting documents'
+        return True, "Vendor can submit contracting documents"
 
-    return False, 'Forbidden Error'
+    return False, "Forbidden Error"
 
 
 def can_update_paf_approvers(user, project, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
+        return False, "Login Required"
 
-    if project.status != WAITING_FOR_APPROVAL:
-        return False, 'PAF Approvers can be updated only in Waiting for approval state'
+    if project.status != INTERNAL_APPROVAL:
+        return False, "PAF Approvers can be updated only in Internal approval state"
     if user == project.lead:
-        return True, 'Lead can update approvers in approval state'
+        return True, "Lead can update approvers in approval state"
     if not project.paf_approvals.exists():
-        return False, 'No user can update approvers without paf approval, except lead(lead can add paf approvals)'
+        return (
+            False,
+            "No user can update approvers without paf approval, except lead(lead can add paf approvals)",
+        )
 
-    request = kwargs.get('request')
+    request = kwargs.get("request")
     project_settings = ProjectSettings.for_request(request)
     if project_settings.paf_approval_sequential:
         next_paf_approval = project.paf_approvals.filter(approved=False).first()
         if next_paf_approval:
-            if next_paf_approval.user and user in get_users_for_groups(list(next_paf_approval.paf_reviewer_role.user_roles.all()), exact_match=True):
-                return True, 'PAF Reviewer-roles users can update next approval approvers if any approvers assigned'
-        return False, 'Forbidden Error'
+            if next_paf_approval.user and user in get_users_for_groups(
+                list(next_paf_approval.paf_reviewer_role.user_roles.all()),
+                exact_match=True,
+            ):
+                return (
+                    True,
+                    "PAF Reviewer-roles users can update next approval approvers if any approvers assigned",
+                )
+        return False, "Forbidden Error"
     else:
         approvers_ids = []
-        for approval in project.paf_approvals.filter(approved=False, user__isnull=False):
-            approvers_ids.extend(assigner.id for assigner in
-                                 get_users_for_groups(list(approval.paf_reviewer_role.user_roles.all()),
-                                                      exact_match=True))
+        for approval in project.paf_approvals.filter(
+            approved=False, user__isnull=False
+        ):
+            approvers_ids.extend(
+                assigner.id
+                for assigner in get_users_for_groups(
+                    list(approval.paf_reviewer_role.user_roles.all()), exact_match=True
+                )
+            )
         if user.id in approvers_ids:
-            return True, 'PAF Reviewer-roles users can update approvers'
-    return False, 'Forbidden Error'
+            return True, "PAF Reviewer-roles users can update approvers"
+    return False, "Forbidden Error"
 
 
 def can_update_assigned_paf_approvers(user, project, **kwargs):
@@ -104,192 +118,255 @@ def can_update_assigned_paf_approvers(user, project, **kwargs):
     UpdateAssignApproversView will be used by only approvers teams members.
     """
     if not user.is_authenticated:
-        return False, 'Login Required'
-    if project.status != WAITING_FOR_APPROVAL:
-        return False, 'PAF approvers can be assigned only in Waiting for Approval state'
+        return False, "Login Required"
+    if project.status != INTERNAL_APPROVAL:
+        return False, "PAF approvers can be assigned only in Internal approval state"
     if not project.paf_approvals.exists():
-        return False, 'No user can assign approvers with paf_approvals'
+        return False, "No user can assign approvers with paf_approvals"
 
-    request = kwargs.get('request')
+    request = kwargs.get("request")
     project_settings = ProjectSettings.for_request(request)
     if project_settings.paf_approval_sequential:
         next_paf_approval = project.paf_approvals.filter(approved=False).first()
         if next_paf_approval:
-            if user in get_users_for_groups(list(next_paf_approval.paf_reviewer_role.user_roles.all()),
-                                                exact_match=True):
-                return True, 'PAF Reviewer-roles users can assign approvers'
-            return False, 'Forbidden Error'
-        return False, 'Forbidden Error'
+            if user in get_users_for_groups(
+                list(next_paf_approval.paf_reviewer_role.user_roles.all()),
+                exact_match=True,
+            ):
+                return True, "PAF Reviewer-roles users can assign approvers"
+            return False, "Forbidden Error"
+        return False, "Forbidden Error"
     else:
         assigners_ids = []
         for approval in project.paf_approvals.filter(approved=False):
-            assigners_ids.extend(assigner.id for assigner in
-                                 get_users_for_groups(list(approval.paf_reviewer_role.user_roles.all()),
-                                                      exact_match=True))
+            assigners_ids.extend(
+                assigner.id
+                for assigner in get_users_for_groups(
+                    list(approval.paf_reviewer_role.user_roles.all()), exact_match=True
+                )
+            )
         if user.id in assigners_ids:
-            return True, 'PAF Reviewer-roles users can assign approvers'
-    return False, 'Forbidden Error'
+            return True, "PAF Reviewer-roles users can assign approvers"
+    return False, "Forbidden Error"
 
 
 def can_assign_paf_approvers(user, project, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
+        return False, "Login Required"
 
-    if project.status != WAITING_FOR_APPROVAL:
-        return False, 'PAF approvers can be assigned only in Waiting for Approval state'
+    if project.status != INTERNAL_APPROVAL:
+        return False, "PAF approvers can be assigned only in Internal approval state"
     if not project.paf_approvals.exists():
-        return False, 'No user can assign approvers with paf_approvals'
+        return False, "No user can assign approvers with paf_approvals"
 
-    request = kwargs.get('request')
+    request = kwargs.get("request")
     project_settings = ProjectSettings.for_request(request)
     if project_settings.paf_approval_sequential:
         next_paf_approval = project.paf_approvals.filter(approved=False).first()
         if next_paf_approval:
             if next_paf_approval.user:
-                return False, 'User already assigned'
+                return False, "User already assigned"
             else:
-                if user in get_users_for_groups(list(next_paf_approval.paf_reviewer_role.user_roles.all()), exact_match=True):
-                    return True, 'PAF Reviewer-roles users can assign approvers'
-            return False, 'Forbidden Error'
-        return False, 'Forbidden Error'
+                if user in get_users_for_groups(
+                    list(next_paf_approval.paf_reviewer_role.user_roles.all()),
+                    exact_match=True,
+                ):
+                    return True, "PAF Reviewer-roles users can assign approvers"
+            return False, "Forbidden Error"
+        return False, "Forbidden Error"
     else:
         assigners_ids = []
         for approval in project.paf_approvals.filter(approved=False, user__isnull=True):
-            assigners_ids.extend(assigner.id for assigner in get_users_for_groups(list(approval.paf_reviewer_role.user_roles.all()), exact_match=True))
+            assigners_ids.extend(
+                assigner.id
+                for assigner in get_users_for_groups(
+                    list(approval.paf_reviewer_role.user_roles.all()), exact_match=True
+                )
+            )
 
         if user.id in assigners_ids:
-            return True, 'PAF Reviewer-roles users can assign approvers'
-    return False, 'Forbidden Error'
+            return True, "PAF Reviewer-roles users can assign approvers"
+    return False, "Forbidden Error"
 
 
 def can_update_paf_status(user, project, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
+        return False, "Login Required"
 
     if not project.paf_approvals.filter(approved=False).exists():
-        return False, 'No PAF Approvals Exists'
+        return False, "No PAF Approvals Exists"
 
-    if project.status != WAITING_FOR_APPROVAL:
-        return False, 'Incorrect project status to approve PAF'
+    if project.status != INTERNAL_APPROVAL:
+        return False, "Incorrect project status to approve PAF"
 
-    request = kwargs.get('request')
+    request = kwargs.get("request")
     if request:
         project_settings = ProjectSettings.for_request(request)
         if project_settings.paf_approval_sequential:
-            approver = project.paf_approvals.filter(approved=False).first().user
-            if approver and user.id == approver.id:
-                return True, 'Next Approver can approve PAF(For Sequential Approvals)'
-            return False, 'Only Next can approve PAF(For Sequential Approvals)'
-        if user.id in project.paf_approvals.filter(approved=False).values_list('user', flat=True):
-            return True, 'All assigned approvers can approve PAF(For Parallel Approvals)'
-
-        return False, 'Unable to access the Project Settings'
-
-    return False, 'Forbidden Error'
+            approval = project.paf_approvals.filter(approved=False).first()
+            possible_approvers_ids = [
+                role_user.id
+                for role_user in get_users_for_groups(
+                    list(approval.paf_reviewer_role.user_roles.all()), exact_match=True
+                )
+            ]
+            if user.id in possible_approvers_ids:
+                return (
+                    True,
+                    "Next approval group users can approve PAF(For Sequential Approvals)",
+                )
+            return (
+                False,
+                "Only Next approval group can approve PAF(For Sequential Approvals)",
+            )
+        else:
+            possible_approvers_ids = []
+            for approval in project.paf_approvals.filter(approved=False):
+                possible_approvers_ids.extend(
+                    [
+                        role_user.id
+                        for role_user in get_users_for_groups(
+                            list(approval.paf_reviewer_role.user_roles.all()),
+                            exact_match=True,
+                        )
+                    ]
+                )
+            if user.id in possible_approvers_ids:
+                return (
+                    True,
+                    "All approval group users can approve PAF(For Parallel Approvals)",
+                )
+            return (
+                False,
+                "Only approval group users can approve PAF(For Parallel Approvals)",
+            )
+
+    return False, "Forbidden Error"
 
 
 def can_update_project_status(user, project, **kwargs):
-    if project.status not in [COMPLETE, CLOSING, IN_PROGRESS]:
-        return False, 'Forbidden Error'
+    if project.status not in [COMPLETE, CLOSING, INVOICING_AND_REPORTING]:
+        return False, "Forbidden Error"
 
     if not user.is_authenticated:
-        return False, 'Login Required'
+        return False, "Login Required"
 
     if user.is_apply_staff or user.is_apply_staff_admin:
-        return True, 'Staff and Staff Admin can update status'
+        return True, "Staff and Staff Admin can update status"
 
-    return False, 'Forbidden Error'
+    return False, "Forbidden Error"
 
 
 def can_update_report(user, report, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
-    if report.project.status != IN_PROGRESS:
-        return False, 'Report can be updated only in In Progress state'
+        return False, "Login Required"
+    if report.project.status != INVOICING_AND_REPORTING:
+        return False, "Report can be updated only in Invoicing and reporting state"
     if report.skipped:
-        return False, 'Skipped reports are not editable'
+        return False, "Skipped reports are not editable"
     if not report.can_submit:
-        return False, 'Future reports are not editable'
+        return False, "Future reports are not editable"
 
     if user.is_apply_staff or (user == report.project.user and not report.current):
-        return True, 'Staff and Project Owner can edit the editable reports'
+        return True, "Staff and Project Owner can edit the editable reports"
 
-    return False, 'Forbidden Error'
+    return False, "Forbidden Error"
 
 
 def can_update_report_config(user, project, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
-    if project.status != IN_PROGRESS:
-        return False, 'Report Config can be changed only in In Progress state'
+        return False, "Login Required"
+    if project.status != INVOICING_AND_REPORTING:
+        return (
+            False,
+            "Report Config can be changed only in Invoicing and reporting state",
+        )
     if user.is_apply_staff:
-        return True, 'Only Staff can update report config for In Progress projects'
-    return False, 'Forbidden Error'
+        return (
+            True,
+            "Only Staff can update report config for Invoicing and reporting projects",
+        )
+    return False, "Forbidden Error"
 
 
 def can_update_project_reports(user, project, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
-    if project.status != IN_PROGRESS:
-        return False, 'Report Config can be changed only in In Progress state'
+        return False, "Login Required"
+    if project.status != INVOICING_AND_REPORTING:
+        return (
+            False,
+            "Report Config can be changed only in Invoicing and reporting state",
+        )
     if user.is_apply_staff or user == project.user:
-        return True, 'Only Staff and project owner can update report config for In Progress projects'
-    return False, 'Forbidden Error'
+        return (
+            True,
+            "Only Staff and project owner can update report config for Invoicing and reporting projects",
+        )
+    return False, "Forbidden Error"
 
 
 def can_view_report(user, report, **kwargs):
     if not user.is_authenticated:
-        return False, 'Login Required'
-    if report.project.status not in [COMPLETE, CLOSING, IN_PROGRESS]:
-        return False, 'Report are not available at this state'
+        return False, "Login Required"
+    if report.project.status not in [COMPLETE, CLOSING, INVOICING_AND_REPORTING]:
+        return False, "Report are not available at this state"
     if not report.current:
-        return False, 'Only current reports can be viewed'
+        return False, "Only current reports can be viewed"
     if report.skipped:
-        return False, 'Skipped reports are not available'
+        return False, "Skipped reports are not available"
     if user.is_apply_staff or user.is_finance or user == report.project.user:
-        return True, 'Staff, Finance, and Project owner can view the report'
-    return False, 'Forbidden Error'
+        return True, "Staff, Finance, and Project owner can view the report"
+    return False, "Forbidden Error"
 
 
 def can_access_project(user, project):
     if not user.is_authenticated:
-        return False, 'Login Required'
-
-    if user.is_contracting and project.status in [CONTRACTING, WAITING_FOR_APPROVAL]:
-        return True, 'Contracting can view project only in Waiting for approval and contracting status'
+        return False, "Login Required"
 
-    if user.is_finance and project.status in [WAITING_FOR_APPROVAL, IN_PROGRESS]:
-        return True, 'Finance can view project only  in Waiting for approval and in progress status'
-
-    if user.is_apply_staff:
-        return True, 'Staff can view project in all statuses'
+    if user.is_apply_staff or user.is_finance or user.is_contracting:
+        # Staff, Finance and Contracting are internal and trusted peoples,
+        # Their action are limited, but they can view all projects.
+        return True, "Staff, Finance and Contracting can view project in all statuses"
 
     if user.is_applicant and user == project.user:
-        return True, 'Applicant(project user) can view project in all statuses'
+        return True, "Vendor(project user) can view project in all statuses"
 
-    if project.status in [DRAFT, WAITING_FOR_APPROVAL, CONTRACTING] and project.paf_approvals.exists():
+    if (
+        project.status in [DRAFT, INTERNAL_APPROVAL, CONTRACTING]
+        and project.paf_approvals.exists()
+    ):
         paf_reviewer_roles_users_ids = []
         for approval in project.paf_approvals.all():
-            paf_reviewer_roles_users_ids.extend([role_user.id for role_user in get_users_for_groups(
-                list(approval.paf_reviewer_role.user_roles.all()), exact_match=True)])
+            paf_reviewer_roles_users_ids.extend(
+                [
+                    role_user.id
+                    for role_user in get_users_for_groups(
+                        list(approval.paf_reviewer_role.user_roles.all()),
+                        exact_match=True,
+                    )
+                ]
+            )
         if user.id in paf_reviewer_roles_users_ids:
-            return True, 'PAF Approvers can access the project in Draft, Approval state and after approval state'
+            return (
+                True,
+                "PAF Approvers can access the project in Draft, Approval state and after approval state",
+            )
 
-    return False, 'Forbidden Error'
+    return False, "Forbidden Error"
 
 
 permissions_map = {
-    'contract_approve': can_approve_contract,
-    'contract_upload': can_upload_contract,
-    'paf_status_update': can_update_paf_status,
-    'paf_approvers_update': can_update_paf_approvers,
-    'paf_approvers_assign': can_assign_paf_approvers,
-    'update_paf_assigned_approvers': can_update_assigned_paf_approvers,  # Permission for UpdateAssignApproversView
-    'project_status_update': can_update_project_status,
-    'project_reports_update': can_update_project_reports,
-    'report_update': can_update_report,
-    'report_config_update': can_update_report_config,
-    'report_view': can_view_report,
-    'submit_contract_documents': can_submit_contract_documents,
-    'project_access': can_access_project,
+    "contract_approve": can_approve_contract,
+    "contract_upload": can_upload_contract,
+    "paf_status_update": can_update_paf_status,
+    "paf_approvers_update": can_update_paf_approvers,
+    "paf_approvers_assign": can_assign_paf_approvers,
+    "update_paf_assigned_approvers": can_update_assigned_paf_approvers,  # Permission for UpdateAssignApproversView
+    "project_status_update": can_update_project_status,
+    "project_reports_update": can_update_project_reports,
+    "report_update": can_update_report,
+    "report_config_update": can_update_report_config,
+    "report_view": can_view_report,
+    "submit_contract_documents": can_submit_contract_documents,
+    "project_access": can_access_project,
 }
diff --git a/hypha/apply/projects/services/sageintacct/__init__.py b/hypha/apply/projects/services/sageintacct/__init__.py
index ecc225b1cbcbce5a38c0da8f855acb83d7d059a0..159af5c2d06a959a52b0bff6a2af403d3e476ce4 100644
--- a/hypha/apply/projects/services/sageintacct/__init__.py
+++ b/hypha/apply/projects/services/sageintacct/__init__.py
@@ -13,14 +13,14 @@ from .exceptions import (
 from .sageintacctsdk import SageIntacctSDK
 
 __all__ = [
-    'SageIntacctSDK',
-    'SageIntacctSDKError',
-    'ExpiredTokenError',
-    'InvalidTokenError',
-    'NoPrivilegeError',
-    'WrongParamsError',
-    'NotFoundItemError',
-    'InternalServerError'
+    "SageIntacctSDK",
+    "SageIntacctSDKError",
+    "ExpiredTokenError",
+    "InvalidTokenError",
+    "NoPrivilegeError",
+    "WrongParamsError",
+    "NotFoundItemError",
+    "InternalServerError",
 ]
 
 name = "sageintacctsdk"
diff --git a/hypha/apply/projects/services/sageintacct/exceptions.py b/hypha/apply/projects/services/sageintacct/exceptions.py
index e396902a8efc4cc01538c6b6d7c6172a559deeb6..7d64be8a599859b32b4126bf0718f81d38a222ea 100644
--- a/hypha/apply/projects/services/sageintacct/exceptions.py
+++ b/hypha/apply/projects/services/sageintacct/exceptions.py
@@ -18,10 +18,10 @@ class SageIntacctSDKError(Exception):
 class SageIntacctSDKWarning(Warning):
     """The base Warning class for SageIntacctSDK.
 
-       Parameters:
-           msg (str): Short description of the alert.
-           response: Error response from the API call.
-       """
+    Parameters:
+        msg (str): Short description of the alert.
+        response: Error response from the API call.
+    """
 
     def __init__(self, msg, response=None):
         super(SageIntacctSDKWarning, self).__init__(msg)
diff --git a/hypha/apply/projects/services/sageintacct/sageintacctsdk.py b/hypha/apply/projects/services/sageintacct/sageintacctsdk.py
index 6eed63df5a5146ad9c6011a1235a7addca864f12..bf6a8cf118c6345131b57dd14375690b65b86fa4 100644
--- a/hypha/apply/projects/services/sageintacct/sageintacctsdk.py
+++ b/hypha/apply/projects/services/sageintacct/sageintacctsdk.py
@@ -7,9 +7,13 @@ class SageIntacctSDK:
     """
 
     def __init__(
-        self, sender_id: str, sender_password: str,
-        user_id: str, company_id: str, user_password: str,
-        entity_id: str = None
+        self,
+        sender_id: str,
+        sender_password: str,
+        user_id: str,
+        company_id: str,
+        user_password: str,
+        entity_id: str = None,
     ):
         """
         Initialize connection to Sage Intacct
@@ -59,10 +63,7 @@ class SageIntacctSDK:
         Update the session id and change it in all API objects.
         """
         self.__session_id = self.api_base.get_session_id(
-            self.__user_id,
-            self.__company_id,
-            self.__user_password,
-            self.__entity_id
+            self.__user_id, self.__company_id, self.__user_password, self.__entity_id
         )
         self.api_base.set_session_id(self.__session_id)
         self.purchasing.set_session_id(self.__session_id)
diff --git a/hypha/apply/projects/services/sageintacct/utils.py b/hypha/apply/projects/services/sageintacct/utils.py
index 6adc4ecce866ddb265b83f58a7371fc4abc12142..15a2d85c652e096fb498600e948bd61e4c1edf7e 100644
--- a/hypha/apply/projects/services/sageintacct/utils.py
+++ b/hypha/apply/projects/services/sageintacct/utils.py
@@ -6,23 +6,23 @@ from django.conf import settings
 from .sageintacctsdk import SageIntacctSDK
 
 
-def fetch_deliverables(program_project_id=''):
-    '''
+def fetch_deliverables(program_project_id=""):
+    """
     Fetch deliverables from IntAcct using the program project id(DEPARTMENTID).
 
     Returns a list of deliverables or an empty list.
 
     Also logs any error that occurred during the API call.
-    '''
+    """
     if not program_project_id:
         return []
     formatted_filter = {
-        'and': {
-            'equalto': [
-                {'field': 'DOCPARID', 'value': 'Project Contract'},
-                {'field': 'DEPARTMENTID', 'value': program_project_id}
+        "and": {
+            "equalto": [
+                {"field": "DOCPARID", "value": "Project Contract"},
+                {"field": "DEPARTMENTID", "value": program_project_id},
             ],
-            'greaterthan': {'field': 'QTY_REMAINING', 'value': 0.0}
+            "greaterthan": {"field": "QTY_REMAINING", "value": 0.0},
         }
     }
 
@@ -32,7 +32,7 @@ def fetch_deliverables(program_project_id=''):
             sender_password=settings.INTACCT_SENDER_PASSWORD,
             user_id=settings.INTACCT_USER_ID,
             company_id=settings.INTACCT_COMPANY_ID,
-            user_password=settings.INTACCT_USER_PASSWORD
+            user_password=settings.INTACCT_USER_PASSWORD,
         )
     except Exception as e:
         logging.error(e)
@@ -43,11 +43,11 @@ def fetch_deliverables(program_project_id=''):
 
 
 def get_deliverables_json(invoice):
-    '''
+    """
     Get a json format of deliverables attached to the invoice.
 
     Used when creating invoice in IntAcct.
-    '''
+    """
     deliverables = invoice.deliverables.all()
     deliverables_list = []
     for deliverable in deliverables:
@@ -55,16 +55,16 @@ def get_deliverables_json(invoice):
         extra_info = project_deliverable.extra_information
         deliverables_list.append(
             {
-                'itemid': project_deliverable.external_id,
-                'quantity': deliverable.quantity,
-                'unit': extra_info['UNIT'],
-                'price': project_deliverable.unit_price,
-                'locationid': extra_info['LOCATIONID'],
-                'departmentid': extra_info['DEPARTMENTID'],
-                'projectid': extra_info['PROJECTID'],
-                'customerid': extra_info['CUSTOMERID'],
-                'classid': extra_info['CLASSID'],
-                'billable': extra_info['BILLABLE'],
+                "itemid": project_deliverable.external_id,
+                "quantity": deliverable.quantity,
+                "unit": extra_info["UNIT"],
+                "price": project_deliverable.unit_price,
+                "locationid": extra_info["LOCATIONID"],
+                "departmentid": extra_info["DEPARTMENTID"],
+                "projectid": extra_info["PROJECTID"],
+                "customerid": extra_info["CUSTOMERID"],
+                "classid": extra_info["CLASSID"],
+                "billable": extra_info["BILLABLE"],
             }
         )
     return deliverables_list
@@ -81,11 +81,11 @@ def create_intacct_invoice(invoice):
     project = invoice.project
     external_project_information = project.external_project_information
     external_projectid = project.external_projectid
-    transactiontype = 'Contract Invoice Release'
+    transactiontype = "Contract Invoice Release"
     date_created = invoice.requested_at
-    createdfrom = external_project_information['DOCPARID'] + '-' + external_projectid
-    vendorid = external_project_information['CUSTVENDID']
-    referenceno = external_project_information['PONUMBER']
+    createdfrom = external_project_information["DOCPARID"] + "-" + external_projectid
+    vendorid = external_project_information["CUSTVENDID"]
+    referenceno = external_project_information["PONUMBER"]
     project.created_at + timedelta(days=20)
     datedue = date_created + timedelta(days=20)
     contract_start_date = project.proposed_start
@@ -93,42 +93,36 @@ def create_intacct_invoice(invoice):
     deliverables = get_deliverables_json(invoice)
     vendordocno = invoice.vendor_document_number
     data = {
-        'transactiontype': transactiontype,
-        'datecreated': {
-            'year': date_created.year,
-            'month': date_created.month,
-            'day': date_created.day,
-        },
-        'createdfrom': createdfrom,
-        'vendorid': vendorid,
-        'referenceno': referenceno,
-        'vendordocno': vendordocno,
-        'datedue': {
-            'year': datedue.year,
-            'month': datedue.month,
-            'day': datedue.day,
-        },
-        'returnto': {
-            'contactname': ''
+        "transactiontype": transactiontype,
+        "datecreated": {
+            "year": date_created.year,
+            "month": date_created.month,
+            "day": date_created.day,
         },
-        'payto': {
-            'contactname': ''
+        "createdfrom": createdfrom,
+        "vendorid": vendorid,
+        "referenceno": referenceno,
+        "vendordocno": vendordocno,
+        "datedue": {
+            "year": datedue.year,
+            "month": datedue.month,
+            "day": datedue.day,
         },
-        'customfields': {
-            'customfield': [
+        "returnto": {"contactname": ""},
+        "payto": {"contactname": ""},
+        "customfields": {
+            "customfield": [
                 {
-                    'customfieldname': 'CONTRACT_START_DATE',
-                    'customfieldvalue': f'{contract_start_date.month}/{contract_start_date.day}/{contract_start_date.year}'
+                    "customfieldname": "CONTRACT_START_DATE",
+                    "customfieldvalue": f"{contract_start_date.month}/{contract_start_date.day}/{contract_start_date.year}",
                 },
                 {
-                    'customfieldname': 'CONTRACT_END_DATE',
-                    'customfieldvalue': f'{contract_end_date.month}/{contract_end_date.day}/{contract_end_date.year}'
-                }
+                    "customfieldname": "CONTRACT_END_DATE",
+                    "customfieldvalue": f"{contract_end_date.month}/{contract_end_date.day}/{contract_end_date.year}",
+                },
             ]
         },
-        'potransitems': {
-            'potransitem': deliverables
-        }
+        "potransitems": {"potransitem": deliverables},
     }
     try:
         connection = SageIntacctSDK(
@@ -136,7 +130,7 @@ def create_intacct_invoice(invoice):
             sender_password=settings.INTACCT_SENDER_PASSWORD,
             user_id=settings.INTACCT_USER_ID,
             company_id=settings.INTACCT_COMPANY_ID,
-            user_password=settings.INTACCT_USER_PASSWORD
+            user_password=settings.INTACCT_USER_PASSWORD,
         )
     except Exception as e:
         logging.error(e)
@@ -146,14 +140,12 @@ def create_intacct_invoice(invoice):
 
 
 def fetch_project_details(external_projectid):
-    '''
+    """
     Fetch detail of a project contract from IntAcct.
 
     These details will be further used to fetch deliverables and create invoices.
-    '''
-    formatted_filter = {
-        'equalto': {'field': 'DOCNO', 'value': external_projectid}
-    }
+    """
+    formatted_filter = {"equalto": {"field": "DOCNO", "value": external_projectid}}
 
     try:
         connection = SageIntacctSDK(
@@ -161,7 +153,7 @@ def fetch_project_details(external_projectid):
             sender_password=settings.INTACCT_SENDER_PASSWORD,
             user_id=settings.INTACCT_USER_ID,
             company_id=settings.INTACCT_COMPANY_ID,
-            user_password=settings.INTACCT_USER_PASSWORD
+            user_password=settings.INTACCT_USER_PASSWORD,
         )
     except Exception as e:
         logging.error(e)
diff --git a/hypha/apply/projects/services/sageintacct/wrapper/__init__.py b/hypha/apply/projects/services/sageintacct/wrapper/__init__.py
index 10e4a384b3b5eba78419a0007a2e4c15bd9878a9..4af59e24f850c70f3ba4e602307d7f64054a1bad 100644
--- a/hypha/apply/projects/services/sageintacct/wrapper/__init__.py
+++ b/hypha/apply/projects/services/sageintacct/wrapper/__init__.py
@@ -4,8 +4,8 @@ from .project import Project
 from .purchasing import Purchasing
 
 __all__ = [
-    'ApiBase',
-    'Purchasing',
-    'Invoice',
-    'Project',
+    "ApiBase",
+    "Purchasing",
+    "Invoice",
+    "Project",
 ]
diff --git a/hypha/apply/projects/services/sageintacct/wrapper/api_base.py b/hypha/apply/projects/services/sageintacct/wrapper/api_base.py
index 67f0e2b2158a5d9acbf999e1c94b7f30e910f690..d0e8867a705d3a8cb4c5326737651a83922e6717 100644
--- a/hypha/apply/projects/services/sageintacct/wrapper/api_base.py
+++ b/hypha/apply/projects/services/sageintacct/wrapper/api_base.py
@@ -25,11 +25,16 @@ from .constants import dimensions_fields_mapping
 class ApiBase:
     """The base class for all API classes."""
 
-    def __init__(self, dimension: str = None, pagesize: int = 2000, post_legacy_method: str = None):
+    def __init__(
+        self,
+        dimension: str = None,
+        pagesize: int = 2000,
+        post_legacy_method: str = None,
+    ):
         self.__sender_id = None
         self.__sender_password = None
         self.__session_id = None
-        self.__api_url = 'https://api.intacct.com/ia/xml/xmlgw.phtml'
+        self.__api_url = "https://api.intacct.com/ia/xml/xmlgw.phtml"
         self.__dimension = dimension
         self.__pagesize = pagesize
         self.__post_legacy_method = post_legacy_method
@@ -50,7 +55,9 @@ class ApiBase:
         """
         self.__sender_password = sender_password
 
-    def get_session_id(self, user_id: str, company_id: str, user_password: str, entity_id: str = None):
+    def get_session_id(
+        self, user_id: str, company_id: str, user_password: str, entity_id: str = None
+    ):
         """
         Sets the session id for APIs
         :param access_token: acceess token (JWT)
@@ -59,45 +66,45 @@ class ApiBase:
 
         timestamp = datetime.datetime.now()
         dict_body = {
-            'request': {
-                'control': {
-                    'senderid': self.__sender_id,
-                    'password': self.__sender_password,
-                    'controlid': timestamp,
-                    'uniqueid': False,
-                    'dtdversion': 3.0,
-                    'includewhitespace': False
+            "request": {
+                "control": {
+                    "senderid": self.__sender_id,
+                    "password": self.__sender_password,
+                    "controlid": timestamp,
+                    "uniqueid": False,
+                    "dtdversion": 3.0,
+                    "includewhitespace": False,
                 },
-                'operation': {
-                    'authentication': {
-                        'login': {
-                            'userid': user_id,
-                            'companyid': company_id,
-                            'password': user_password,
-                            'locationid': entity_id
+                "operation": {
+                    "authentication": {
+                        "login": {
+                            "userid": user_id,
+                            "companyid": company_id,
+                            "password": user_password,
+                            "locationid": entity_id,
                         }
                     },
-                    'content': {
-                        'function': {
-                            '@controlid': str(uuid.uuid4()),
-                            'getAPISession': None
+                    "content": {
+                        "function": {
+                            "@controlid": str(uuid.uuid4()),
+                            "getAPISession": None,
                         }
-                    }
-                }
+                    },
+                },
             }
         }
 
         response = self.__post_request(dict_body, self.__api_url)
 
-        if response['authentication']['status'] == 'success':
-            session_details = response['result']['data']['api']
-            self.__api_url = session_details['endpoint']
-            self.__session_id = session_details['sessionid']
+        if response["authentication"]["status"] == "success":
+            session_details = response["result"]["data"]["api"]
+            self.__api_url = session_details["endpoint"]
+            self.__session_id = session_details["sessionid"]
 
             return self.__session_id
 
         else:
-            raise SageIntacctSDKError('Error: {0}'.format(response['errormessage']))
+            raise SageIntacctSDKError("Error: {0}".format(response["errormessage"]))
 
     def set_session_id(self, session_id: str):
         """
@@ -117,12 +124,12 @@ class ApiBase:
             Error message assignment and type.
         """
         error = {}
-        if isinstance(errormessages['error'], list):
-            error['error'] = errormessages['error'][0]
-            error['type'] = 'list'
-        elif isinstance(errormessages['error'], dict):
-            error['error'] = errormessages['error']
-            error['type'] = 'dict'
+        if isinstance(errormessages["error"], list):
+            error["error"] = errormessages["error"][0]
+            error["type"] = "list"
+        elif isinstance(errormessages["error"], dict):
+            error["error"] = errormessages["error"]
+            error["type"] = "dict"
 
         return error
 
@@ -136,20 +143,20 @@ class ApiBase:
             Same error message with decoded Support ID.
         """
         support_id_msg = self.__support_id_msg(errormessages)
-        data_type = support_id_msg['type']
-        error = support_id_msg['error']
-        if (error and error['description2']):
-            message = error['description2']
-            support_id = re.search('Support ID: (.*)]', message)
+        data_type = support_id_msg["type"]
+        error = support_id_msg["error"]
+        if error and error["description2"]:
+            message = error["description2"]
+            support_id = re.search("Support ID: (.*)]", message)
             if support_id.group(1):
                 decoded_support_id = unquote(support_id.group(1))
                 message = message.replace(support_id.group(1), decoded_support_id)
 
         # Converting dict to list even for single error response
-        if data_type == 'dict':
-            errormessages['error'] = [errormessages['error']]
+        if data_type == "dict":
+            errormessages["error"] = [errormessages["error"]]
 
-        errormessages['error'][0]['description2'] = message if message else None
+        errormessages["error"][0]["description2"] = message if message else None
 
         return errormessages
 
@@ -164,9 +171,7 @@ class ApiBase:
             A response from the request (dict).
         """
 
-        api_headers = {
-            'content-type': 'application/xml'
-        }
+        api_headers = {"content-type": "application/xml"}
         body = xmltodict.unparse(dict_body)
 
         response = requests.post(api_url, headers=api_headers, data=body)
@@ -175,47 +180,69 @@ class ApiBase:
         parsed_response = json.loads(json.dumps(parsed_xml))
 
         if response.status_code == 200:
-            if parsed_response['response']['control']['status'] == 'success':
-                api_response = parsed_response['response']['operation']
-
-            if parsed_response['response']['control']['status'] == 'failure':
-                exception_msg = self.__decode_support_id(parsed_response['response']['errormessage'])
-                raise WrongParamsError('Some of the parameters are wrong', exception_msg)
-
-            if api_response['authentication']['status'] == 'failure':
-                raise InvalidTokenError('Invalid token / Incorrect credentials', api_response['errormessage'])
-
-            if api_response['result']['status'] == 'success':
+            if parsed_response["response"]["control"]["status"] == "success":
+                api_response = parsed_response["response"]["operation"]
+
+            if parsed_response["response"]["control"]["status"] == "failure":
+                exception_msg = self.__decode_support_id(
+                    parsed_response["response"]["errormessage"]
+                )
+                raise WrongParamsError(
+                    "Some of the parameters are wrong", exception_msg
+                )
+
+            if api_response["authentication"]["status"] == "failure":
+                raise InvalidTokenError(
+                    "Invalid token / Incorrect credentials",
+                    api_response["errormessage"],
+                )
+
+            if api_response["result"]["status"] == "success":
                 return api_response
 
-            if api_response['result']['status'] == 'failure':
-                exception_msg = self.__decode_support_id(api_response['result']['errormessage'])
-
-                for error in exception_msg['error']:
-                    if error['description2'] and 'You do not have permission for API' in error['description2']:
-                        raise InvalidTokenError('The user has insufficient privilege', exception_msg)
-
-                raise WrongParamsError('Error during {0}'.format(api_response['result']['function']), exception_msg)
+            if api_response["result"]["status"] == "failure":
+                exception_msg = self.__decode_support_id(
+                    api_response["result"]["errormessage"]
+                )
+
+                for error in exception_msg["error"]:
+                    if (
+                        error["description2"]
+                        and "You do not have permission for API"
+                        in error["description2"]
+                    ):
+                        raise InvalidTokenError(
+                            "The user has insufficient privilege", exception_msg
+                        )
+
+                raise WrongParamsError(
+                    "Error during {0}".format(api_response["result"]["function"]),
+                    exception_msg,
+                )
 
         if response.status_code == 400:
-            raise WrongParamsError('Some of the parameters are wrong', parsed_response)
+            raise WrongParamsError("Some of the parameters are wrong", parsed_response)
 
         if response.status_code == 401:
-            raise InvalidTokenError('Invalid token / Incorrect credentials', parsed_response)
+            raise InvalidTokenError(
+                "Invalid token / Incorrect credentials", parsed_response
+            )
 
         if response.status_code == 403:
-            raise NoPrivilegeError('Forbidden, the user has insufficient privilege', parsed_response)
+            raise NoPrivilegeError(
+                "Forbidden, the user has insufficient privilege", parsed_response
+            )
 
         if response.status_code == 404:
-            raise NotFoundItemError('Not found item with ID', parsed_response)
+            raise NotFoundItemError("Not found item with ID", parsed_response)
 
         if response.status_code == 498:
-            raise ExpiredTokenError('Expired token, try to refresh it', parsed_response)
+            raise ExpiredTokenError("Expired token, try to refresh it", parsed_response)
 
         if response.status_code == 500:
-            raise InternalServerError('Internal server error', parsed_response)
+            raise InternalServerError("Internal server error", parsed_response)
 
-        raise SageIntacctSDKError('Error: {0}'.format(parsed_response))
+        raise SageIntacctSDKError("Error: {0}".format(parsed_response))
 
     def format_and_send_request(self, data: Dict):
         """Format data accordingly to convert them to xml.
@@ -231,67 +258,54 @@ class ApiBase:
         timestamp = datetime.datetime.now()
 
         dict_body = {
-            'request': {
-                'control': {
-                    'senderid': self.__sender_id,
-                    'password': self.__sender_password,
-                    'controlid': timestamp,
-                    'uniqueid': False,
-                    'dtdversion': 3.0,
-                    'includewhitespace': False
+            "request": {
+                "control": {
+                    "senderid": self.__sender_id,
+                    "password": self.__sender_password,
+                    "controlid": timestamp,
+                    "uniqueid": False,
+                    "dtdversion": 3.0,
+                    "includewhitespace": False,
                 },
-                'operation': {
-                    'authentication': {
-                        'sessionid': self.__session_id
+                "operation": {
+                    "authentication": {"sessionid": self.__session_id},
+                    "content": {
+                        "function": {"@controlid": str(uuid.uuid4()), key: data[key]}
                     },
-                    'content': {
-                        'function': {
-                            '@controlid': str(uuid.uuid4()),
-                            key: data[key]
-                        }
-                    }
-                }
+                },
             }
         }
 
         response = self.__post_request(dict_body, self.__api_url)
-        return response['result']
+        return response["result"]
 
     def post(self, data: Dict):
-        if self.__dimension in ('CCTRANSACTION', 'EPPAYMENT'):
+        if self.__dimension in ("CCTRANSACTION", "EPPAYMENT"):
             return self.__construct_post_legacy_payload(data)
 
         return self.__construct_post_payload(data)
 
     def __construct_post_payload(self, data: Dict):
-        payload = {
-            'create': {
-                self.__dimension: data
-            }
-        }
+        payload = {"create": {self.__dimension: data}}
 
         return self.format_and_send_request(payload)
 
     def __construct_post_legacy_payload(self, data: Dict):
-        payload = {
-            self.__post_legacy_method: data
-        }
+        payload = {self.__post_legacy_method: data}
 
         return self.format_and_send_request(payload)
 
     def count(self):
         get_count = {
-            'query': {
-                'object': self.__dimension,
-                'select': {
-                    'field': 'RECORDNO'
-                },
-                'pagesize': '1'
+            "query": {
+                "object": self.__dimension,
+                "select": {"field": "RECORDNO"},
+                "pagesize": "1",
             }
         }
 
         response = self.format_and_send_request(get_count)
-        return int(response['data']['@totalcount'])
+        return int(response["data"]["@totalcount"])
 
     def read_by_query(self, fields: list = None):
         """Read by Query from Sage Intacct
@@ -303,11 +317,11 @@ class ApiBase:
             Dict.
         """
         payload = {
-            'readByQuery': {
-                'object': self.__dimension,
-                'fields': ','.join(fields) if fields else '*',
-                'query': None,
-                'pagesize': '1000'
+            "readByQuery": {
+                "object": self.__dimension,
+                "fields": ",".join(fields) if fields else "*",
+                "query": None,
+                "pagesize": "1000",
             }
         }
 
@@ -324,15 +338,15 @@ class ApiBase:
             Dict.
         """
         data = {
-            'readByQuery': {
-                'object': self.__dimension,
-                'fields': ','.join(fields) if fields else '*',
-                'query': "{0} = '{1}'".format(field, value),
-                'pagesize': '1000'
+            "readByQuery": {
+                "object": self.__dimension,
+                "fields": ",".join(fields) if fields else "*",
+                "query": "{0} = '{1}'".format(field, value),
+                "pagesize": "1000",
             }
         }
 
-        return self.format_and_send_request(data)['data']
+        return self.format_and_send_request(data)["data"]
 
     def get_all(self, field: str = None, value: str = None, fields: list = None):
         """Get all data from Sage Intacct
@@ -345,35 +359,37 @@ class ApiBase:
         pagesize = self.__pagesize
         for offset in range(0, count, pagesize):
             data = {
-                'query': {
-                    'object': self.__dimension,
-                    'select': {
-                        'field': fields if fields else dimensions_fields_mapping[self.__dimension]
+                "query": {
+                    "object": self.__dimension,
+                    "select": {
+                        "field": fields
+                        if fields
+                        else dimensions_fields_mapping[self.__dimension]
                     },
-                    'pagesize': pagesize,
-                    'offset': offset
+                    "pagesize": pagesize,
+                    "offset": offset,
                 }
             }
 
             if field and value:
-                data['query']['filter'] = {
-                    'equalto': {
-                        'field': field,
-                        'value': value
-                    }
-                }
+                data["query"]["filter"] = {"equalto": {"field": field, "value": value}}
 
-            paginated_data = self.format_and_send_request(data)['data'][self.__dimension]
+            paginated_data = self.format_and_send_request(data)["data"][
+                self.__dimension
+            ]
             complete_data.extend(paginated_data)
 
         return complete_data
 
     __query_filter = List[Tuple[str, str, str]]
 
-    def get_by_query(self, fields: List[str] = None,
-                     and_filter: __query_filter = None,
-                     or_filter: __query_filter = None,
-                     filter_payload: dict = None):
+    def get_by_query(
+        self,
+        fields: List[str] = None,
+        and_filter: __query_filter = None,
+        or_filter: __query_filter = None,
+        filter_payload: dict = None,
+    ):
         """Get data from Sage Intacct using query method based on filter.
 
         See sage intacct documentation here for query structures:
@@ -390,7 +406,7 @@ class ApiBase:
 
                 Returns:
                     Dict.
-                """
+        """
 
         complete_data = []
         count = self.count()
@@ -398,68 +414,82 @@ class ApiBase:
         offset = 0
         formatted_filter = filter_payload
         data = {
-            'query': {
-                'object': self.__dimension,
-                'select': {
-                    'field': fields if fields else dimensions_fields_mapping[self.__dimension]
+            "query": {
+                "object": self.__dimension,
+                "select": {
+                    "field": fields
+                    if fields
+                    else dimensions_fields_mapping[self.__dimension]
                 },
-                'pagesize': pagesize,
-                'offset': offset
+                "pagesize": pagesize,
+                "offset": offset,
             }
         }
         if and_filter and or_filter:
-            formatted_filter = {'and': {}}
+            formatted_filter = {"and": {}}
             for operator, field, value in and_filter:
-                formatted_filter['and'].setdefault(operator, {}).update({'field': field, 'value': value})
-            formatted_filter['and']['or'] = {}
+                formatted_filter["and"].setdefault(operator, {}).update(
+                    {"field": field, "value": value}
+                )
+            formatted_filter["and"]["or"] = {}
             for operator, field, value in or_filter:
-                formatted_filter['and']['or'].setdefault(operator, {}).update({'field': field, 'value': value})
+                formatted_filter["and"]["or"].setdefault(operator, {}).update(
+                    {"field": field, "value": value}
+                )
 
         elif and_filter:
             if len(and_filter) > 1:
-                formatted_filter = {'and': {}}
+                formatted_filter = {"and": {}}
                 for operator, field, value in and_filter:
-                    formatted_filter['and'].setdefault(operator, {}).update({'field': field, 'value': value})
+                    formatted_filter["and"].setdefault(operator, {}).update(
+                        {"field": field, "value": value}
+                    )
             else:
                 formatted_filter = {}
                 for operator, field, value in and_filter:
-                    formatted_filter.setdefault(operator, {}).update({'field': field, 'value': value})
+                    formatted_filter.setdefault(operator, {}).update(
+                        {"field": field, "value": value}
+                    )
         elif or_filter:
             if len(or_filter) > 1:
-                formatted_filter = {'or': {}}
+                formatted_filter = {"or": {}}
                 for operator, field, value in or_filter:
-                    formatted_filter['or'].setdefault(operator, {}).update({'field': field, 'value': value})
+                    formatted_filter["or"].setdefault(operator, {}).update(
+                        {"field": field, "value": value}
+                    )
             else:
                 formatted_filter = {}
                 for operator, field, value in or_filter:
-                    formatted_filter.setdefault(operator, {}).update({'field': field, 'value': value})
+                    formatted_filter.setdefault(operator, {}).update(
+                        {"field": field, "value": value}
+                    )
 
         if formatted_filter:
-            data['query']['filter'] = formatted_filter
+            data["query"]["filter"] = formatted_filter
 
         for offset in range(0, count, pagesize):
-            data['query']['offset'] = offset
-            paginated_data = self.format_and_send_request(data)['data']
+            data["query"]["offset"] = offset
+            paginated_data = self.format_and_send_request(data)["data"]
             complete_data.extend(paginated_data[self.__dimension])
-            filtered_total = int(paginated_data['@totalcount'])
-            if paginated_data['@numremaining'] == '0':
+            filtered_total = int(paginated_data["@totalcount"])
+            if paginated_data["@numremaining"] == "0":
                 break
         if filtered_total != len(complete_data):
             warn(
-                message='Your data may not be complete. Records returned do not equal total query record count',
+                message="Your data may not be complete. Records returned do not equal total query record count",
                 category=DataIntegrityWarning,
-                stacklevel=2
+                stacklevel=2,
             )
         return complete_data
 
     def get_lookup(self):
-        """ Returns all fields with attributes from the object called on.
+        """Returns all fields with attributes from the object called on.
 
-                Parameters:
-                    self
-                Returns:
-                    Dict.
+        Parameters:
+            self
+        Returns:
+            Dict.
         """
 
-        data = {'lookup': {'object': self.__dimension}}
-        return self.format_and_send_request(data)['data']
+        data = {"lookup": {"object": self.__dimension}}
+        return self.format_and_send_request(data)["data"]
diff --git a/hypha/apply/projects/services/sageintacct/wrapper/constants.py b/hypha/apply/projects/services/sageintacct/wrapper/constants.py
index 865e6c77b6ece7b51b9aeade880d50b57c180885..8df5562610773533a456dbab4d74c43d16dfa880 100644
--- a/hypha/apply/projects/services/sageintacct/wrapper/constants.py
+++ b/hypha/apply/projects/services/sageintacct/wrapper/constants.py
@@ -1,22 +1,17 @@
 dimensions_fields_mapping = {
-    'PODOCUMENTENTRY': [
-        'ITEMID',
-        'ITEMNAME',
-        'ITEMDESC',
-        'QTY_REMAINING',
-        'UNIT',
-        'PRICE',
-        'PROJECTID',
-        'LOCATIONID',
-        'CLASSID',
-        'BILLABLE',
-        'DEPARTMENTID',
-        'CUSTOMERID',
+    "PODOCUMENTENTRY": [
+        "ITEMID",
+        "ITEMNAME",
+        "ITEMDESC",
+        "QTY_REMAINING",
+        "UNIT",
+        "PRICE",
+        "PROJECTID",
+        "LOCATIONID",
+        "CLASSID",
+        "BILLABLE",
+        "DEPARTMENTID",
+        "CUSTOMERID",
     ],
-    'PODOCUMENT': [
-        'DOCNO',
-        'DOCPARID',
-        'PONUMBER',
-        'CUSTVENDID'
-    ]
+    "PODOCUMENT": ["DOCNO", "DOCPARID", "PONUMBER", "CUSTVENDID"],
 }
diff --git a/hypha/apply/projects/services/sageintacct/wrapper/invoice.py b/hypha/apply/projects/services/sageintacct/wrapper/invoice.py
index 81a9c8fc3edd5b026abd1af5c873143603fcbe5a..7fba7db6bd000c4916c0750b3c59dc074322b700 100644
--- a/hypha/apply/projects/services/sageintacct/wrapper/invoice.py
+++ b/hypha/apply/projects/services/sageintacct/wrapper/invoice.py
@@ -5,7 +5,5 @@ class Invoice(ApiBase):
     """Class to create Contract Invoice Release at Sage IntAcct."""
 
     def post(self, data: dict):
-        data = {
-            'create_potransaction': data
-        }
+        data = {"create_potransaction": data}
         return self.format_and_send_request(data)
diff --git a/hypha/apply/projects/services/sageintacct/wrapper/project.py b/hypha/apply/projects/services/sageintacct/wrapper/project.py
index 96387eecd0a66a65932b1db14104342d91b1f1a4..3664c57d037629289df244db4b15c3986105eb5b 100644
--- a/hypha/apply/projects/services/sageintacct/wrapper/project.py
+++ b/hypha/apply/projects/services/sageintacct/wrapper/project.py
@@ -1,4 +1,3 @@
-
 """
 Sage Intacct contract
 """
@@ -7,5 +6,6 @@ from .api_base import ApiBase
 
 class Project(ApiBase):
     """Class for contract APIs."""
+
     def __init__(self):
-        ApiBase.__init__(self, dimension='PODOCUMENT')
+        ApiBase.__init__(self, dimension="PODOCUMENT")
diff --git a/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py b/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py
index 628169d689cd5e1b8ff0635b43664c45a20374fc..d6e7f4da46ef2ba2817b79c3c06b6538c7cbfae2 100644
--- a/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py
+++ b/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py
@@ -1,4 +1,3 @@
-
 """
 Sage Intacct purchasing
 """
@@ -7,5 +6,6 @@ from .api_base import ApiBase
 
 class Purchasing(ApiBase):
     """Class for Purchasing APIs."""
+
     def __init__(self):
-        ApiBase.__init__(self, dimension='PODOCUMENTENTRY')
+        ApiBase.__init__(self, dimension="PODOCUMENTENTRY")
diff --git a/hypha/apply/projects/tables.py b/hypha/apply/projects/tables.py
index ac4f24b4456f147c08d9b0a7cfd80ec834d4cca3..97e177d3f0f485b8e1e8ba03e67b9eadc376fb05 100644
--- a/hypha/apply/projects/tables.py
+++ b/hypha/apply/projects/tables.py
@@ -9,136 +9,137 @@ from .models import Invoice, Project, Report
 
 class BaseInvoiceTable(tables.Table):
     vendor_document_number = tables.LinkColumn(
-        'funds:projects:invoice-detail',
-        verbose_name=_('Invoice Number'),
-        args=[tables.utils.A('project__pk'), tables.utils.A('pk')],
-    )
-    project = tables.Column(
-        verbose_name=_('Project Name')
+        "funds:projects:invoice-detail",
+        verbose_name=_("Invoice Number"),
+        args=[tables.utils.A("project__pk"), tables.utils.A("pk")],
     )
+    project = tables.Column(verbose_name=_("Project Name"))
     status = tables.Column()
-    requested_at = tables.DateColumn(verbose_name=_('Submitted'))
+    requested_at = tables.DateColumn(verbose_name=_("Submitted"))
 
     def render_project(self, value):
-        text = textwrap.shorten(value.title, width=30, placeholder="..."),
+        text = (textwrap.shorten(value.title, width=30, placeholder="..."),)
         return text[0]
 
 
 class InvoiceDashboardTable(BaseInvoiceTable):
     class Meta:
         fields = [
-            'requested_at',
-            'vendor_document_number',
-            'status',
-            'project',
+            "requested_at",
+            "invoice_number",
+            "status",
+            "project",
         ]
         model = Invoice
-        order_by = ['-requested_at']
-        attrs = {'class': 'invoices-table'}
+        order_by = ["-requested_at"]
+        attrs = {"class": "invoices-table"}
 
 
 class InvoiceListTable(BaseInvoiceTable):
-    fund = tables.Column(verbose_name=_('Fund'), accessor='project__submission__page')
-    lead = tables.Column(verbose_name=_('Lead'), accessor='project__lead')
+    fund = tables.Column(verbose_name=_("Fund"), accessor="project__submission__page")
+    lead = tables.Column(verbose_name=_("Lead"), accessor="project__lead")
 
     class Meta:
         fields = [
-            'requested_at',
-            'vendor_document_number',
-            'status',
-            'project',
-            'lead',
-            'fund',
+            "requested_at",
+            "invoice_number",
+            "status",
+            "project",
+            "lead",
+            "fund",
         ]
         model = Invoice
         orderable = True
-        order_by = ['-requested_at']
-        attrs = {'class': 'invoices-table'}
+        order_by = ["-requested_at"]
+        attrs = {"class": "invoices-table"}
 
 
 class BaseProjectsTable(tables.Table):
     title = tables.LinkColumn(
-        'funds:projects:detail',
+        "funds:projects:detail",
         text=lambda r: textwrap.shorten(r.title, width=30, placeholder="..."),
-        args=[tables.utils.A('pk')],
+        args=[tables.utils.A("pk")],
+    )
+    status = tables.Column(
+        verbose_name=_("Status"), accessor="get_status_display", order_by=("status",)
     )
-    status = tables.Column(verbose_name=_('Status'), accessor='get_status_display', order_by=('status',))
-    fund = tables.Column(verbose_name=_('Fund'), accessor='submission__page')
-    reporting = tables.Column(verbose_name=_('Reporting'), accessor='pk')
+    fund = tables.Column(verbose_name=_("Fund"), accessor="submission__page")
+    reporting = tables.Column(verbose_name=_("Reporting"), accessor="pk")
     last_payment_request = tables.DateColumn()
-    end_date = tables.DateColumn(verbose_name=_('End Date'), accessor='proposed_end')
+    end_date = tables.DateColumn(verbose_name=_("End Date"), accessor="proposed_end")
 
     def order_reporting(self, qs, is_descending):
-        direction = '-' if is_descending else ''
+        direction = "-" if is_descending else ""
 
-        qs = qs.order_by(f'{direction}outstanding_reports')
+        qs = qs.order_by(f"{direction}outstanding_reports")
 
         return qs, True
 
     def render_reporting(self, record):
-        if not hasattr(record, 'report_config'):
-            return '-'
+        if not hasattr(record, "report_config"):
+            return "-"
 
         if record.report_config.is_up_to_date():
-            return 'Up to date'
+            return "Up to date"
 
         if record.report_config.has_very_late_reports():
-            display = '<svg class="icon"><use xlink:href="#exclamation-point"></use></svg>'
+            display = (
+                '<svg class="icon"><use xlink:href="#exclamation-point"></use></svg>'
+            )
         else:
-            display = ''
+            display = ""
 
-        display += f'{ record.report_config.outstanding_reports() } outstanding'
+        display += f"{ record.report_config.outstanding_reports() } outstanding"
         return mark_safe(display)
 
 
 class ProjectsDashboardTable(BaseProjectsTable):
     class Meta:
         fields = [
-            'title',
-            'status',
-            'fund',
-            'reporting',
-            'last_payment_request',
-            'end_date',
+            "title",
+            "status",
+            "fund",
+            "reporting",
+            "last_payment_request",
+            "end_date",
         ]
         model = Project
         orderable = False
-        attrs = {'class': 'projects-table'}
+        attrs = {"class": "projects-table"}
 
 
 class ProjectsAssigneeDashboardTable(BaseProjectsTable):
     class Meta:
         fields = [
-            'title',
-            'fund',
-            'lead',
-            'reporting',
-            'last_payment_request',
-            'end_date',
+            "title",
+            "fund",
+            "lead",
+            "reporting",
+            "last_payment_request",
+            "end_date",
         ]
         model = Project
         orderable = False
-        exclude = ['status']
-        attrs = {'class': 'projects-table'}
+        exclude = ["status"]
+        attrs = {"class": "projects-table"}
 
 
 class ProjectsListTable(BaseProjectsTable):
     class Meta:
         fields = [
-            'title',
-            'status',
-            'lead',
-            'fund',
-            'reporting',
-            'last_payment_request',
-            'end_date',
+            "title",
+            "status",
+            "lead",
+            "fund",
+            "reporting",
+            "last_payment_request",
+            "end_date",
         ]
         model = Project
         orderable = True
-        order_by = ('-end_date',)
-        template_name = 'application_projects/tables/table.html'
-        attrs = {'class': 'projects-table'}
-
+        order_by = ("-end_date",)
+        template_name = "application_projects/tables/table.html"
+        attrs = {"class": "projects-table"}
 
     def order_end_date(self, qs, desc):
         return qs.by_end_date(desc), True
@@ -146,26 +147,22 @@ class ProjectsListTable(BaseProjectsTable):
 
 class ReportListTable(tables.Table):
     project = tables.LinkColumn(
-        'funds:projects:reports:detail',
+        "funds:projects:reports:detail",
         text=lambda r: textwrap.shorten(r.project.title, width=30, placeholder="..."),
-        args=[tables.utils.A('pk')],
+        args=[tables.utils.A("pk")],
     )
-    report_period = tables.Column(accessor='pk')
+    report_period = tables.Column(accessor="pk")
     submitted = tables.DateColumn()
-    lead = tables.Column(accessor='project__lead')
+    lead = tables.Column(accessor="project__lead")
 
     class Meta:
         fields = [
-            'project',
-            'submitted',
-        ]
-        sequence = [
-            'project',
-            'report_period',
-            '...'
+            "project",
+            "submitted",
         ]
+        sequence = ["project", "report_period", "..."]
         model = Report
-        attrs = {'class': 'responsive-table'}
+        attrs = {"class": "responsive-table"}
 
     def render_report_period(self, record):
         return f"{record.start} to {record.end_date}"
diff --git a/hypha/apply/projects/templates/application_projects/includes/contracting_documents.html b/hypha/apply/projects/templates/application_projects/includes/contracting_documents.html
index 0ee63c05fdb17d4cc32ee3835da1ad49155fdffb..d6566b582461f0ad8bc6afe4f07201c763d746ed 100644
--- a/hypha/apply/projects/templates/application_projects/includes/contracting_documents.html
+++ b/hypha/apply/projects/templates/application_projects/includes/contracting_documents.html
@@ -5,17 +5,17 @@
     <div class="docs-block__header" id="contract-documents-section" {% if collapsible_header %} x-on:click="collapsed = ! collapsed" role="button" aria-label="Toggle Contract documents visibility" aria-controls="contract-documents-elements" {% endif %}>
         <div class="docs-block__heading" >{% trans "Contracting documents" %}
             {% if collapsible_header %}
-            <svg class="icon icon--caret-up" x-show="!collapsed" aria-hidden=true><use xlink:href="#caret-up"></use></svg>
-            <svg class="icon icon--caret-down" x-show="collapsed" aria-hidden=true><use xlink:href="#caret-down"></use></svg>
+                <svg class="icon icon--caret-up" x-show="!collapsed" aria-hidden=true><use xlink:href="#caret-up"></use></svg>
+                <svg class="icon icon--caret-down" x-show="collapsed" aria-hidden=true><use xlink:href="#caret-down"></use></svg>
             {% endif %}
         </div>
         {% user_can_upload_contract object request.user as can_upload_contract %}
         {% user_can_submit_contract object user contract as can_submit_contract %}
         {% if can_submit_contract %}
             <a data-fancybox
-            data-src="#submit-contract-documents"
-            class="button button--project-action {% if remaining_contract_document_categories or not contract.signed_by_applicant %}is-disabled{% endif %}"
-            href="#">
+               data-src="#submit-contract-documents"
+               class="button button--project-action {% if remaining_contract_document_categories or not contract.signed_by_applicant %}is-disabled{% endif %}"
+               href="#">
                 {% trans "Submit contract documents" %}
             </a>
             <div class="modal" id="submit-contract-documents">
@@ -29,9 +29,9 @@
         {% user_can_approve_contract request.user object as can_approve_contract %}
         {% if contract_to_approve and can_approve_contract %}
             <a data-fancybox
-            data-src="#approve-contract"
-            class="button button--project-action"
-            href="#">
+               data-src="#approve-contract"
+               class="button button--project-action"
+               href="#">
                 {% trans "Approve contract documents" %}
             </a>
 
@@ -39,201 +39,195 @@
     </div>
 
     <ul class="docs-block__inner" id="contract-documents-elements" {% if collapsible_header %} x-show="!collapsed" role="region"
-       aria-labelledby="contract-documents-section" {% endif %}>
+            aria-labelledby="contract-documents-section" {% endif %}>
 
-        {% is_project_contract_approved object as is_contract_approved %}
-        {% contract_uploaded_by_contracting object as contract_uploaded %}
-        <li class="docs-block__row">
-            <div class="docs-block__row-inner">
-                <svg class="icon docs-block__icon {% if object.submitted_contract_documents %}is-complete{% endif %}"><use xlink:href="#tick"></use></svg>
-                <p class="docs-block__title">{% trans "Contract" %}</p>
-            </div>
-            {% if contract_uploaded %}
-            <div class="docs-block__row-inner">
-                <a class="docs-block__icon-link" href="{% url 'apply:projects:contract' pk=project.pk file_pk=contract.pk %}" target="_blank">
-                    <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                        {% trans "View" %}
-                </a>
-            </div>
-            {% if contract.updated_at %}
-            <ul class="mt-0 w-full pl-9">
-                <li class="docs-block__document">
-                    <div class="docs-block__row-inner">
-                    </div>
-                    <div class="docs-block__row-inner">
-                                <i>{{ contract.updated_at }}</i>
-                    </div>
-                </li>
-            </ul>
-            {% endif %}
-            {% if not is_contract_approved %}
-            <ul class="mt-0 w-full pl-9">
-                <li class="docs-block__document">
-                    <div class="docs-block__row-inner">
-                    </div>
-                    <div class="docs-block__row-inner">
-                        <a class="docs-block__icon-link" href="#communications" target="_blank">
-                            <svg class="icon icon--info-circle"><use xlink:href="#info-circle-fill"></use></svg>
-                                <span>{% trans "Need corrections/amendments to contract?" %}</span>
-                        </a>
-                    </div>
-                </li>
-            </ul>
-            {% endif %}
-            {% endif %}
-
-            {% show_contract_upload_row object user as show_contract_row %}
-            {% if show_contract_row %}
-            {% contract_reuploaded_by_applicant object as contract_reuploaded %}
-            <ul class="docs-block__document-list">
-                <li class="docs-block__document">
+            {% is_project_contract_approved object as is_contract_approved %}
+            {% contract_uploaded_by_contracting object as contract_uploaded %}
+            <li class="docs-block__row">
+                <div class="docs-block__row-inner">
+                    <svg class="icon docs-block__icon {% if object.submitted_contract_documents %}is-complete{% endif %}"><use xlink:href="#tick"></use></svg>
+                    <p class="docs-block__title">{% trans "Contract" %}</p>
+                </div>
+                {% if contract_uploaded %}
                     <div class="docs-block__row-inner">
-                        <svg class="icon docs-block__icon {% if contract_uploaded %}is-complete{% endif %}"><use xlink:href="#tick"></use></svg>
-                        <p class="docs-block__title">{% trans "Signed contract by Contracting team " %}
-                            <i>{% if contract.uploaded_by_contractor_at %}({{ contract.uploaded_by_contractor_at }}){% endif %}</i></p>
-                    </div>
-                    {% if can_upload_contract and user.is_contracting %}
-                    <div class="docs-block__row-inner docs-block__row-inner__contract-upload-row">
-                        <a data-fancybox class="font-bold flex items-center w-auto text-left bg-light-blue text-white mr-0 p-2.5 border-none" href="#" data-src="#upload-contract">
-                            <svg class="icon icon--arrow-up-short-bar icon--arrow-up-short-bar--contract-upload"><use xlink:href="#arrow-up-short-bar"></use></svg>
-                            {% if not contract %}
-                                {% trans "Upload" %}
-                            {% elif not contract.approver %}
-                                {% trans "Reupload" %}
-                            {% endif %}
-                        </a>
-                    </div>
-                    {% endif %}
-                </li>
-
-                <li class="docs-block__document">
-                    <div class="docs-block__row-inner">
-                        <svg class="icon docs-block__icon {% if contract_reuploaded %}is-complete{% endif %}"><use xlink:href="#tick"></use></svg>
-                        <p class="docs-block__title">{% trans "Countersigned contract by Applicant/Contractor " %}
-                        <i>{% if contract.uploaded_by_applicant_at %}({{ contract.uploaded_by_applicant_at }}){% endif %}</i></p>
-                    </div>
-                    {% if can_upload_contract and user.is_applicant %}
-                    <div class="docs-block__row-inner docs-block__row-inner__contract-upload-row">
-                        <a data-fancybox class="font-bold flex items-center w-auto text-left bg-light-blue text-white mr-0 p-2.5 border-none" href="#" data-src="#upload-contract">
-                            <svg class="icon icon--arrow-up-short-bar icon--arrow-up-short-bar--contract-upload"><use xlink:href="#arrow-up-short-bar"></use></svg>
-                            {% if not contract.signed_by_applicant %}
-                                {% trans "Upload" %}
-                            {% elif not contract.approver %}
-                                {% trans "Reupload" %}
-                            {% endif %}
+                        <a class="font-bold flex items-center w-auto text-left bg-white text-light-blue mr-0 mb-1 p-2.5 border-solid border border-light-blue focus:text-light-blue hover:bg-light-blue hover:text-white" href="{% url 'apply:projects:contract' pk=project.pk file_pk=contract.pk %}" target="_blank">
+                            <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                            {% trans "View" %}
                         </a>
                     </div>
+                    {% if not is_contract_approved %}
+                        <ul class="mt-0 w-full pl-9">
+                            <li class="docs-block__document">
+                                <div class="docs-block__row-inner">
+                                </div>
+                                <div class="docs-block__row-inner">
+                                    <svg class="icon icon--info-circle"><use xlink:href="#info-circle-fill"></use></svg>
+                                    <a class="docs-block__icon-link" href="#communications" target="_blank">
+                                        <span>{% trans "Corrections/amendments?" %}</span>
+                                    </a>
+                                </div>
+                            </li>
+                        </ul>
                     {% endif %}
-                </li>
-            </ul>
-            {% endif %}
-        </li>
+                {% endif %}
 
-        {% if contracting_documents_configured and contract_uploaded %}
-        <li class="docs-block__row">
-            <div class="docs-block__row-inner">
-                <svg class="icon docs-block__icon{% if not remaining_contract_document_categories %} is-complete{% endif %}">
-                    <use xlink:href="#tick"></use>
-                </svg>
-                <p class="docs-block__title">{% trans "Contracting documents" %}</p>
-            </div>
-            {% can_update_contracting_documents object user as can_update_documents %}
-
-            {% if all_contract_document_categories %}
-
-            <div class="w-full pl-9">
-                <p></p>
-                <ul>
-                    {% for document_category in all_contract_document_categories %}
+                {% show_contract_upload_row object user as show_contract_row %}
+                {% if show_contract_row %}
+                    {% contract_reuploaded_by_applicant object as contract_reuploaded %}
+                    <ul class="mt-2 w-full pl-9">
                         <li class="docs-block__document">
-                            <div class="docs-block__document-inner">
-                                <p class="docs-block__document-info">{{ document_category.name }}
-                                    {% if document_category.required %}<span class="text-red-700">*</span>{% endif %}
-                                    {% if document_category.template %}
-                                    <a class="pl-2 font-bold underline decoration-dashed" href="{% url 'apply:projects:category_template' pk=object.pk type='contract_document' category_pk=document_category.pk %}" target="_blank">{% trans "View template" %}</a>
-                                    <svg class="icon icon--info-circle pl-0.5"><use xlink:href="#info-circle-fill"></use></svg>
-                                    {% endif %}
-                                </p>
-                                {% if document_category not in remaining_contract_document_categories %}
-                                    {% contract_category_latest_file project document_category as latest_file %}
-                                    <p class="docs-block__document-info"><b>{{ latest_file.title }}</b> - {{ latest_file.created_at }}</p>
-                                {% endif %}
+                            <div class="docs-block__row-inner">
+                                <p class="docs-block__title">
+                                    {% if not contract.uploaded_by_contractor_at %}{% trans "Pending signed contract by " %}{% else %}{% trans "Signed contract by " %}{% endif %}{% if user == object.user %}{{ ORG_SHORT_NAME }}{% else %}{% trans "Contracting team " %} {% endif %}
+                                    <i>{% if contract.uploaded_by_contractor_at %}({{ contract.uploaded_by_contractor_at }}){% endif %}</i></p>
                             </div>
-                            {% if document_category in remaining_contract_document_categories and can_update_documents %}
-                                <div class="docs-block__document-inner__actions">
-                                    <a data-fancybox data-src="#upload-contracting-doc" class="font-bold flex items-center mr-0" onclick="handleCategory({{ document_category.id }})" href="#">
-                                        <svg class="icon icon--arrow-up-short-bar"><use xlink:href="#arrow-up-short-bar"></use></svg>
-                                        {% trans "Upload" %}
+                            {% if can_upload_contract and user.is_contracting %}
+                                <div class="docs-block__row-inner docs-block__row-inner__contract-upload-row">
+                                    <a data-fancybox class="font-bold flex items-center w-auto text-left bg-light-blue text-white mr-0 p-2.5 border-none" href="#" data-src="#upload-contract">
+                                        <svg class="icon icon--arrow-up-short-bar icon--arrow-up-short-bar--contract-upload"><use xlink:href="#arrow-up-short-bar"></use></svg>
+                                        {% if not contract %}
+                                            {% trans "Upload" %}
+                                        {% elif not contract.approver %}
+                                            {% trans "Reupload" %}
+                                        {% endif %}
                                     </a>
                                 </div>
-                            {% else %}
-                                {% contract_category_latest_file project document_category as latest_file %}
-                                {% if latest_file %}
-                                <div class="docs-block__row-inner">
-                                    <a class="docs-block__icon-link" href="{% url 'apply:projects:contract_document' pk=object.pk file_pk=latest_file.pk %}" target="_blank">
-                                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                                        {% trans "View" %}
+                            {% endif %}
+                        </li>
+
+                        <li class="docs-block__document">
+                            <div class="docs-block__row-inner">
+                                <p class="docs-block__title">{% if not contract.uploaded_by_applicant_at %}{% trans "Pending countersigned contract by " %}{% else %}{% trans "Countersigned contract by " %}{% endif %}{% if user == object.user %}{% trans "you " %} {% else %}{% trans "Vendor " %}{% endif %}
+                                    <i>{% if contract.uploaded_by_applicant_at %}({{ contract.uploaded_by_applicant_at }}){% endif %}</i></p>
+                            </div>
+                            {% if can_upload_contract and user.is_applicant %}
+                                <div class="docs-block__row-inner docs-block__row-inner__contract-upload-row">
+                                    <a data-fancybox class="font-bold flex items-center w-auto text-left bg-light-blue text-white mr-0 p-2.5 border-none" href="#" data-src="#upload-contract">
+                                        <svg class="icon icon--arrow-up-short-bar icon--arrow-up-short-bar--contract-upload"><use xlink:href="#arrow-up-short-bar"></use></svg>
+                                        {% if not contract.signed_by_applicant %}
+                                            {% trans "Upload" %}
+                                        {% elif not contract.approver %}
+                                            {% trans "Reupload" %}
+                                        {% endif %}
                                     </a>
-                                    {% if can_update_documents %}
-                                    <form method="POST" id="{{ remove_contract_document_form.name }}-{{ latest_file.pk }}" class="docs-block__icon-link">
-                                        <svg class="icon icon--delete" style="margin-left:0; margin-right:2px"><use xlink:href="#delete"></use></svg>
-                                        {% csrf_token %}
-                                        {{ latest_file.get_remove_form }}
-                                        <input
-                                            class="button button--link button--remove"
-                                            id="{{ remove_contract_document_form.name }}-submit"
-                                            name="{{ form_prefix }}{{ remove_contract_document_form.name }}"
-                                            type="submit"
-                                            form="{{ remove_contract_document_form.name }}-{{ latest_file.pk }}"
-                                            value="{% trans 'Remove' %}" />
-                                    </form>
-                                    {% endif %}
                                 </div>
-                                {% endif %}
                             {% endif %}
                         </li>
-                    {% endfor %}
-                </ul>
-            </div>
+                    </ul>
+                {% endif %}
+            </li>
+
+            {% if contracting_documents_configured and contract_uploaded %}
+                <li class="docs-block__row">
+                    <div class="docs-block__row-inner">
+                        <svg class="icon docs-block__icon{% if not remaining_contract_document_categories %} is-complete{% endif %}">
+                            <use xlink:href="#tick"></use>
+                        </svg>
+                        <p class="docs-block__title">{% trans "Contracting documents" %}</p>
+                    </div>
+                    {% can_update_contracting_documents object user as can_update_documents %}
+
+                    {% if all_contract_document_categories %}
+
+                        <div class="w-full pl-9">
+                            <p></p>
+                            <ul>
+                                {% for document_category in all_contract_document_categories %}
+                                    <li class="docs-block__document">
+                                        <div class="docs-block__document-inner">
+                                            <p class="docs-block__document-info">
+                                                {% if document_category in remaining_contract_document_categories %}
+                                                    {% trans "Pending " %}
+                                                    {{ document_category.name|lower }}
+                                                {% else %}
+                                                    {{ document_category.name }}
+                                                {% endif %}
+                                                {% if document_category.required %}<span class="text-red-700">*</span>{% endif %}
+                                                {% if document_category.template %}
+                                                    <svg class="icon icon--info-circle"><use xlink:href="#info-circle-fill"></use></svg>
+                                                    <a class="font-bold underline decoration-dashed" href="{% url 'apply:projects:category_template' pk=object.pk type='contract_document' category_pk=document_category.pk %}" target="_blank">{% trans "View template" %}</a>
+                                                {% endif %}
+                                            </p>
+                                            {% if document_category not in remaining_contract_document_categories %}
+                                                {% contract_category_latest_file project document_category as latest_file %}
+                                                <p class="docs-block__document-info"><b>{{ latest_file.title }}</b> - {{ latest_file.created_at }}</p>
+                                            {% endif %}
+                                        </div>
+                                        {% if document_category in remaining_contract_document_categories and can_update_documents %}
+                                            <div class="docs-block__document-inner__actions">
+                                                <a data-fancybox data-src="#upload-contracting-doc" class="font-bold flex items-center mr-0" onclick="handleCategory({{ document_category.id }})" href="#">
+                                                    <svg class="icon icon--arrow-up-short-bar"><use xlink:href="#arrow-up-short-bar"></use></svg>
+                                                    {% trans "Upload" %}
+                                                </a>
+                                            </div>
+                                        {% else %}
+                                            {% contract_category_latest_file project document_category as latest_file %}
+                                            {% if latest_file %}
+                                                <div class="docs-block__row-inner">
+                                                    <a class="docs-block__icon-link" href="{% url 'apply:projects:contract_document' pk=object.pk file_pk=latest_file.pk %}" target="_blank">
+                                                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                                                        {% trans "View" %}
+                                                    </a>
+                                                    {% if can_update_documents %}
+                                                        <form method="POST" id="{{ remove_contract_document_form.name }}-{{ latest_file.pk }}" class="docs-block__icon-link">
+                                                            <svg class="icon icon--delete" style="margin-left:0; margin-right:2px"><use xlink:href="#delete"></use></svg>
+                                                            {% csrf_token %}
+                                                            {{ latest_file.get_remove_form }}
+                                                            <input
+                                                                class="button button--link button--remove"
+                                                                id="{{ remove_contract_document_form.name }}-submit"
+                                                                name="{{ form_prefix }}{{ remove_contract_document_form.name }}"
+                                                                type="submit"
+                                                                form="{{ remove_contract_document_form.name }}-{{ latest_file.pk }}"
+                                                                value="{% trans 'Remove' %}" />
+                                                        </form>
+                                                    {% endif %}
+                                                </div>
+                                            {% endif %}
+                                        {% endif %}
+                                    </li>
+                                {% endfor %}
+                            </ul>
+                        </div>
+                    {% endif %}
+                </li>
             {% endif %}
-        </li>
-        {% endif %}
 
-    </ul>
+        </ul>
 </div>
 
 <!-- Modals -->
 
 {% if can_upload_contract %}
-<div class="modal" id="upload-contract">
-    {% if user.is_applicant %}
-        <h4 class="modal__project-header-bar">{% trans "Upload Countersigned Contract" %}</h4>
-        {% trans "Upload" as upload %}
-    {% else %}
-        <h4 class="modal__project-header-bar">{% trans "Upload Signed Contract" %}</h4>
-        <p><i><b>{% trans "The signed contract will be sent to Applicant once you submit." %}</b></i></p>
-        <br>
-        {% trans "Submit" as upload %}
-    {% endif %}
-    {% include 'funds/includes/delegated_form_base.html' with form=contract_form value=upload %}
-</div>
+    <div class="modal" id="upload-contract">
+        {% if user.is_applicant %}
+            <h4 class="modal__project-header-bar">{% trans "Upload Countersigned Contract" %}</h4>
+            {% trans "Upload" as upload %}
+        {% else %}
+            <h4 class="modal__project-header-bar">{% trans "Upload Signed Contract" %}</h4>
+            <p><i><b>{% trans "The signed contract will be sent to Applicant once you submit." %}</b></i></p>
+            <br>
+            {% trans "Submit" as upload %}
+        {% endif %}
+        {% include 'funds/includes/delegated_form_base.html' with form=contract_form value=upload %}
+    </div>
 {% endif %}
 
 {% if can_update_documents %}
-<div class="modal" id="upload-contracting-doc">
-    <h4 class="modal__project-header-bar">{% trans "Upload contracting documents" %}</h4>
-    <p></p>
-    {% trans "Submit" as submit %}
-    {% include 'funds/includes/delegated_form_base.html' with form=contract_document_form value=submit %}
-</div>
+    <div class="modal" id="upload-contracting-doc">
+        <h4 class="modal__project-header-bar">{% trans "Upload contracting documents" %}</h4>
+        <p></p>
+        {% trans "Submit" as submit %}
+        {% include 'funds/includes/delegated_form_base.html' with form=contract_document_form value=submit %}
+    </div>
 {% endif %}
 
 {% if contract_to_approve %}
-<div class="modal" id="approve-contract">
-    <h4 class="modal__project-header-bar">{% trans "Approve Contract" %}</h4>
-    <p>{% trans "You confirm that the uploaded contract is acceptable for commencing the project." %}</p>
-    <p>{% trans "This cannot be undone." %}</p>
-    {% trans "Confirm" as confirm %}
-    {% include 'funds/includes/delegated_form_base.html' with form=approve_contract_form value=confirm %}
-</div>
+    <div class="modal" id="approve-contract">
+        <h4 class="modal__project-header-bar">{% trans "Approve Contract" %}</h4>
+        <p>{% trans "You confirm that the uploaded contract is acceptable for commencing the project." %}</p>
+        <p>{% trans "This cannot be undone." %}</p>
+        {% trans "Confirm" as confirm %}
+        {% include 'funds/includes/delegated_form_base.html' with form=approve_contract_form value=confirm %}
+    </div>
 {% endif %}
diff --git a/hypha/apply/projects/templates/application_projects/includes/deliverables_block.html b/hypha/apply/projects/templates/application_projects/includes/deliverables_block.html
index 6228a6eb34e8bc76091a1f3c99fc1ab2e7ecd7b8..acb4a70421568d9c3843eb6cc89490dbcf4bd4fa 100644
--- a/hypha/apply/projects/templates/application_projects/includes/deliverables_block.html
+++ b/hypha/apply/projects/templates/application_projects/includes/deliverables_block.html
@@ -1,4 +1,4 @@
-{% load i18n invoice_tools %}
+{% load i18n invoice_tools apply_tags %}
 <div class="sidebar__inner">
     {% can_edit_deliverables invoice user as user_can_edit_deliverables %}
     {% if user_can_edit_deliverables %}
@@ -6,17 +6,17 @@
         <form id="add-deliverables", action="" data-projectid="{{ project.id }}" data-invoiceid="{{ invoice.id }}">
             <div class="select-deliverables">
                 <select name="deliverables" id="deliverables">
-                <option value="deliverables">{% trans "Invoice Covers Deliverables" %}</option>
-                {% for deliverable in deliverables %}
-                    <option id="{{ deliverable.id }}" value="{{ deliverable.id }}" data-deliverableid="{{ deliverable.id }}" data-availabletoinvoice="{{ deliverable.available_to_invoice }}">{{ deliverable.name }} (${{ deliverable.unit_price }})</option>
-                {% endfor %}
+                    <option value="deliverables">{% trans "Invoice Covers Deliverables" %}</option>
+                    {% for deliverable in deliverables %}
+                        <option id="{{ deliverable.id }}" value="{{ deliverable.id }}" data-deliverableid="{{ deliverable.id }}" data-availabletoinvoice="{{ deliverable.available_to_invoice }}">{{ deliverable.name }} (${{ deliverable.unit_price }})</option>
+                    {% endfor %}
                 </select>
             </div>
             <br>
-                <div class="available-to-invoice">
-                    <b>{% trans "Available to invoice:" %} </b>
-                </div>
-                <br>
+            <div class="available-to-invoice">
+                <b>{% trans "Available to invoice:" %} </b>
+            </div>
+            <br>
             <div class="quantity">
                 <b><label for="quantity">{% trans "Quantity:" %}</label></b>
                 <input type="number" id="quantity" name="quantity" min="1">
@@ -32,13 +32,13 @@
     <div id="list-deliverables">
         <div class="deliverables">
             {% for deliverable in invoice.deliverables.all %}
-                <b>{{ deliverable.deliverable.name }} ({{ deliverable.quantity }} {{ CURRENCY_SYMBOL }}{{deliverable.deliverable.unit_price}})</b>{% if user_can_edit_deliverables %}<a href="{% url "api:v1:remove-deliverables" pk=deliverable.pk invoice_pk=invoice.pk project_pk=project.pk %}"> {% trans "Remove" %}</a>{% endif %}<br>
+                <b>{{ deliverable.deliverable.name }} ({{ deliverable.quantity }} {{ deliverable.deliverable.unit_price|format_number_as_currency }})</b>{% if user_can_edit_deliverables %}<a href="{% url "api:v1:remove-deliverables" pk=deliverable.pk invoice_pk=invoice.pk project_pk=project.pk %}"> {% trans "Remove" %}</a>{% endif %}<br>
             {% endfor %}
         </div>
         {% if invoice.deliverables_total_amount.total %}
             <div class="total">
                 <b>...</b><br>
-                <b>{% trans "Total:" %} {{ CURRENCY_SYMBOL}}{{ invoice.deliverables_total_amount.total }}</b>
+                <b>{% trans "Total:" %} {{ invoice.deliverables_total_amount.total|format_number_as_currency }}</b>
             </div>
         {% endif %}
     </div>
diff --git a/hypha/apply/projects/templates/application_projects/includes/invoices.html b/hypha/apply/projects/templates/application_projects/includes/invoices.html
index e0747d8f57c8c301d028273416defe3fa9c91f83..fd2747916a190213bdce205651a58efe6efcab09 100644
--- a/hypha/apply/projects/templates/application_projects/includes/invoices.html
+++ b/hypha/apply/projects/templates/application_projects/includes/invoices.html
@@ -15,64 +15,65 @@
         <table class="data-block__table">
             <thead>
                 <tr>
-                    <th class="data-block__table-date">{% trans "Submitted" %}</th>
-                    <th class="data-block__table-amount">{% trans "Invoice Number" %}</th>
+                    <th class="data-block__table-date">{% trans "Date submitted" %}</th>
+                    <th class="data-block__table-amount">{% trans "Invoice number" %}</th>
                     <th class="data-block__table-status">{% trans "Status" %}</th>
                     <th class="data-block__table-update"></th>
                 </tr>
             </thead>
             <tbody>
                 {% for invoice in object.invoices.not_rejected %}
-                <tr>
-                    <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Submitted" %}: </span>{{ invoice.requested_at.date }}</td>
-                    <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Invoice Number" %}: </span>{{ invoice.vendor_document_number }}</td>
-                    <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Status" %}: </span>{{ invoice.get_status_display }}</td>
-                    <td class="flex flex-wrap justify-end py-4 px-0">
-                        <a class="data-block__action-icon-link" href="{{ invoice.get_absolute_url }}" target="_blank">
-                            <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                            {% trans "View" %}
-                        </a>
-                        {% can_edit invoice user as user_can_edit_request %}
-                        {% if user_can_edit_request %}
-                        <a class="data-block__action-icon-link" target="_blank" href="{% url "apply:projects:invoice-edit" pk=invoice.project.pk invoice_pk=invoice.pk %}">
-                            <svg class="icon icon--project-pen"><use xlink:href="#pen"></use></svg>
-                            {% trans "Edit" %}
-                        </a>
-                        {% endif %}
-
-                        {% can_delete invoice user as user_can_delete_request %}
-                        {% if user.is_applicant and user_can_delete_request %}
-                        <a class="data-block__action-icon-link data-block__action-icon-link--remove" target="_blank" href="{% url 'apply:projects:invoice-delete' pk=invoice.project.pk invoice_pk=invoice.pk %}">
-                            <svg class="icon icon--delete" style="margin-left:0; margin-right:2px"><use xlink:href="#delete"></use></svg>
-                            {% trans "Delete" %}
-                        </a>
-                        {% endif %}
-                        {% can_change_status invoice user as can_change_invoice_status %}
-                        {% if can_change_invoice_status %}
-                            <a
-                                data-fancybox
-                                data-src="#change-invoice-status-{{ invoice.id }}"
-                                id="update_invoice_status-{{ invoice.id }}"
-                                class="data-block__button button button--primary"
-                                href="#"
-                            >
-                            {% trans "Update Status" %}
+                    {% display_invoice_status_for_user user invoice as invoice_status %}
+                    <tr>
+                        <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Date submitted" %}: </span>{{ invoice.requested_at.date }}</td>
+                        <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Invoice number" %}: </span>{{ invoice.invoice_number }}</td>
+                        <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Status" %}: </span>{{ invoice_status }}</td>
+                        <td class="flex flex-wrap justify-end py-4 px-0">
+                            <a class="data-block__action-icon-link" href="{{ invoice.get_absolute_url }}" target="_blank">
+                                <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                                {% trans "View" %}
                             </a>
-                            <div class="modal" id="change-invoice-status-{{ invoice.id }}">
-                                {% get_invoice_form invoice user as invoice_form %}
-                                {% get_invoice_form_id invoice_form invoice as invoice_form_id %}
-                                <h4 class="modal__project-header-bar">{% trans "Update Invoice status" %}</h4>
-                                <p>{% trans "Current status" %}: {{ invoice.get_status_display }}</p>
-                                {% trans "Update Status" as update %}
-                                {% include 'funds/includes/delegated_form_base.html' with form=invoice_form value=update action=invoice.get_absolute_url form_id=invoice_form_id %}
-                            </div>
-                        {% endif %}
-                    </td>
-                </tr>
+                            {% can_edit invoice user as user_can_edit_request %}
+                            {% if user_can_edit_request %}
+                                <a class="data-block__action-icon-link" target="_blank" href="{% url "apply:projects:invoice-edit" pk=invoice.project.pk invoice_pk=invoice.pk %}">
+                                    <svg class="icon icon--project-pen"><use xlink:href="#pen"></use></svg>
+                                    {% trans "Edit" %}
+                                </a>
+                            {% endif %}
+
+                            {% can_delete invoice user as user_can_delete_request %}
+                            {% if user.is_applicant and user_can_delete_request %}
+                                <a class="data-block__action-icon-link data-block__action-icon-link--remove" target="_blank" href="{% url 'apply:projects:invoice-delete' pk=invoice.project.pk invoice_pk=invoice.pk %}">
+                                    <svg class="icon icon--delete" style="margin-left:0; margin-right:2px"><use xlink:href="#delete"></use></svg>
+                                    {% trans "Delete" %}
+                                </a>
+                            {% endif %}
+                            {% can_change_status invoice user as can_change_invoice_status %}
+                            {% if can_change_invoice_status %}
+                                <a
+                                    data-fancybox
+                                    data-src="#change-invoice-status-{{ invoice.id }}"
+                                    id="update_invoice_status-{{ invoice.id }}"
+                                    class="data-block__button button button--primary"
+                                    href="#"
+                                >
+                                    {% trans "Update Status" %}
+                                </a>
+                                <div class="modal" id="change-invoice-status-{{ invoice.id }}">
+                                    {% get_invoice_form invoice user as invoice_form %}
+                                    {% get_invoice_form_id invoice_form invoice as invoice_form_id %}
+                                    <h4 class="modal__project-header-bar">{% trans "Update Invoice status" %}</h4>
+                                    <p>{% trans "Current status" %}: {{ invoice_status }}</p>
+                                    {% trans "Update Status" as update %}
+                                    {% include 'funds/includes/delegated_form_base.html' with form=invoice_form value=update action=invoice.get_absolute_url form_id=invoice_form_id %}
+                                </div>
+                            {% endif %}
+                        </td>
+                    </tr>
                 {% empty %}
-                <tr>
-                    <td colspan="5">{% trans "No active Invoices." %}</td>
-                </tr>
+                    <tr>
+                        <td colspan="5">{% trans "No active Invoices." %}</td>
+                    </tr>
                 {% endfor %}
             </tbody>
         </table>
@@ -85,25 +86,26 @@
             <table class="data-block__table is-hidden js-payment-block-rejected-table">
                 <thead>
                     <tr>
-                        <th class="data-block__table-date">{% trans "Submitted" %}</th>
-                        <th class="data-block__table-amount">{% trans "Invoice Number" %}</th>
+                        <th class="data-block__table-date">{% trans "Date submitted" %}</th>
+                        <th class="data-block__table-amount">{% trans "Invoice number" %}</th>
                         <th class="data-block__table-status">{% trans "Status" %}</th>
                         <th class="data-block__table-update"></th>
                     </tr>
                 </thead>
                 <tbody>
                     {% for invoice in object.invoices.rejected %}
-                    <tr>
-                        <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Submitted" %}: </span>{{ invoice.requested_at.date }}</td>
-                        <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Invoice Number" %}: </span>{{ invoice.vendor_document_number }}</td>
-                        <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Status" %}: </span>{{ invoice.get_status_display }}</td>
-                        <td class="flex justify-end py-4 px-0">
-                            <a class="data-block__action-icon-link" href="{{ invoice.get_absolute_url }}" target="_blank">
-                                <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                                {% trans "View" %}
-                            </a>
-                        </td>
-                    </tr>
+                        {% display_invoice_status_for_user user invoice as invoice_status %}
+                        <tr>
+                            <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Date submitted" %}: </span>{{ invoice.requested_at.date }}</td>
+                            <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Invoice number" %}: </span>{{ invoice.invoice_number }}</td>
+                            <td class="py-4 px-2.5"><span class="data-block__mobile-label">{% trans "Status" %}: </span>{{ invoice_status }}</td>
+                            <td class="flex justify-end py-4 px-0">
+                                <a class="data-block__action-icon-link" href="{{ invoice.get_absolute_url }}" target="_blank">
+                                    <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                                    {% trans "View" %}
+                                </a>
+                            </td>
+                        </tr>
                     {% endfor %}
                 </tbody>
             </table>
diff --git a/hypha/apply/projects/templates/application_projects/includes/report_frequency_config.html b/hypha/apply/projects/templates/application_projects/includes/report_frequency_config.html
index f81ad773480e09e64a36e1b88f7f1547190e29d4..b559c85b559651903404751d4876c26e49a7467d 100644
--- a/hypha/apply/projects/templates/application_projects/includes/report_frequency_config.html
+++ b/hypha/apply/projects/templates/application_projects/includes/report_frequency_config.html
@@ -37,7 +37,7 @@
         id="{{ form.name }}"
         enctype="multipart/form-data"
         {% if action %}action="{{ action }}"{% endif %}
-        >
+    >
         {% csrf_token %}
 
         {{ form.media }}
@@ -61,13 +61,13 @@
         {% endfor %}
 
         {% if cancel %}
-        <button
-            type="button"
-            data-fancybox-close=""
-            class="button button--{% if invert %}primary{% else %}white{% endif %} button--top-space"
-            title="{% trans "Close" %}">
-            {% trans "Cancel" %}
-        </button>
+            <button
+                type="button"
+                data-fancybox-close=""
+                class="button button--{% if invert %}primary{% else %}white{% endif %} button--top-space"
+                title="{% trans "Close" %}">
+                {% trans "Cancel" %}
+            </button>
         {% endif %}
 
         <button class="button button--submit button--top-space button--primary" type="submit" name="{{ form_prefix }}{{ form.name }}" value="save">{% trans "Save" %}</button>
diff --git a/hypha/apply/projects/templates/application_projects/includes/report_line.html b/hypha/apply/projects/templates/application_projects/includes/report_line.html
index 4f293e594a36ac155ae9f02925d9939810f63929..d49703d941d57861b6481a0bb138ef2ba0e2e418 100644
--- a/hypha/apply/projects/templates/application_projects/includes/report_line.html
+++ b/hypha/apply/projects/templates/application_projects/includes/report_line.html
@@ -6,7 +6,7 @@
         {% else %}
             {% trans "A report is due for the period" %}
         {% endif %}
-            <b>{{ report.start_date }}</b> {% trans "to" %} <b>{{ report.end_date }}</b>
+        <b>{{ report.start_date }}</b> {% trans "to" %} <b>{{ report.end_date }}</b>
         {% if report.is_very_late %}
             <svg class="icon data-block__icon"><use xlink:href="#exclamation-point"></use></svg>
         {% endif %}
@@ -18,7 +18,7 @@
                 class="data-block__button button button--primary"
                 href="{% url "apply:projects:reports:edit" pk=report.pk %}"
             >
-            {% if report.draft %}{% trans "Continue Editing" %}{% else %}{% trans "Add Report" %}{% endif %}
+                {% if report.draft %}{% trans "Continue Editing" %}{% else %}{% trans "Add Report" %}{% endif %}
             </a>
         {% endif %}
 
@@ -34,13 +34,13 @@
                     <p>{% trans "This will result in a gap in reporting for the project. You can undo this at any time." %}</p>
                 </div>
                 {% if not current %}
-                <form action="{% url "apply:projects:reports:skip" pk=report.pk %}" method="post">
-                    {% csrf_token %}
-                    <div class="modal__buttons">
-                        <button type="submit" class="button button--primary button--submit">{% trans "Continue" %}</button>
-                        <button data-fancybox-close class="button button--submit button--white">{% trans "Cancel" %}</button>
-                    </div>
-                </form>
+                    <form action="{% url "apply:projects:reports:skip" pk=report.pk %}" method="post">
+                        {% csrf_token %}
+                        <div class="modal__buttons">
+                            <button type="submit" class="button button--primary button--submit">{% trans "Continue" %}</button>
+                            <button data-fancybox-close class="button button--submit button--white">{% trans "Cancel" %}</button>
+                        </div>
+                    </form>
                 {% endif %}
             </div>
 
diff --git a/hypha/apply/projects/templates/application_projects/includes/reports.html b/hypha/apply/projects/templates/application_projects/includes/reports.html
index a7dce495e900a05ea780f4790f32059473aa8ba1..a703d66488138955cef31eae723c6f79acd7757b 100644
--- a/hypha/apply/projects/templates/application_projects/includes/reports.html
+++ b/hypha/apply/projects/templates/application_projects/includes/reports.html
@@ -2,35 +2,35 @@
 
 {% user_can_update_project_reports object user as can_update_project_reports %}
 {% if can_update_project_reports %}
-<div class="wrapper wrapper--outer-space-large">
-    <div class="data-block">
-        <div class="data-block__header">
-            <p class="data-block__title">{% trans "Reporting" %}</p>
-        </div>
-        <div class="data-block__body">
-            {% user_can_update_report_config object user as can_update_report_config %}
-            {% if can_update_report_config %}
-                <div class="data-block__card">
-                    <p class="data-block__card-title">{% trans "Report frequency" %}</p>
-                    <p class="data-block__card-copy">{{ object.report_config.get_frequency_display }}</p>
-                    <p class="data-block__card-copy">
-                        <a data-fancybox data-src="#change-frequency" href="#" class="data-block__action-link">{% if object.report_config.disable_reporting %}{% trans "Enable" %}{% else %}{% trans "Change" %}{% endif %}</a>
-                    </p>
+    <div class="wrapper wrapper--outer-space-large">
+        <div class="data-block">
+            <div class="data-block__header">
+                <p class="data-block__title">{% trans "Reports" %}</p>
+            </div>
+            <div class="data-block__body">
+                {% user_can_update_report_config object user as can_update_report_config %}
+                {% if can_update_report_config %}
+                    <div class="data-block__card">
+                        <p class="data-block__card-title">{% trans "Report frequency" %}</p>
+                        <p class="data-block__card-copy">{{ object.report_config.get_frequency_display }}</p>
+                        <p class="data-block__card-copy">
+                            <a data-fancybox data-src="#change-frequency" href="#" class="data-block__action-link">{% if object.report_config.disable_reporting %}{% trans "Enable" %}{% else %}{% trans "Change" %}{% endif %}</a>
+                        </p>
                     <!-- Change report frequency modal -->
-                    {% include 'application_projects/includes/report_frequency_config.html' with form=update_frequency_form extra_classes="form--report-frequency" config=object.report_config %}
-                </div>
-            {% endif %}
-            <ul class="data-block__list">
-                {% for report in object.report_config.past_due_reports %}
-                    {% include "application_projects/includes/report_line.html" with report=report %}
-                {% endfor %}
-                {% with next_report=object.report_config.current_due_report %}
-                    {% include "application_projects/includes/report_line.html" with report=next_report current=True %}
-                {% endwith %}
-            </ul>
+                        {% include 'application_projects/includes/report_frequency_config.html' with form=update_frequency_form extra_classes="form--report-frequency" config=object.report_config %}
+                    </div>
+                {% endif %}
+                <ul class="data-block__list">
+                    {% for report in object.report_config.past_due_reports %}
+                        {% include "application_projects/includes/report_line.html" with report=report %}
+                    {% endfor %}
+                    {% with next_report=object.report_config.current_due_report %}
+                        {% include "application_projects/includes/report_line.html" with report=next_report current=True %}
+                    {% endwith %}
+                </ul>
+            </div>
         </div>
     </div>
-</div>
 {% endif %}
 
 
@@ -61,10 +61,10 @@
                                 {% if not report.skipped %}
                                     {% user_can_view_report report user as can_view_report %}
                                     {% if can_view_report %}
-                                    <a class="data-block__action-icon-link" href="{% url "apply:projects:reports:detail" pk=report.pk %}">
-                                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                                        {% trans "View" %}
-                                    </a>
+                                        <a class="data-block__action-icon-link" href="{% url "apply:projects:reports:detail" pk=report.pk %}">
+                                            <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                                            {% trans "View" %}
+                                        </a>
                                     {% endif %}
 
                                     {% user_can_update_report report user as can_update_report %}
@@ -84,7 +84,7 @@
                                 {% endif %}
                             </td>
                         </tr>
-                        {% empty %}
+                    {% empty %}
                         <tr>
                             <td colspan="3">{% trans "No reports submitted" %}</td>
                         </tr>
diff --git a/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html b/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html
index 51a0c36183121744c5831c95409d106d8df93e46..77dd5af2af77760b17902e38619aa1893d683540 100644
--- a/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html
+++ b/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html
@@ -6,295 +6,295 @@
     <div class="docs-block__header" id="project-documents-section" {% if collapsible_header %} x-on:click="collapsed = ! collapsed" role="button" aria-label="Toggle Project documents visibility" aria-controls="project-documents-elements" {% endif %}>
         <div class="docs-block__heading">{% trans "Project documents" %}
             {% if collapsible_header %}
-            <svg class="icon icon--caret-up" x-show="!collapsed" aria-hidden=true><use xlink:href="#caret-up"></use></svg>
-            <svg class="icon icon--caret-down" x-show="collapsed" aria-hidden=true><use xlink:href="#caret-down"></use></svg>
+                <svg class="icon icon--caret-up" x-show="!collapsed" aria-hidden=true><use xlink:href="#caret-up"></use></svg>
+                <svg class="icon icon--caret-down" x-show="collapsed" aria-hidden=true><use xlink:href="#caret-down"></use></svg>
             {% endif %}
         </div>
         <div>
-        {% user_can_send_for_approval object user as can_send_to_approve %}
-        {% if can_send_to_approve %}
-            <a data-fancybox
-            data-src="#send-for-approval"
-            class="button button--project-action"
-            href="#">
-                {% if object.paf_approvals.exists %}
-                    {% trans "Resubmit for approval" %}
+            {% user_can_send_for_approval object user as can_send_to_approve %}
+            {% if can_send_to_approve %}
+                <a data-fancybox
+                   data-src="#send-for-approval"
+                   class="button button--project-action"
+                   href="#">
+                    {% if object.paf_approvals.exists %}
+                        {% trans "Resubmit for approval" %}
+                    {% else %}
+                        {% trans "Submit for approval" %}
+                    {% endif %}
+                </a>
+            {% endif %}
+            {% user_can_update_paf_approvers object user request as can_update_paf_approvers %}
+            {% user_can_assign_approvers_to_project object user request as can_assign_paf_approvers %}
+            {% if can_update_paf_approvers %}
+                {% if user == project.lead %}
+                    <a data-fancybox
+                       data-src="#update-paf-approvers"
+                       class="button button--project-action button--project-action--white ml-2"
+                       href="#">
+                        {% trans "View/Update Approvers" %}
+                    </a>
                 {% else %}
-                    {% trans "Submit for approval" %}
+                    <a data-fancybox
+                       data-src="#change-assigned-paf-approvers"
+                       class="button button--project-action button--project-action--white ml-2"
+                       href="#">
+                        {% trans "Change approver" %}
+                    </a>
                 {% endif %}
-            </a>
-        {% endif %}
-        {% user_can_update_paf_approvers object user request as can_update_paf_approvers %}
-        {% user_can_assign_approvers_to_project object user request as can_assign_paf_approvers %}
-        {% if can_update_paf_approvers %}
-            {% if user == project.lead %}
-            <a data-fancybox
-            data-src="#update-paf-approvers"
-            class="button button--project-action button--project-action--white ml-2"
-            href="#">
-                {% trans "View/Update Approvers" %}
-            </a>
-            {% else %}
-            <a data-fancybox
-            data-src="#change-assigned-paf-approvers"
-            class="button button--project-action button--project-action--white ml-2"
-            href="#">
-                {% trans "Change approver" %}
-            </a>
             {% endif %}
-        {% endif %}
-        {% if can_assign_paf_approvers %}
-            <a data-fancybox
-            data-src="#assign-paf-approvers"
-            class="button button--project-action ml-2"
-            href="#">
-                {% trans "Assign approver" %}
-            </a>
-        {% endif %}
-        {% user_can_update_paf_status object user request=request as can_update_paf_status %}
-        {% if object.can_make_approval and can_update_paf_status %}
-            <a data-fancybox
-            data-src="#update-paf-status"
-            class="button button--project-action ml-2"
-            href="#">
-                {% trans "Update Status" %}
-            </a>
-        {% endif %}
+            {% if can_assign_paf_approvers %}
+                <a data-fancybox
+                   data-src="#assign-paf-approvers"
+                   class="button button--project-action ml-2"
+                   href="#">
+                    {% trans "Assign approver" %}
+                </a>
+            {% endif %}
+            {% user_can_update_paf_status object user request=request as can_update_paf_status %}
+            {% if object.can_make_approval and can_update_paf_status %}
+                <a data-fancybox
+                   data-src="#update-paf-status"
+                   class="button button--project-action ml-2"
+                   href="#">
+                    {% trans "Update Status" %}
+                </a>
+            {% endif %}
         </div>
     </div>
     <ul class="docs-block__inner" id="project-documents-elements" {% if collapsible_header %} x-show="!collapsed" role="region"
-       aria-labelledby="project-documents-section" {% endif %}>
+            aria-labelledby="project-documents-section" {% endif %}>
 
-        <li class="docs-block__row">
-            <div class="docs-block__row-inner">
-                <svg class="icon docs-block__icon is-complete"><use xlink:href="#tick"></use></svg>
-                <p class="docs-block__title">{% trans "Proposal" %}</p>
-            </div>
-            <div class="docs-block__row-inner">
-                {% if user.is_applicant %}
-                    <a class="docs-block__icon-link" href="{{ project.submission.get_absolute_url }}">
-                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                        {% trans "View" %}
-                    </a>
-                {% else %}
-                    <a class="docs-block__icon-link" href="{% url 'apply:submissions:simplified' pk=project.submission.pk %}">
-                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                        {% trans "View" %}
-                    </a>
-                {% endif %}
-            </div>
-        </li>
-        {% if settings.application_projects.ProjectSettings.vendor_setup_required and project.vendor %}
             <li class="docs-block__row">
                 <div class="docs-block__row-inner">
-                    <svg class="icon docs-block__icon{% if project.vendor.user_has_updated_details %} is-complete{% endif %}"><use xlink:href="#tick"></use></svg>
-                    <p class="docs-block__title">{% trans "Contracting Information" %}</p>
+                    <svg class="icon docs-block__icon is-complete"><use xlink:href="#tick"></use></svg>
+                    <p class="docs-block__title">{% trans "Proposal" %}</p>
                 </div>
                 <div class="docs-block__row-inner">
-                    {% if editable %}
-                        <a class="{% if not project.vendor.user_has_updated_details %}button button--project-action{% else %}docs-block__icon-link{% endif %}" href="{% url 'apply:projects:vendor' pk=project.pk %}">
-                            {% if project.vendor.user_has_updated_details %}
-                            <svg class="icon icon--project-pen"><use xlink:href="#pen"></use></svg>
-                            {% trans "Edit" %}
-                            {% else %}
-                            {% trans "Fill in" %}
-                            {% endif %}
+                    {% if user.is_applicant %}
+                        <a class="docs-block__icon-link" href="{{ project.submission.get_absolute_url }}">
+                            <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                            {% trans "View" %}
                         </a>
-                    {% endif %}
-                    {% if project.vendor.user_has_updated_details %}
-                        <a class="docs-block__icon-link" href="{% url 'apply:projects:vendor-detail' pk=project.pk vendor_pk=project.vendor.pk %}">
+                    {% else %}
+                        <a class="docs-block__icon-link" href="{% url 'apply:submissions:simplified' pk=project.submission.pk %}">
                             <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
                             {% trans "View" %}
                         </a>
                     {% endif %}
                 </div>
             </li>
-        {% endif %}
-
-        <li class="docs-block__row">
-            <div class="docs-block__row-inner">
-                <svg class="icon docs-block__icon{% if object.user_has_updated_details %} is-complete{% endif %}">
-                    <use xlink:href="#tick"></use>
-                </svg>
-                <p class="docs-block__title">{% trans "Approval Form" %}</p>
-            </div>
-            <div class="docs-block__row-inner">
-                {% if editable and not user.is_applicant %}
-                    <a class="{% if not object.user_has_updated_details %}button button--project-action{% else %}docs-block__icon-link{% endif %}" href="{% url 'apply:projects:edit' pk=object.pk %}">
-                        {% if object.user_has_updated_details %}
-                        <svg class="icon icon--project-pen"><use xlink:href="#pen"></use></svg>
-                        {% trans "Edit" %}
-                        {% else %}
-                        {% trans "Fill in" %}
+            {% if settings.application_projects.ProjectSettings.vendor_setup_required and project.vendor %}
+                <li class="docs-block__row">
+                    <div class="docs-block__row-inner">
+                        <svg class="icon docs-block__icon{% if project.vendor.user_has_updated_details %} is-complete{% endif %}"><use xlink:href="#tick"></use></svg>
+                        <p class="docs-block__title">{% trans "Contracting Information" %}</p>
+                    </div>
+                    <div class="docs-block__row-inner">
+                        {% if editable %}
+                            <a class="{% if not project.vendor.user_has_updated_details %}button button--project-action{% else %}docs-block__icon-link{% endif %}" href="{% url 'apply:projects:vendor' pk=project.pk %}">
+                                {% if project.vendor.user_has_updated_details %}
+                                    <svg class="icon icon--project-pen"><use xlink:href="#pen"></use></svg>
+                                    {% trans "Edit" %}
+                                {% else %}
+                                    {% trans "Fill in" %}
+                                {% endif %}
+                            </a>
                         {% endif %}
-                    </a>
-                {% endif %}
-                {% if object.user_has_updated_details and not user.is_applicant %}
-                    <a class="docs-block__icon-link" href="{% url 'apply:projects:approval' pk=project.pk %}">
-                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                        {% trans "View" %}
-                    </a>
-                {% endif %}
-            </div>
-            {% has_project_sow_form object as project_sow %}
-            {% if project_sow and object.user_has_updated_details and not user.is_applicant %}
-                <ul class="mt-4 w-full pl-9">
-                    <li class="docs-block__document">
-                        <div class="docs-block__document-inner">
-                            <p class="docs-block__document-info">{% trans "Scope Of Work (SOW)" %}</p>
-                        </div>
-                        <div class="docs-block__document-inner__actions">
-                            <a class="docs-block__icon-link" href="{% url 'apply:projects:sow' pk=project.pk %}">
+                        {% if project.vendor.user_has_updated_details %}
+                            <a class="docs-block__icon-link" href="{% url 'apply:projects:vendor-detail' pk=project.pk vendor_pk=project.vendor.pk %}">
                                 <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
                                 {% trans "View" %}
                             </a>
-                        </div>
-                    </li>
-                </ul>
+                        {% endif %}
+                    </div>
+                </li>
             {% endif %}
-        </li>
-
-        {% if supporting_documents_configured %}
-        <li class="docs-block__row">
-            <div class="docs-block__row-inner">
-                <svg class="icon docs-block__icon{% if not remaining_document_categories %} is-complete{% endif %}">
-                    <use xlink:href="#tick"></use>
-                </svg>
-                <p class="docs-block__title">{% trans "Supporting documents" %}</p>
-            </div>
 
-            {% if all_document_categories %}
-
-            <div class="w-full pl-9">
-                <p></p>
-                <ul>
-                    {% for document_category in all_document_categories %}
+            <li class="docs-block__row">
+                <div class="docs-block__row-inner">
+                    <svg class="icon docs-block__icon{% if object.user_has_updated_details %} is-complete{% endif %}">
+                        <use xlink:href="#tick"></use>
+                    </svg>
+                    <p class="docs-block__title">{% trans "Approval Form" %}</p>
+                </div>
+                <div class="docs-block__row-inner">
+                    {% if editable and not user.is_applicant %}
+                        <a class="{% if not object.user_has_updated_details %}button button--project-action{% else %}docs-block__icon-link{% endif %}" href="{% url 'apply:projects:edit' pk=object.pk %}">
+                            {% if object.user_has_updated_details %}
+                                <svg class="icon icon--project-pen"><use xlink:href="#pen"></use></svg>
+                                {% trans "Edit" %}
+                            {% else %}
+                                {% trans "Fill in" %}
+                            {% endif %}
+                        </a>
+                    {% endif %}
+                    {% if object.user_has_updated_details and not user.is_applicant %}
+                        <a class="docs-block__icon-link" href="{% url 'apply:projects:approval' pk=project.pk %}">
+                            <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                            {% trans "View" %}
+                        </a>
+                    {% endif %}
+                </div>
+                {% has_project_sow_form object as project_sow %}
+                {% if project_sow and object.user_has_updated_details and not user.is_applicant %}
+                    <ul class="mt-4 w-full pl-9">
                         <li class="docs-block__document">
                             <div class="docs-block__document-inner">
-                                <p class="docs-block__document-info">{{ document_category.name }}
-                                    {% if document_category.required %}<span class="text-red-700">*</span>{% endif %}
-                                    {% if document_category.template %}
-                                    <a class="pl-2 font-bold underline decoration-dashed" href="{% url 'apply:projects:category_template' pk=object.pk type='project_document' category_pk=document_category.pk %}" target="_blank">{% trans "View template" %}</a>
-                                    <svg class="icon icon--info-circle pl-0.5"><use xlink:href="#info-circle-fill"></use></svg>
-                                    {% endif %}
-                                </p>
-                                {% if document_category not in remaining_document_categories %}
-                                    {% category_latest_file project document_category as latest_file %}
-                                    <p class="docs-block__document-info"><b>{{ latest_file.title }}</b> - {{ latest_file.created_at }}</p>
-                                {% endif %}
+                                <p class="docs-block__document-info">{% trans "Scope of work (SOW)" %}</p>
+                            </div>
+                            <div class="docs-block__document-inner__actions">
+                                <a class="docs-block__icon-link" href="{% url 'apply:projects:sow' pk=project.pk %}">
+                                    <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                                    {% trans "View" %}
+                                </a>
                             </div>
-                            {% if document_category in remaining_document_categories %}
-                                <div class="docs-block__document-inner__actions">
-                                    <a data-fancybox data-src="#upload-supporting-doc" class="font-bold flex items-center mr-0" onclick="handleCategory({{ document_category.id }})" href="#">
-                                        <svg class="icon icon--arrow-up-short-bar"><use xlink:href="#arrow-up-short-bar"></use></svg>
-                                        {% trans "Upload" %}
-                                    </a>
-
-                                </div>
-                            {% else %}
-                                {% category_latest_file project document_category as latest_file %}
-                                {% if latest_file %}
-                                <div class="docs-block__row-inner">
-                                    <a class="docs-block__icon-link" href="{% url 'apply:projects:document' pk=object.pk file_pk=latest_file.pk %}" target="_blank">
-                                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
-                                        {% trans "View" %}
-                                    </a>
-                                    {% user_can_remove_supporting_documents object user as can_remove_supporting_doc %}
-                                    {% if can_remove_supporting_doc %}
-                                    <form method="POST" id="{{ remove_document_form.name }}-{{ latest_file.pk }}" class="docs-block__icon-link">
-                                        <svg class="icon icon--delete" style="margin-left:0; margin-right:2px"><use xlink:href="#delete"></use></svg>
-                                        {% csrf_token %}
-                                        {{ latest_file.get_remove_form }}
-                                        <input
-                                            class="button button--link button--remove"
-                                            id="{{ remove_document_form.name }}-submit"
-                                            name="{{ form_prefix }}{{ remove_document_form.name }}"
-                                            type="submit"
-                                            form="{{ remove_document_form.name }}-{{ latest_file.pk }}"
-                                            value="{% trans 'Remove' %}" />
-                                    </form>
-                                    {% endif %}
-                                </div>
-                                {% endif %}
-                            {% endif %}
                         </li>
-                    {% endfor %}
-                </ul>
-            </div>
-            {% endif %}
+                    </ul>
+                {% endif %}
+            </li>
 
-        </li>
-        {% endif %}
-    </ul>
+            {% if supporting_documents_configured %}
+                <li class="docs-block__row">
+                    <div class="docs-block__row-inner">
+                        <svg class="icon docs-block__icon{% if not remaining_document_categories %} is-complete{% endif %}">
+                            <use xlink:href="#tick"></use>
+                        </svg>
+                        <p class="docs-block__title">{% trans "Supporting documents" %}</p>
+                    </div>
+
+                    {% if all_document_categories %}
+
+                        <div class="w-full pl-9">
+                            <p></p>
+                            <ul>
+                                {% for document_category in all_document_categories %}
+                                    <li class="docs-block__document">
+                                        <div class="docs-block__document-inner">
+                                            <p class="docs-block__document-info">{{ document_category.name }}
+                                                {% if document_category.required %}<span class="text-red-700">*</span>{% endif %}
+                                                {% if document_category.template %}
+                                                    <a class="pl-2 font-bold underline decoration-dashed" href="{% url 'apply:projects:category_template' pk=object.pk type='project_document' category_pk=document_category.pk %}" target="_blank">{% trans "View template" %}</a>
+                                                    <svg class="icon icon--info-circle pl-0.5"><use xlink:href="#info-circle-fill"></use></svg>
+                                                {% endif %}
+                                            </p>
+                                            {% if document_category not in remaining_document_categories %}
+                                                {% category_latest_file project document_category as latest_file %}
+                                                <p class="docs-block__document-info"><b>{{ latest_file.title }}</b> - {{ latest_file.created_at }}</p>
+                                            {% endif %}
+                                        </div>
+                                        {% if document_category in remaining_document_categories %}
+                                            <div class="docs-block__document-inner__actions">
+                                                <a data-fancybox data-src="#upload-supporting-doc" class="font-bold flex items-center mr-0" onclick="handleCategory({{ document_category.id }})" href="#">
+                                                    <svg class="icon icon--arrow-up-short-bar"><use xlink:href="#arrow-up-short-bar"></use></svg>
+                                                    {% trans "Upload" %}
+                                                </a>
+
+                                            </div>
+                                        {% else %}
+                                            {% category_latest_file project document_category as latest_file %}
+                                            {% if latest_file %}
+                                                <div class="docs-block__row-inner">
+                                                    <a class="docs-block__icon-link" href="{% url 'apply:projects:document' pk=object.pk file_pk=latest_file.pk %}" target="_blank">
+                                                        <svg class="icon icon--project-eye"><use xlink:href="#eye"></use></svg>
+                                                        {% trans "View" %}
+                                                    </a>
+                                                    {% user_can_remove_supporting_documents object user as can_remove_supporting_doc %}
+                                                    {% if can_remove_supporting_doc %}
+                                                        <form method="POST" id="{{ remove_document_form.name }}-{{ latest_file.pk }}" class="docs-block__icon-link">
+                                                            <svg class="icon icon--delete" style="margin-left:0; margin-right:2px"><use xlink:href="#delete"></use></svg>
+                                                            {% csrf_token %}
+                                                            {{ latest_file.get_remove_form }}
+                                                            <input
+                                                                class="button button--link button--remove"
+                                                                id="{{ remove_document_form.name }}-submit"
+                                                                name="{{ form_prefix }}{{ remove_document_form.name }}"
+                                                                type="submit"
+                                                                form="{{ remove_document_form.name }}-{{ latest_file.pk }}"
+                                                                value="{% trans 'Remove' %}" />
+                                                        </form>
+                                                    {% endif %}
+                                                </div>
+                                            {% endif %}
+                                        {% endif %}
+                                    </li>
+                                {% endfor %}
+                            </ul>
+                        </div>
+                    {% endif %}
+
+                </li>
+            {% endif %}
+        </ul>
 </div>
 
 {% if user.is_apply_staff %}
-<div class="modal" id="upload-supporting-doc">
-    <h4 class="modal__project-header-bar">{% trans "Upload supporting documents" %}</h4>
-    <p></p>
-    {% trans "Submit" as submit %}
-    {% include 'funds/includes/delegated_form_base.html' with form=document_form value=submit %}
-</div>
+    <div class="modal" id="upload-supporting-doc">
+        <h4 class="modal__project-header-bar">{% trans "Upload supporting documents" %}</h4>
+        <p></p>
+        {% trans "Submit" as submit %}
+        {% include 'funds/includes/delegated_form_base.html' with form=document_form value=submit %}
+    </div>
 {% endif %}
 
 {% if can_send_to_approve %}
-<div class="modal" id="send-for-approval">
-    <h4 class="modal__project-header-bar">{% trans "Submit for Approval" %}</h4>
-
-    {% if remaining_document_categories %}
-        <h5>{% trans "Are you sure you're ready to submit the project documents to be approved in" %}
-            {% if project_settings.paf_approval_sequential %}{% trans "sequential order?" %}{% else %}{% trans "parallel order?" %}{% endif %}</h5>
+    <div class="modal" id="send-for-approval">
+        <h4 class="modal__project-header-bar">{% trans "Submit for Approval" %}</h4>
 
-        <p>{% trans "This project is missing the following documents" %}:</p>
+        {% if remaining_document_categories %}
+            <h5>{% trans "Are you sure you're ready to submit the project documents to be approved in" %}
+                {% if project_settings.paf_approval_sequential %}{% trans "sequential order?" %}{% else %}{% trans "parallel order?" %}{% endif %}</h5>
 
-        <ul>
-            {% for missing_category in remaining_document_categories %}
-            <li><strong>{{ missing_category.name }} </strong></li>
-            {% endfor %}
-        </ul>
-        {% trans "Submit anyway" as submit %}
-    {% else %}
-        <h5>{% trans "Are you ready to submit the project documents to be approved in" %}
-            {% if project_settings.paf_approval_sequential %}{% trans "sequential order?" %}{% else %}{% trans "parallel order?" %}{% endif %}</h5>
-        {% trans "Submit" as submit %}
-    {% endif %}
-    {% if project_settings.paf_reviewers_roles.all %}
+            <p>{% trans "This project is missing the following documents" %}:</p>
 
-        <div class="flex items-center text-sm">
-            <p class="flex-shrink text-slate-500 pr-2 mb-0">Optional</p>
-            <p class="flex-grow h-px bg-mid-grey mb-0"></p>
-        </div>
+            <ul>
+                {% for missing_category in remaining_document_categories %}
+                    <li><strong>{{ missing_category.name }} </strong></li>
+                {% endfor %}
+            </ul>
+            {% trans "Submit anyway" as submit %}
+        {% else %}
+            <h5>{% trans "Are you ready to submit the project documents to be approved in" %}
+                {% if project_settings.paf_approval_sequential %}{% trans "sequential order?" %}{% else %}{% trans "parallel order?" %}{% endif %}</h5>
+            {% trans "Submit" as submit %}
+        {% endif %}
+        {% if project_settings.paf_reviewers_roles.all %}
 
-        <p>{% trans "Please note that in "%}{% if project_settings.paf_approval_sequential %}{%trans "sequential order, approvers will approve PAF one after the other"%}{% else %}{% trans "parallel order, approvers can approve PAF anytime" %}{% endif %}</p>
+            <p>{% trans "By default all the members are notified when an approver is not selected. Optionally, you may select specific approvers to assign and notify them." %}</p>
+            <div class="flex items-center text-sm">
+                <p class="flex-shrink font-bold text-slate-500 pr-2 mb-0">Optional</p>
+                <p class="flex-grow h-px bg-mid-grey mb-0"></p>
+            </div>
 
-        {% include 'funds/includes/delegated_form_base.html' with form=request_approval_form value=submit %}
-    {% else %}
-        <p>{% trans "No PAF Reviewer Roles created yet, please create these in " %}
-        <a href="{% project_settings_url project_settings %}" target="_blank">{% trans " project settings" %}</a>
-        </p>
-    {% endif %}
-</div>
+            <p>{% trans "Please note that in "%}{% if project_settings.paf_approval_sequential %}{%trans "sequential order, approvers will approve PAF one after the other."%}{% else %}{% trans "parallel order, approvers can approve PAF anytime." %}{% endif %}</p>
+            {% include 'funds/includes/delegated_form_base.html' with form=request_approval_form value=submit %}
+        {% else %}
+            <p>{% trans "No PAF Reviewer Roles created yet, please create these in " %}
+                <a href="{% project_settings_url project_settings %}" target="_blank">{% trans " project settings" %}</a>
+            </p>
+        {% endif %}
+    </div>
 {% endif %}
 
 {% if can_update_paf_approvers %}
-<div class="modal" id="update-paf-approvers">
-    <h4 class="modal__project-header-bar">{% trans "View/Update Approvers" %}</h4>
+    <div class="modal" id="update-paf-approvers">
+        <h4 class="modal__project-header-bar">{% trans "View/Update Approvers" %}</h4>
 
-    {% trans "Submit" as submit %}
-    {% if project_settings.paf_reviewers_roles.all %}
-        <p> {% trans "Are you sure you want to update the approvers?" %} {% if project_settings.paf_approval_sequential %} {% trans "The uppermost active approver will be notified via email." %} {% else %}{% trans "All approvers will be notified via email." %}{% endif %}</p>
-    <br>
-    {% include 'funds/includes/delegated_form_base.html' with form=update_approvers_form value=submit %}
-    {% else %}
-        <p>{% trans "No PAF Reviewer Roles created yet, please create these in " %}
-        <a href="{% project_settings_url project_settings %}" target="_blank">{% trans " project settings" %}</a>
-        </p>
-    {% endif %}
-</div>
+        {% trans "Submit" as submit %}
+        {% if project_settings.paf_reviewers_roles.all %}
+            <p> {% trans "Are you sure you want to update the approvers?" %} {% if project_settings.paf_approval_sequential %} {% trans "The uppermost active approver will be notified via email." %} {% else %}{% trans "All approvers will be notified via email." %}{% endif %}</p>
+            <br>
+            {% include 'funds/includes/delegated_form_base.html' with form=update_approvers_form value=submit %}
+        {% else %}
+            <p>{% trans "No PAF Reviewer Roles created yet, please create these in " %}
+                <a href="{% project_settings_url project_settings %}" target="_blank">{% trans " project settings" %}</a>
+            </p>
+        {% endif %}
+    </div>
 
-<div class="modal" id="change-assigned-paf-approvers">
+    <div class="modal" id="change-assigned-paf-approvers">
         <h4 class="modal__project-header-bar">{% trans "Change Approver" %}</h4>
-        <p class="text-mid-grey">{% trans "Selected approver will be notified. On unselecting, every listed member here will be notified." %} </p>
+        <p>{% trans "Selected approver will be notified. On unselecting, every listed member here will be notified." %} </p>
         {% trans "Submit" as submit %}
         {% include 'funds/includes/delegated_form_base.html' with form=assign_approvers_form value=submit %}
     </div>
@@ -304,7 +304,7 @@
 {% if can_assign_paf_approvers %}
     <div class="modal" id="assign-paf-approvers">
         <h4 class="modal__project-header-bar">{% trans "Assign Approver" %}</h4>
-        <p class="text-mid-grey">{% trans "Selected approver will be notified. On unselecting, every listed member here will be notified." %} </p>
+        <p>{% trans "Selected approver will be notified. On unselecting, every listed member here will be notified." %} </p>
         {% trans "Submit" as submit %}
         {% include 'funds/includes/delegated_form_base.html' with form=assign_approvers_form value=submit %}
     </div>
diff --git a/hypha/apply/projects/templates/application_projects/invoice_admin_detail.html b/hypha/apply/projects/templates/application_projects/invoice_admin_detail.html
index bd6f6876c41c10f98bc4e9ec51a44164abcdddcc..658da1acd2ae7a42ae37f541603c8fe6a252adbb 100644
--- a/hypha/apply/projects/templates/application_projects/invoice_admin_detail.html
+++ b/hypha/apply/projects/templates/application_projects/invoice_admin_detail.html
@@ -22,22 +22,22 @@
         {% trans "Update Invoice Status" %}
     </a>
     {% if user_can_change_status %}
-    <div class="modal" id="change-status">
-        <h4 class="modal__project-header-bar">{% trans "Update Invoice status" %}</h4>
-        <p>{% trans "Current status" %}: {{ object.get_status_display }}</p>
-        {% trans "Update Status" as update %}
-        {% include 'funds/includes/delegated_form_base.html' with form=change_invoice_status value=update %}
-    </div>
+        <div class="modal" id="change-status">
+            <h4 class="modal__project-header-bar">{% trans "Update Invoice status" %}</h4>
+            <p>{% trans "Current status" %}: {{ object.status_display }}</p>
+            {% trans "Update Status" as update %}
+            {% include 'funds/includes/delegated_form_base.html' with form=change_invoice_status value=update %}
+        </div>
     {% endif %}
 {% endblock %}
 
 {% block extra_css %}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
 {% endblock %}
 
 {% block extra_js %}
-{{ block.super }}
-<script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
-<script src="{% static 'js/apply/fancybox-global.js' %}"></script>
-<script src="{% static 'js/apply/deliverables.js' %}"></script>
+    {{ block.super }}
+    <script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
+    <script src="{% static 'js/apply/fancybox-global.js' %}"></script>
+    <script src="{% static 'js/apply/deliverables.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html b/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html
index e05e78ac910dbda8d24ade39c5cb48c7cb82d9c0..12136e3e88fd2ec8e18b0f3cbd75b2d6668f855e 100644
--- a/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html
+++ b/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html
@@ -3,35 +3,36 @@
 
 {% block title %} {% trans "Invoice" %}: {{ object.project.title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__projects-link" href="{{ object.project.get_absolute_url }}">
-            {% trans "View project page" %}
-        </a>
-        <h2 class="heading heading--no-margin">{% trans "Delete Invoice" %}</h2>
-        <h5 class="heading heading--no-margin">{% trans "For" %}: {{ object.project.title }}</h5>
+    {% display_invoice_status_for_user user object as invoice_status %}
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="simplified__projects-link" href="{{ object.project.get_absolute_url }}">
+                {% trans "View project page" %}
+            </a>
+            <h2 class="heading heading--no-margin">{% trans "Delete Invoice" %}</h2>
+            <h5 class="heading heading--no-margin">{% trans "For" %}: {{ object.project.title }}</h5>
+        </div>
     </div>
-</div>
 
-<div class="wrapper wrapper--sidebar wrapper--outer-space-medium">
-    <div class="wrapper--sidebar--inner">
+    <div class="wrapper wrapper--sidebar wrapper--outer-space-medium">
+        <div class="wrapper--sidebar--inner">
 
-        <div class="card card--solid">
-            <p class="card__text"><b>{% trans "Status" %}:</b> {{ object.get_status_display }}</p>
-            {% is_vendor_setup request as show_vendor_information %}
-            {% if show_vendor_information %}
-            <p class="card__text"><b>{% trans "Vendor" %}:</b> {{ object.project.vendor.name }}</p>
-            {% endif %}
-            <p class="card__text"><b>{% trans "Invoice Number" %}:</b> {{ object.pk }}</p>
+            <div class="card card--solid">
+                <p class="card__text"><b>{% trans "Status" %}:</b> {{ invoice_status }}</p>
+                {% is_vendor_setup request as show_vendor_information %}
+                {% if show_vendor_information %}
+                    <p class="card__text"><b>{% trans "Vendor" %}:</b> {{ object.project.vendor.name }}</p>
+                {% endif %}
+                <p class="card__text"><b>{% trans "Invoice Number" %}:</b> {{ object.pk }}</p>
 
-        </div>
-        <div class="card card--solid">
-            <form method="post">{% csrf_token %}
-                <p>{% trans "Are you sure you want to delete this invoice for" %} {{ object.project.title }}?</p>
-                <button class="button button--primary" type="submit">{% trans "Confirm" %}</button>
-            </form>
+            </div>
+            <div class="card card--solid">
+                <form method="post">{% csrf_token %}
+                    <p>{% trans "Are you sure you want to delete this invoice for" %} {{ object.project.title }}?</p>
+                    <button class="button button--primary" type="submit">{% trans "Confirm" %}</button>
+                </form>
 
+            </div>
         </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/invoice_detail.html b/hypha/apply/projects/templates/application_projects/invoice_detail.html
index 22f235f9373da97ccb20ef660dc266e1ee9c0a85..01ad8ead450eb4d8a513b43a88cfcdd131283149 100644
--- a/hypha/apply/projects/templates/application_projects/invoice_detail.html
+++ b/hypha/apply/projects/templates/application_projects/invoice_detail.html
@@ -3,71 +3,95 @@
 
 {% block title %}{% trans "Invoice" %}: {{ object.project.title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__projects-link" href="{{ object.project.get_absolute_url }}">
-            {% trans "View project page" %}
-        </a>
-        <h2 class="heading heading--no-margin">{% trans "Invoice" %}</h2>
-        <h5 class="heading heading--no-margin">{% trans "For" %}: {{ object.project.title }}</h5>
+    {% display_invoice_status_for_user user object as invoice_status %}
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="simplified__projects-link" href="{{ object.project.get_absolute_url }}">
+                {% trans "View project page" %}
+            </a>
+            <h2 class="heading heading--no-margin">{% trans "Invoice" %}</h2>
+            <h5 class="heading heading--no-margin">{% trans "For" %}: {{ object.project.title }}</h5>
+        </div>
     </div>
-</div>
 
-<div class="wrapper wrapper--sidebar wrapper--outer-space-medium">
-    <div class="wrapper--sidebar--inner">
-        <div class="card card--solid">
-            <p class="card__text"><b>{% trans "Status" %}:</b> {{ object.get_status_display }}</p>
-            {% is_vendor_setup request as show_vendor_information %}
-            {% if show_vendor_information %}
-            <p class="card__text"><b>{% trans "Vendor" %}:</b> {{ object.project.vendor.name }}</p>
-            {% endif %}
-            <p class="card__text"><b>{% trans "Invoice Number" %}:</b> {{ object.vendor_document_number }}</p>
-        </div>
+    <div class="wrapper wrapper--sidebar wrapper--outer-space-medium">
+        <div class="wrapper--sidebar--inner">
+            <div class="card card--solid">
+                <p class="card__text"><b>{% trans "Invoice number" %}:</b> {{ object.invoice_number }}</p>
+                {% is_vendor_setup request as show_vendor_information %}
+                {% if show_vendor_information %}
+                    <p class="card__text"><b>{% trans "Vendor" %}:</b> {{ object.project.vendor.name }}</p>
+                {% endif %}
+                <p class="card__text"><b>{% trans "Lead" %}:</b> {{ object.project.lead }}</p>
+                <p class="card__text"><b>{% trans "Fund" %}:</b> {{ object.project.submission.page }}</p>
+            </div>
+            <div class="card card--solid flex" x-data="{ collapsed: true }">
+                <div class="flex-none">
+                    <p><b>{% trans "Status" %}: </b></p>
+                </div>
+                <div class="flex-1 pl-2">
+                    {% extract_status latest_activity user as latest_activity_status %}
+                    <p>{{ latest_activity_status }} ({{ latest_activity.user }})</p>
+                    {% for activity in activities %}
+                        {% extract_status activity user as activity_status %}
+                        <p x-show="!collapsed">{{ activity_status }} ({{ activity.user }})</p>
+                    {% endfor %}
+                </div>
+                <div class="flex-1 text-right" x-on:click="collapsed = ! collapsed" role="button">
+                    <p class="font-bold text-light-blue" x-show="collapsed">{% trans "View status history" %}
+                        <svg class="icon icon--arrow-down top-1"  aria-hidden=true><use xlink:href="#arrow-down"></use></svg></p>
+                    <p class="font-bold text-light-blue" x-show="!collapsed">{% trans "Hide status history" %}
+                        <svg class="icon icon--arrow-up top-1" aria-hidden=true><use xlink:href="#arrow-up"></use></svg></p>
 
-        <div class="card card--solid">
-            <div class="card__inner">
-                <h5 class="card__heading">{% trans "Invoice" %}</h5>
-                <p class="card__text"><a target="_blank" href="{% url "apply:projects:invoice-document" pk=object.project.pk invoice_pk=object.pk %}">{{object.filename}}</a></p>
-                <embed src="{% url "apply:projects:invoice-document" pk=object.project.pk invoice_pk=object.pk %}" width="800px" height="800px" />
+                </div>
             </div>
-            <div class="card__inner">
-                <h5 class="card__heading">{% trans "Supporting Documents" %}</h5>
-                {% for document in object.supporting_documents.all %}
-                    <p class="card__text"><a href="{% url "apply:projects:invoice-supporting-document" pk=object.project.pk invoice_pk=object.pk file_pk=document.pk %}">{{document.filename}}</a></p>
-                {% endfor %}
+
+            <div class="card card--solid">
+                <div class="card__inner">
+                    <h5 class="card__heading">{% trans "Invoice" %}</h5>
+                    <p class="card__text"><a target="_blank" href="{% url "apply:projects:invoice-document" pk=object.project.pk invoice_pk=object.pk %}">{{object.filename}}</a></p>
+                    <embed src="{% url "apply:projects:invoice-document" pk=object.project.pk invoice_pk=object.pk %}" width="800px" height="800px" />
+                </div>
+                <div class="card__inner">
+                    <h5 class="card__heading">{% trans "Supporting Documents" %}</h5>
+                    {% for document in object.supporting_documents.all %}
+                        <p class="card__text"><a href="{% url "apply:projects:invoice-supporting-document" pk=object.project.pk invoice_pk=object.pk file_pk=document.pk %}">{{document.filename}}</a></p>
+                    {% endfor %}
+                </div>
             </div>
         </div>
-    </div>
-    <aside class="sidebar">
-        {% block deliverables %}
-        {% endblock %}
-        <div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions">
-            <h5>{% trans "Actions to take" %}</h5>
-            {% block actions %}
-                {% can_edit object user as user_can_edit_request %}
-                {% if user.is_apply_staff or user.is_applicant %}
-                <a
-                    {% if not user_can_edit_request %}
-                        data-tooltip="{% trans "Only editable when 'Submitted' or you have been requested to make changes" %}"
+        <aside class="sidebar">
+            {% block deliverables %}
+            {% endblock %}
+            <div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions sticky top-8">
+                <h5>{% trans "Actions to take" %}</h5>
+                {% block actions %}
+                    {% can_edit object user as user_can_edit_request %}
+                    {% if user.is_apply_staff or user.is_applicant %}
+                        <a
+                            {% if not user_can_edit_request %}
+                                data-tooltip="{% trans "Only editable when 'Submitted' or you have been requested to make changes" %}"
+                            {% endif %}
+                            class="button button--bottom-space button--primary button--full-width{% if not user_can_edit_request %} button--tooltip-disabled{% endif %}"
+                            href={% if user_can_edit_request %}
+                                 "{% url "apply:projects:invoice-edit" pk=object.project.pk invoice_pk=object.pk %}"
+                            {% else %}
+                                 "#"
+                            {% endif %}
+                        >
+                            {% trans "Edit Invoice" %}
+                        </a>
                     {% endif %}
-                    class="button button--bottom-space button--primary button--full-width{% if not user_can_edit_request %} button--tooltip-disabled{% endif %}"
-                    href={% if user_can_edit_request %}
-                        "{% url "apply:projects:invoice-edit" pk=object.project.pk invoice_pk=object.pk %}"
-                    {% else %}
-                        "#"
+                    {% can_delete object user as user_can_delete_request %}
+                    {% if user_can_delete_request %}
+                        <a
+                            class="button button--bottom-space button--primary button--full-width"
+                            href="{% url 'apply:projects:invoice-delete' pk=object.project.pk invoice_pk=object.pk %}">
+                            {% trans "Delete Invoice" %}
+                        </a>
                     {% endif %}
-                >
-                    {% trans "Edit" %}
-                </a>
-                {% endif %}
-                {% can_delete object user as user_can_delete_request %}
-                {% if user_can_delete_request %}
-                <a
-                    class="button button--bottom-space button--primary button--full-width"
-                    href="{% url 'apply:projects:invoice-delete' pk=object.project.pk invoice_pk=object.pk %}">{% trans "Delete" %}</a>
-            {% endif %}
-            {% endblock %}
-        </div>
-    </aside>
-</div>
+                {% endblock %}
+            </div>
+        </aside>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/invoice_form.html b/hypha/apply/projects/templates/application_projects/invoice_form.html
index 9113894c375768adc1e3fd4143cb7b4feb2a2262..7f75f6141891cd48b2e4acf6660eb26ef36a695d 100644
--- a/hypha/apply/projects/templates/application_projects/invoice_form.html
+++ b/hypha/apply/projects/templates/application_projects/invoice_form.html
@@ -1,37 +1,37 @@
 {% extends "base-apply.html" %}
 {% load i18n static %}
 
-{% block title %}{% if object %}{% trans "Edit" %}{% else %}{% trans "Create" %}{% endif %} {% trans "Invoice" %}: {% if object %}{{ object.project.title }}{% else %}{{ project.title }}{% endif %}{% endblock %}
+{% block title %}{% if object %}{% trans "Edit" %}{% else %}{% trans "Add" %}{% endif %} {% trans "Invoice" %}: {% if object %}{{ object.project.title }}{% else %}{{ project.title }}{% endif %}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__projects-link" href="{{ object.project.get_absolute_url }}">
-            {% trans "View project page" %}
-        </a>
-        <h2 class="heading heading--no-margin">{% if object %}{% trans "Editing" %}{% else %}{% trans "Create" %}{% endif %} {% trans "Invoice" %}</h2>
-        <h5 class="heading heading--no-margin">{% if object %}{{ object.project.title }}{% else %}{% trans "For" %}: {{ project.title }}{% endif %}</h5>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="simplified__projects-link" href="{{ project.get_absolute_url }}">
+                {% trans "View project page" %}
+            </a>
+            <h2 class="heading heading--no-margin">{% if object %}{% trans "Editing" %}{% else %}{% trans "Add" %}{% endif %} {% trans "Invoice" %}</h2>
+            <h5 class="heading heading--no-margin">{% if object %}{{ object.project.title }}{% else %}{% trans "For" %}: {{ project.title }}{% endif %}</h5>
+        </div>
     </div>
-</div>
 
-{% include "forms/includes/form_errors.html" with form=form %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form" action="" method="post" enctype="multipart/form-data">
-            {% csrf_token %}
-            {{ form.media }}
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form" action="" method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                {{ form.media }}
 
-            {% for field in form %}
-                {% if field.field %}
-                    {% include "forms/includes/field.html" %}
-                {% else %}
-                    {{ field }}
-                {% endif %}
-            {% endfor %}
-            {% for button_name, button_type, button_value in buttons %}
-                <button class="button button--submit button--top-space button--{{ button_type }}" type="submit" name="{{ button_name }} {% if button_value == delete %}formnovalidate{% endif %}">{{ button_value }}</button>
-            {% endfor %}
-        </form>
+                {% for field in form %}
+                    {% if field.field %}
+                        {% include "forms/includes/field.html" %}
+                    {% else %}
+                        {{ field }}
+                    {% endif %}
+                {% endfor %}
+                {% for button_name, button_type, button_value in buttons %}
+                    <button class="button button--submit button--top-space button--{{ button_type }}" type="submit" name="{{ button_name }} {% if button_value == delete %}formnovalidate{% endif %}">{{ button_value }}</button>
+                {% endfor %}
+            </form>
+        </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/invoice_list.html b/hypha/apply/projects/templates/application_projects/invoice_list.html
index 9f8b746bdc620e3cd35d04153b7cb575c9d4fedf..8982e3caee3776c4e198cdc4c8c78f8307b41dbe 100644
--- a/hypha/apply/projects/templates/application_projects/invoice_list.html
+++ b/hypha/apply/projects/templates/application_projects/invoice_list.html
@@ -12,15 +12,15 @@
         {% slot sub_heading %}{% trans "View, search and filter all project invoices" %}{% endslot %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% if table %}
-    {% trans "invoices" as search_placeholder %}
-    {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True filter_action=filter_action use_batch_actions=True search_placeholder=search_placeholder %}
-    {% render_table table %}
-    {% else %}
-    <p>{% trans "No Invoices available" %}</p>
-    {% endif %}
-</div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% if table %}
+            {% trans "invoices" as search_placeholder %}
+            {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True filter_action=filter_action use_batch_actions=True search_placeholder=search_placeholder %}
+            {% render_table table %}
+        {% else %}
+            <p>{% trans "No Invoices available" %}</p>
+        {% endif %}
+    </div>
 
 {% endblock content %}
 
diff --git a/hypha/apply/projects/templates/application_projects/overview.html b/hypha/apply/projects/templates/application_projects/overview.html
index 9e55563bda2aac92f97c387439c7d5be32290865..74f5b796fcc381e0b50be434f81fbbc3c0cbd13c 100644
--- a/hypha/apply/projects/templates/application_projects/overview.html
+++ b/hypha/apply/projects/templates/application_projects/overview.html
@@ -6,8 +6,8 @@
 {% block title %}{% trans "Projects" %}{% endblock %}
 
 {% block extra_css %}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-{{ projects.filterset.form.media.css }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ projects.filterset.form.media.css }}
 {% endblock %}
 
 {% block content %}
@@ -18,54 +18,54 @@
     {% endadminbar %}
 
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
 
-    {% include "funds/includes/status-block.html" with type="Projects" %}
+        {% include "funds/includes/status-block.html" with type="Projects" %}
 
-    {% if projects.table.data %}
-    <div class="wrapper wrapper--bottom-space">
+        {% if projects.table.data %}
+            <div class="wrapper wrapper--bottom-space">
 
-        {% trans "Projects" as heading %}
-        {% include "funds/includes/table_filter_and_search.html" with filter=projects.filterset filter_action=projects.url search_term=search_term search_placeholder=heading search_action=projects.url use_search=True use_batch_actions=False heading=heading %}
+                {% trans "Projects" as heading %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=projects.filterset filter_action=projects.url search_term=search_term search_placeholder=heading search_action=projects.url use_search=True use_batch_actions=False heading=heading %}
 
-        {% render_table projects.table %}
+                {% render_table projects.table %}
 
-        <div class="all-submissions-table__more">
-            <a href="{{ projects.url }}">{% trans "Show all" %}</a>
-        </div>
+                <div class="all-submissions-table__more">
+                    <a href="{{ projects.url }}">{% trans "Show all" %}</a>
+                </div>
 
-    </div>
-    {% endif %}
-    {% if invoices.table.data %}
-    <div class="wrapper wrapper--bottom-space">
+            </div>
+        {% endif %}
+        {% if invoices.table.data %}
+            <div class="wrapper wrapper--bottom-space">
 
-        {% trans "Project Invoices" as heading %}
-        {% include "funds/includes/table_filter_and_search.html" with filter=invoices.filterset filter_action=invoices.url heading=heading %}
+                {% trans "Project Invoices" as heading %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=invoices.filterset filter_action=invoices.url heading=heading %}
 
-        {% render_table invoices.table %}
+                {% render_table invoices.table %}
 
-        <div class="all-submissions-table__more">
-            <a href="{{ invoices.url }}">{% trans "Show all" %}</a>
-        </div>
+                <div class="all-submissions-table__more">
+                    <a href="{{ invoices.url }}">{% trans "Show all" %}</a>
+                </div>
 
-    </div>
-    {% endif %}
+            </div>
+        {% endif %}
 
-    {% if reports.table.data %}
-    <div class="wrapper wrapper--bottom-space">
+        {% if reports.table.data %}
+            <div class="wrapper wrapper--bottom-space">
 
-        {% trans "Reports" as heading %}
-        {% include "funds/includes/table_filter_and_search.html" with filter=reports.filterset filter_action=reports.url heading=heading filter_classes="filters--dates" %}
+                {% trans "Reports" as heading %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=reports.filterset filter_action=reports.url heading=heading filter_classes="filters--dates" %}
 
-        {% render_table reports.table %}
+                {% render_table reports.table %}
 
-        <div class="all-submissions-table__more">
-            <a href="{{ reports.url }}">{% trans "Show all" %}</a>
-        </div>
+                <div class="all-submissions-table__more">
+                    <a href="{{ reports.url }}">{% trans "Show all" %}</a>
+                </div>
 
+            </div>
+        {% endif %}
     </div>
-    {% endif %}
-</div>
 
 {% endblock %}
 
@@ -77,7 +77,6 @@
     <script src="{% static 'js/apply/symbol-es6.min.js' %}"></script>
     <script src="{% static 'js/apply/url-search-params.js' %}"></script>
     <script src="{% static 'js/apply/submission-filters.js' %}"></script>
-    <script src="{% static 'js/apply/submission-tooltips.js' %}"></script>
     <script src="{% static 'js/apply/tabs.js' %}"></script>
     <script src="{% static 'js/apply/batch-actions.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/paf_export.html b/hypha/apply/projects/templates/application_projects/paf_export.html
index 955ab811f610caaea604c8e044a3a78da6e16ea4..56a23d796bc9f22f7b993f3ea4c9f153841613b9 100644
--- a/hypha/apply/projects/templates/application_projects/paf_export.html
+++ b/hypha/apply/projects/templates/application_projects/paf_export.html
@@ -1,160 +1,148 @@
 <html>
-<head>
-    <title>{{ title|default:"" }}</title>
+    <head>
+        <title>{{ title|default:"" }}</title>
 
-    {% block style_base %}
+        {% block style_base %}
         {% comment %}
             See DEFAULT_CSS in https://github.com/chrisglass/xhtml2pdf/blob/master/xhtml2pdf/default.py
             for base style.
         {% endcomment %}
 
-        {% block layout_style %}
-            <style type="text/css">
-                @page {
-                    size: {{ pagesize|default:"A4" }};
-                    margin-left: 2cm;
-                    margin-right: 2cm;
-                    margin-top: 1cm;
-                    margin-bottom: 2cm;
-
-                    @frame header {
-                        -pdf-frame-content: page-header;
-                        margin-top: 3cm;
-                        margin-right: 2mm;
+            {% block layout_style %}
+                <style type="text/css">
+                    @page {
+                        size: {{ pagesize|default:"A4" }};
+                        margin-left: 2cm;
+                        margin-right: 2cm;
+                        margin-top: 1cm;
                         margin-bottom: 2cm;
-                        margin-left: 1.2cm;
-                    }
 
-                    @frame footer {
-                        -pdf-frame-content: page-footer;
-                        bottom: 0cm;
-                        margin-left: 1cm;
-                        margin-right: 1cm;
-                        height: 1cm;
+                        @frame header {
+                            -pdf-frame-content: page-header;
+                            margin-top: 3cm;
+                            margin-right: 2mm;
+                            margin-bottom: 2cm;
+                            margin-left: 1.2cm;
+                        }
+
+                        @frame footer {
+                            -pdf-frame-content: page-footer;
+                            bottom: 0cm;
+                            margin-left: 1cm;
+                            margin-right: 1cm;
+                            height: 1cm;
+                        }
                     }
+                </style>
+            {%endblock%}
+            <style type="text/css">
+                .title {
+                    text-align: center;
+                    font-size: 22px;
+                    font-weight: bold;
+                }
+                p {
+                    font-size: 16px;
+                }
+                #page-width {
+                    width: 100%;
+                    font-size: 16px;
+                }
+                .align-left {
+                    display: inline-block;
+                    padding-left: 100px;
+                }
+                .align-right {
+                    display: inline-block;
+                    padding-right: 100px;
                 }
             </style>
-        {%endblock%}
-        <style type="text/css">
-            .title {
-                text-align: center;
-                font-size: 22px;
-                font-weight: bold;
-            }
-            p {
-                font-size: 16px;
-            }
-            #page-width {
-                width: 100%;
-                font-size: 16px;
-            }
-            .align-left {
-                display: inline-block;
-                padding-left: 100px;
-            }
-            .align-right {
-                display: inline-block;
-                padding-right: 100px;
-            }
-        </style>
-        {% block extra_style %}{% endblock %}
-    {% endblock %}
-</head>
-<body>
-    <div>
-        {%block page_header%}
-            <h1 class="title"> {{ org_name }}(Project Approval Form | <a href="{{ project_link }}">{{ title }}</a>)</h1>
-        {%endblock%}
+            {% block extra_style %}{% endblock %}
+        {% endblock %}
+    </head>
+    <body>
+        <div>
+            {%block page_header%}
+                <h1 class="title"> {{ org_name }}(Project Approval Form | <a href="{{ project_link }}">{{ title }}</a>)</h1>
+            {%endblock%}
 
-        {%block content%}
-        <table id="page-width">
+            {%block content%}
+                <table id="page-width">
 <!--            Project details in table format -->
-            <tr>
-                <td class="align-left">
-                    <b>Project Title</b>
-                </td>
-                <td align="right" class="align-right">
-                    <b>Project ID</b>
-                </td>
-            </tr>
-            <tr>
-                <td>
-                    {{ title }}
-                </td>
-                <td align="right" class="align-right">
-                    {{ id }}
-                </td>
-            </tr>
-            <tr></tr>
+                    <tr>
+                        <td class="align-left">
+                            <b>Project Title</b>
+                        </td>
+                        <td align="right" class="align-right">
+                            <b>Project ID</b>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>
+                            {{ title }}
+                        </td>
+                        <td align="right" class="align-right">
+                            {{ id }}
+                        </td>
+                    </tr>
+                    <tr></tr>
 
-            <tr>
-                <td class="align-left">
-                    <b>Proposed Start Date: </b> {{ proposed_start_date|default:"None" }}
-                </td>
-                <td align="right" class="align-right">
-                    <b>Proposed End Date: </b> {{ proposed_end_date|default:"None" }}
-                </td>
-            </tr>
-            <tr></tr>
-            <tr>
-                <td class="align-left">
-                    <b>Contractor: </b> {{ contractor_name|default:"None" }}
-                </td>
-                <td align="right" class="align-right">
-                    <b>Total Amount: </b> {{ total_amount|default:"None" }}
-                </td>
-            </tr>
-        </table>
+                    <tr>
+                        <td class="align-left">
+                            <b>Contractor: </b> {{ contractor_name|default:"None" }}
+                        </td>
+                    </tr>
+                </table>
 <!--            PAF fields data in paragraph format-->
-            {% for field_name, field_value in paf_data.items %}
-                <p><b>{{ field_name }}</b></p>
-                <p>{{ field_value|default:"-" }}</p>
-            {% endfor %}
+                {% for field_name, field_value in paf_data.items %}
+                    <p><b>{{ field_name }}</b></p>
+                    <p>{{ field_value|default:"-" }}</p>
+                {% endfor %}
 <!--            SOW fields data in paragraph format-->
-            {% for field_name, field_value in sow_data.items %}
-                <p><b>{{ field_name }}</b></p>
-                <p>{{ field_value|default:"-" }}</p>
-            {% endfor %}
-<!--            Approvers data in paragraph format-->
-            <p><b> Approvals </b></p>
-            {% if approvals %}
-                {% for approval in approvals %}
-                        <p><b>{{ approval.paf_reviewer_role.label }}</b>({{ approval.user.email }})</p>
-                        <p>{% if approval.approved %} "Approved" {% else %} "Not approved yet"{% endif %}</p>
+                {% for field_name, field_value in sow_data.items %}
+                    <p><b>{{ field_name }}</b></p>
+                    <p>{{ field_value|default:"-" }}</p>
                 {% endfor %}
-            {% else %}
-                <p>-</p>
-            {% endif %}
+<!--            Approvers data in paragraph format-->
+                <p><b> Approvals </b></p>
+                {% if approvals %}
+                    {% for approval in approvals %}
+                        <p>{{ approval.paf_reviewer_role.label }} - {% if approval.approved %} Approved {% else %} Pending{% endif %}
+                            {% if approval.user %}({{ approval.user }}){% endif %}</p>
+                    {% endfor %}
+                {% else %}
+                    <p>-</p>
+                {% endif %}
 <!--            Supporting Documents with links-->
                 <p> <b>Supporting Documents </b></p>
-            {% if supporting_documents %}
-                {% for document, document_link in supporting_documents.items %}
+                {% if supporting_documents %}
+                    {% for document, document_link in supporting_documents.items %}
                         <p><a href="{{ document_link }}">{{ document }}</a></p>
-                {% endfor %}
-            {% else %}
-                <p>-</p>
-            {% endif %}
+                    {% endfor %}
+                {% else %}
+                    <p>-</p>
+                {% endif %}
 <!--           Submission title with link-->
                 <p><b>Submission</b></p>
                 <p><a href="{{ submission_link }}">{{ submission }}</a></p>
 
-        {%endblock%}
-    </div>
-
-    {% if show_footer %}
-        <div id="page-footer">
-            {%block page_foot%}
-                <table>
-                    <tr>
-                        <td>Exported by {{ export_user }} on {{ export_date }}</td>
-                        <td align="right">
-                            Page: <pdf:pagenumber />
-                        </td>
-                    </tr>
-                </table>
             {%endblock%}
         </div>
-    {% endif %}
-</body>
+
+        {% if show_footer %}
+            <div id="page-footer">
+                {%block page_foot%}
+                    <table>
+                        <tr>
+                            <td>Exported by {{ export_user }} on {{ export_date }}</td>
+                            <td align="right">
+                                Page: <pdf:pagenumber />
+                            </td>
+                        </tr>
+                    </table>
+                {%endblock%}
+            </div>
+        {% endif %}
+    </body>
 
 </html>
diff --git a/hypha/apply/projects/templates/application_projects/project_admin_detail.html b/hypha/apply/projects/templates/application_projects/project_admin_detail.html
index 56eaa2d97707b6b8a376dfe00ea1353a86ee58ea..15cf645736032738b7be078e13de84192905f7f0 100644
--- a/hypha/apply/projects/templates/application_projects/project_admin_detail.html
+++ b/hypha/apply/projects/templates/application_projects/project_admin_detail.html
@@ -4,26 +4,26 @@
 
 
 {% block admin_assignments %}
-{% if object.is_in_progress %}
-<div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
+    {% if object.is_in_progress %}
+        <div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
 
-    <h5>{% trans "Actions to take" %}</h5>
+            <h5>{% trans "Actions to take" %}</h5>
 
-    {% user_can_update_project_status project user as can_update_status %}
+            {% user_can_update_project_status project user as can_update_status %}
     <!-- Move the condition below to link if add more than one link to 'More Actions'-->
-    {% if can_update_status %}
-    <details>
-        <summary class="sidebar__separator sidebar__separator--medium">{% trans "More actions" %}</summary>
+            {% if can_update_status %}
+                <details>
+                    <summary class="sidebar__separator sidebar__separator--medium">{% trans "More actions" %}</summary>
 
-        <a data-fancybox data-src="#project-status" class="button button--white button--full-width button--bottom-space" href="#">{% trans "Update Project Status" %}</a>
+                    <a data-fancybox data-src="#project-status" class="button button--white button--full-width button--bottom-space" href="#">{% trans "Update Project Status" %}</a>
 
-        <div class="modal" id="project-status">
-            <h4 class="modal__project-header-bar">{% trans "Update Project Status" %}</h4>
-            {% trans "Update" as update %}
-            {% include 'funds/includes/delegated_form_base.html' with form=change_project_status value=update %}
+                    <div class="modal" id="project-status">
+                        <h4 class="modal__project-header-bar">{% trans "Update Project Status" %}</h4>
+                        {% trans "Update" as update %}
+                        {% include 'funds/includes/delegated_form_base.html' with form=change_project_status value=update %}
+                    </div>
+                </details>
+            {% endif %}
         </div>
-    </details>
     {% endif %}
-</div>
-{% endif %}
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/project_approval_detail.html b/hypha/apply/projects/templates/application_projects/project_approval_detail.html
index 262dc758f85e18e2b38a6f2e694a31f8f3982117..1b27a780deb1094d4cf2a69c8b5b7a02ef854188 100644
--- a/hypha/apply/projects/templates/application_projects/project_approval_detail.html
+++ b/hypha/apply/projects/templates/application_projects/project_approval_detail.html
@@ -1,188 +1,141 @@
 {% extends "base-apply.html" %}
-{% load i18n static approval_tools project_tags %}
+{% load i18n static approval_tools project_tags apply_tags %}
 
 {% block title %}{{ object.title }}{% endblock %}
 
 {% block extra_css %}
-        <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-        {{ reviewer_form.media.css }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ reviewer_form.media.css }}
 {% endblock %}
 
-{% block body_class %}light-grey-bg{% endblock %}
-
 {% block content %}
-<div class="simplified">
-    <div class="simplified__admin-bar">
-        <div class="simplified__admin-bar-inner-project">
-            <div>
-                <a class="simplified__projects-link" href="{{ object.get_absolute_url }}">
-                    {% trans "View project page" %}
-                </a>
-                <h1 class="simplified__heading">{{ object.title }}</h1>
-                <h5 class="simplified__subheading">
-                    <span>{{ object.submission.page }}</span>
-                    <span>{{ object.submission.round }}</span>
-                    <span>{% trans "Lead" %}: {{ object.lead }}</span>
-                </h5>
+    {% adminbar %}
+        {% slot back_link %}
+            <a class="simplified__projects-link" href="{{ object.get_absolute_url }}" rel="noopener">
+                {% trans "Back to Project" %}
+            </a>
+        {% endslot %}
+
+        {% slot header %}
+            {{ object.title }}
+        {% endslot %}
+        {% slot sub_heading %}
+            <div class="heading heading--meta text-sm mt-1">
+                <span>{{ object.submission.page }}</span>
+                <span>{{ object.submission.round }}</span>
+                <span>{% trans "Lead" %}: {{ object.lead }}</span>
             </div>
-
-        </div>
-    </div>
-    <div class="wrapper wrapper--large wrapper--tabs">
-        <div class="wrapper wrapper--sidebar">
-            <article class="wrapper--sidebar--inner simplified__wrapper">
-                <h3>{% trans "Project Information" %}</h3>
-                <div class="card card--solid">
-                    <div class="grid grid--proposal-info">
-                        <div>
-                            <h5>{% trans "Proposed start date" %}</h5>
-                            <p>{{ object.proposed_start|date:"DATE_FORMAT"|default:"-" }}</p>
-                        </div>
-
-                        <div>
-                            <h5>{% trans "Project Proposed end date" %}</h5>
-                            <p>{{ object.proposed_end|date:"DATE_FORMAT"|default:"-" }}</p>
-                        </div>
-
-                        <div>
-                            <h5>{% trans "Legal name" %}</h5>
-                            <p>{{ object.contact_legal_name|default:"-" }}</p>
-                        </div>
-
-                        <div>
-                            <h5>{% trans "E-mail" %}</h5>
-                            <p>{{ object.contact_email|default:"-" }}</p>
-                        </div>
-
-                        <div>
-                            <h5>{% trans "Address" %}</h5>
-                            <p>{{ object.get_address_display|default:"-"}}</p>
-                        </div>
-
-                        <div>
-                            <h5>{% trans "Phone" %}</h5>
-                            <p>{{ object.phone|default:"-" }}</p>
-                        </div>
-
-                        <div>
-                            <h5>{% trans "Value" %}</h5>
-                            <p>{{ CURRENCY_SYMBOL }}{{ object.value|default:"-" }}</p>
-                        </div>
-
-                        {% if object.sent_to_compliance_at %}
-                        <div>
-                            <h5>{% trans "Sent to Compliance" %}</h5>
-                            <p>{{ object.sent_to_compliance_at|date:"DATE_FORMAT" }}</p>
-                        </div>
+        {% endslot %}
+    {% endadminbar %}
+
+    <div class="simplified">
+        <div class="wrapper wrapper--large wrapper--tabs">
+            <div class="wrapper wrapper--sidebar">
+                <article class="wrapper--sidebar--inner">
+                    <h4>{% trans "Project Information" %}</h4>
+                    <div class="card card--solid">
+
+                        {% if object.output_answers %}
+                            <div class="simplified__paf_answers">
+                                {{ object.output_answers }}
+                            </div>
                         {% endif %}
 
+                        {% has_project_sow_form object as project_sow %}
+                        {% if project_sow and object.sow.output_answers %}
+                            <div class="simplified__paf_answers">
+                                {{ object.sow.output_answers }}
+                            </div>
+                        {% endif %}
                     </div>
 
-                    {% if object.output_answers %}
-                        <div class="simplified__rich-text">
-                            {{ object.output_answers }}
-                        </div>
-                    {% endif %}
+                    <h4>{% trans "Approvals" %}</h4>
+                    <div class="card card--solid">
+                        {% for approval in project.paf_approvals.all %}
+                            {% if approval.approved %}
+                                <p><b>{{ approval.paf_reviewer_role.label }}</b> - {{ approval.user }} ({{ approval.approved_at|date:"DATE_FORMAT" }})</p>
+                            {% else %}
+                                <p><b>{{ approval.paf_reviewer_role.label }}</b> {% trans " - Pending" %}</p>
+                            {% endif %}
+                        {% endfor %}
+                    </div>
 
-                    {% has_project_sow_form object as project_sow %}
-                    {% if project_sow and object.sow.output_answers %}
-                        <div class="simplified__rich-text">
-                            {{ object.sow.output_answers }}
-                        </div>
-                    {% endif %}
-                </div>
+                    <h4>{% trans "Review" %}</h4>
+                    <div class="card card--solid">
+                        <p class="font-bold mb-0 mt-0">{% trans "Submission lead" %}</p>
+                        <p class="mt-2 mb-0">{{ project.submission.lead }}</p>
+
+                        <p class="font-bold mt-6 mb-0">{% trans "Staff reviewers" %}</p>
+                        {% for review in project.submission.reviews.by_staff %}
+                            <p class="mt-2 mb-0">
+                                {{ review.author }}
+                                {% if review.author.role %}
+                                    {% trans "as" %} {{ review.author.role }}
+                                {% endif %}
+                                - {{ review.created_at|date:"DATE_FORMAT" }}
+                            </p>
+                        {% empty %}
+                            <p class="mt-2 mb-0">{% trans "No reviews" %}</p>
+                        {% endfor %}
+                        <p class="font-bold mb-0 mt-6">{% trans "Advisory council" %}</p>
+                        {% for review in project.submission.reviews.by_reviewers %}
+                            <p class="mt-2 mb-0">
+                                {{ review.author }} - {{ review.created_at|date:"DATE_FORMAT" }}
+                            </p>
+                        {% empty %}
+                            <p class="mt-2 mb-0">{% trans "No reviews" %}</p>
+                        {% endfor %}
+                    </div>
 
-                <h3>{% trans "Approvals" %}</h3>
-                <div class="card card--solid">
-                    {% for approval in project.paf_approvals.all %}
-                        {% if approval.approved %}
-                            <p><b>{{ approval.paf_reviewer_role.label }}</b>({{ approval.user.full_name }}) - {{ approval.created_at|date:"DATE_FORMAT" }}</p>
-                            <br>
+                    <h4>{% trans "Supporting Documents" %}</h4>
+                    <div class="card card--solid">
+                        <p><a href="{% url 'apply:submissions:simplified' pk=object.submission_id %}">{% trans "Submission" %}</a></p>
+                        {% for packet_file in object.packet_files.all %}
+                            <p><a href="{% url 'apply:projects:document' pk=object.pk file_pk=packet_file.pk %}">{{ packet_file.title }}</a></p>
+                        {% endfor %}
+                    </div>
+                </article>
+                {% user_can_update_paf_status object user request=request as can_update_paf_status %}
+                {% user_can_take_actions object user as can_take_actions %}
+                {% if can_take_actions %}
+                    <aside class="sidebar sidebar__project">
+                        {% if mobile %}
+                            <a class="js-actions-toggle button button--white button--full-width button--actions">{% trans "Actions to take" %}</a>
                         {% endif %}
-                    {% endfor %}
-                </div>
 
-                <h3>{% trans "Review" %}</h3>
-                <div class="card card--solid">
-                    <h4>{% trans "Submission lead" %}</h4>
-                    <p>{{ project.submission.lead }}</p>
-
-                    <h4>{% trans "Reviews" %}</h4>
-                    <h5>{% trans "Staff Reviewers" %}</h5>
-                    {% for review in project.submission.reviews.by_staff %}
-                    <div class="card__reviewer-outcome">
-                        <span class="card__reviewer">
-                            {{ review.author }}
-                            {% if review.author.role %}
-                                {% trans "as" %} {{ review.author.role }}
+                        <div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
+                            <h5>{% trans "Actions to take" %}</h5>
+                            {% user_can_edit_project object user as can_edit_project %}
+                            {% if can_edit_project %}
+                                <a class="button button--bottom-space button--primary button--full-width {% if user_can_approve %} is-disabled {% endif %}" href="{% url 'apply:projects:edit' pk=object.pk %}">{% trans "Edit PAF" %}</a>
+                            {% endif %}
+                            <div class="dropdown">
+                                <button class="button button--project-action--paf-download dropbtn button--bottom-space button--full-width" type="button" data-dropdown-target="#dropdown-content-download">
+                                    {% trans 'Download Approval Form' %}
+                                </button>
+                                <div id="dropdown-content-download" class="dropdown-content">
+                                    <a class="dropdown-item" href="{% url 'apply:projects:download' pk=object.pk export_type='pdf' %}">
+                                        {% trans 'Download as PDF' %}</a>
+                                    <a class="dropdown-item" href="{% url 'apply:projects:download' pk=object.pk export_type='docx' %}">
+                                        {% trans 'Download as DOCX' %}</a>
+                                </div>
+                            </div>
+                            {% if can_update_paf_status %}
+                                <a data-fancybox data-src="#change-status" class="button button--primary button--full-width {% if user_can_approve %} is-disabled {% endif %}" href="#">{% trans "Update Status" %}</a>
+                                <div class="modal" id="change-status">
+                                    <h4 class="modal__project-header-bar">{% trans "Update status" %}</h4>
+                                    <p>{% trans "Project's current status" %}: {{ object.get_status_display }}</p>
+                                    {% trans "Update Status" as update %}
+                                    {% include 'funds/includes/delegated_form_base.html' with form=change_paf_status value=update %}
+                                </div>
                             {% endif %}
-                            - {{ review.created_at|date:"DATE_FORMAT" }}
-                        </span>
-                    </div>
-                    {% empty %}
-                        {% trans "No reviews" %}
-                    {% endfor %}
-                    <h5>{% trans "External Reviewers" %}</h5>
-                    {% for review in project.submission.reviews.by_reviewers %}
-                        <div class="card__reviewer-outcome">
-                            <span class="card__reviewer">
-                                {{ review.author }} - {{ review.created_at|date:"DATE_FORMAT" }}
-                            </span>
                         </div>
-                    {% empty %}
-                        {% trans "No reviews" %}
-                    {% endfor %}
-                </div>
 
-                <h3>{% trans "Supporting Documents" %}</h3>
-                <div class="card card--solid">
-                    <p><a href="{% url 'apply:submissions:simplified' pk=object.submission_id %}">{% trans "Submission" %}</a></p>
-                    {% for packet_file in object.packet_files.all %}
-                        <p><a href="{% url 'apply:projects:document' pk=object.pk file_pk=packet_file.pk %}">{{ packet_file.title }}</a></p>
-                    {% endfor %}
-                </div>
-            </article>
-            {% user_can_update_paf_status object user request=request as can_update_paf_status %}
-            {% user_can_take_actions object user as can_take_actions %}
-            {% if can_take_actions %}
-            <aside class="sidebar sidebar__project">
-                {% if mobile %}
-                    <a class="js-actions-toggle button button--white button--full-width button--actions">{% trans "Actions to take" %}</a>
+                    </aside>
                 {% endif %}
-
-                <div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
-                    <h5>{% trans "Actions to take" %}</h5>
-                    {% user_can_edit_project object user as can_edit_project %}
-                    {% if can_edit_project %}
-                        <a class="button button--bottom-space button--primary button--full-width {% if user_can_approve %} is-disabled {% endif %}" href="{% url 'apply:projects:edit' pk=object.pk %}">{% trans "Edit PAF" %}</a>
-                    {% endif %}
-                    <div class="dropdown">
-                      <button class="button button--project-action--paf-download dropbtn button--bottom-space button--full-width" type="button" data-dropdown-target="#dropdown-content-download">
-                          {% trans 'Download Approval Form' %}
-                      </button>
-                      <div id="dropdown-content-download" class="dropdown-content">
-                        <a class="dropdown-item" href="{% url 'apply:projects:download' pk=object.pk export_type='pdf' %}">
-                            {% trans 'Download as PDF' %}</a>
-                        <a class="dropdown-item" href="{% url 'apply:projects:download' pk=object.pk export_type='docx' %}">
-                            {% trans 'Download as DOCX' %}</a>
-                      </div>
-                    </div>
-                    {% if can_update_paf_status %}
-                    <a data-fancybox data-src="#change-status" class="button button--primary button--full-width {% if user_can_approve %} is-disabled {% endif %}" href="#">{% trans "Update Status" %}</a>
-                    <div class="modal" id="change-status">
-                        <h4 class="modal__project-header-bar">{% trans "Update status" %}</h4>
-                        <p>{% trans "Project's current status" %}: {{ object.get_status_display }}</p>
-                        {% trans "Update Status" as update %}
-                        {% include 'funds/includes/delegated_form_base.html' with form=change_paf_status value=update %}
-                    </div>
-                    {% endif %}
-                </div>
-
-            </aside>
-            {% endif %}
+            </div>
         </div>
     </div>
-</div>
 {% endblock content %}
 
 {% block extra_js %}
diff --git a/hypha/apply/projects/templates/application_projects/project_approval_form.html b/hypha/apply/projects/templates/application_projects/project_approval_form.html
index df1bbe80363db96ed7c873161f6d1b755041a28e..e127b9860e37a209ccddd653dc71707bbbef09dc 100644
--- a/hypha/apply/projects/templates/application_projects/project_approval_form.html
+++ b/hypha/apply/projects/templates/application_projects/project_approval_form.html
@@ -2,51 +2,32 @@
 {% load i18n static %}
 {% block title %}{% trans "Editing" %}: {{object.title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__projects-link" href="{{ object.get_absolute_url }}">
-            {% trans "View project page" %}
-        </a>
-        <h2 class="heading heading--no-margin">{% trans "Editing" %}: {{ object.title }}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="simplified__projects-link" href="{{ object.get_absolute_url }}">
+                {% trans "View project page" %}
+            </a>
+            <h2 class="heading heading--no-margin">{% trans "Editing" %}: {{ object.title }}</h2>
+        </div>
     </div>
-</div>
-
-{% if approval_form_exists %}
 
-    {% include "forms/includes/form_errors.html" with form=paf_form %}
-    {% if sow_form_exists %}
-        {% include "forms/includes/form_errors.html" with form=sow_form %}
-    {% endif %}
+    {% if approval_form_exists %}
 
-    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-        <div class="wrapper--sidebar--inner">
-            <form class="form application-form" action="" method="post" enctype="multipart/form-data">
-                {% csrf_token %}
-                {{ paf_form.media }}
-                {% if sow_form_exists %}
-                    {{ sow_form.media }}
-                {% endif %}
+        {% include "forms/includes/form_errors.html" with form=paf_form %}
+        {% if sow_form_exists %}
+            {% include "forms/includes/form_errors.html" with form=sow_form %}
+        {% endif %}
 
-                {% for field in paf_form %}
-                    {% if field.field %}
-                        {% if field.field.multi_input_field %}
-                            {% include "forms/includes/multi_input_field.html" %}
-                        {% else %}
-                            {% include "forms/includes/field.html" %}
-                        {% endif %}
-                    {% else %}
-                        {{ field.block }}
+        <div class="wrapper wrapper--light-grey-bg wrapper--sidebar pt-8 pl-20 pb-8 mt-4 mb-12 mx-auto ">
+            <div class="wrapper--sidebar--inner">
+                <form class="form application-form" action="" method="post" enctype="multipart/form-data">
+                    {% csrf_token %}
+                    {{ paf_form.media }}
+                    {% if sow_form_exists %}
+                        {{ sow_form.media }}
                     {% endif %}
-                {% endfor %}
 
-                {# Hidden fields needed e.g. for django-file-form. See `StreamBaseForm.hidden_fields` #}
-                {% for hidden_field in paf_form.hidden_fields %}
-                    {{ hidden_field }}
-                {% endfor %}
-
-                {% if sow_form_exists %}
-                    <hr>
-                    {% for field in sow_form %}
+                    {% for field in paf_form %}
                         {% if field.field %}
                             {% if field.field.multi_input_field %}
                                 {% include "forms/includes/multi_input_field.html" %}
@@ -58,39 +39,67 @@
                         {% endif %}
                     {% endfor %}
 
-
-                    {% for hidden_field in sow_form.hidden_fields %}
+                {# Hidden fields needed e.g. for django-file-form. See `StreamBaseForm.hidden_fields` #}
+                    {% for hidden_field in paf_form.hidden_fields %}
                         {{ hidden_field }}
                     {% endfor %}
-                {% endif %}
 
-                {% trans "Save draft" as save_draft %}
-                {% for button_name, button_type, button_value in buttons %}
-                    <button class="button button--submit button--top-space button--{{ button_type }}" type="submit" name="{{ button_name }}" {% if button_value == save_draft %}formnovalidate{% endif %}>{{ button_value }}</button>
-                {% endfor %}
-            </form>
+                    {% if sow_form_exists %}
+                        <hr class="mt-6 border-2 border-dotted">
+                        {% for field in sow_form %}
+                            {% if field.field %}
+                                {% if field.field.multi_input_field %}
+                                    {% include "forms/includes/multi_input_field.html" %}
+                                {% else %}
+                                    {% include "forms/includes/field.html" %}
+                                {% endif %}
+                            {% else %}
+                                {{ field.block }}
+                            {% endif %}
+                        {% endfor %}
+
+
+                        {% for hidden_field in sow_form.hidden_fields %}
+                            {{ hidden_field }}
+                        {% endfor %}
+                    {% endif %}
+
+                    {% trans "Save draft" as save_draft %}
+                    {% for button_name, button_type, button_value in buttons %}
+                        <button class="button button--submit button--top-space button--{{ button_type }}" type="submit" name="{{ button_name }}" {% if button_value == save_draft %}formnovalidate{% endif %}>{{ button_value }}</button>
+                    {% endfor %}
+                </form>
+            </div>
+            <aside class="sidebar sidebar__project">
+                <div class="js-actions-sidebar sidebar__inner sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
+                    <h5>{% trans "Proposal attachments" %}</h5>
+                    {% for file in submissions_attachments %}
+                        <p><b><a href="{{ file.url }}" target="_blank">{{ file.filename }}</a></b></p>
+                    {% endfor %}
+                </div>
+            </aside>
         </div>
-    </div>
 
-{% else %}
-    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-        <div class="wrapper--sidebar--inner">
-            <p>
-                {% trans "Approval form not configured. Please add an approval form in the" %}
-                <a href="{% url 'wagtailadmin_pages:edit' object.submission.page.id %}" target="_blank">{% trans "fund settings" %}</a>.
-            </p>
+    {% else %}
+        <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+            <div class="wrapper--sidebar--inner">
+                <p>
+                    {% trans "Approval form not configured. Please add an approval form in the" %}
+                    <a href="{% url 'wagtailadmin_pages:edit' object.submission.page.id %}" target="_blank">{% trans "fund settings" %}</a>.
+                </p>
+            </div>
         </div>
-    </div>
 
-{% endif %}
+    {% endif %}
 
 {% endblock %}
 
 {% block extra_js %}
+    <script src="{% static 'js/apply/file-uploads.js' %}"></script>
     <script src="{% static 'js/apply/tinymce-word-count.js' %}"></script>
     <script src="{% static 'js/apply/multi-input-fields.js' %}"></script>
     <script src="{% static 'js/apply/application-form-links-new-window.js' %}"></script>
     {% if not show_all_group_fields %}
-    <script src="{% static 'js/apply/form-group-toggle.js' %}"></script>
+        <script src="{% static 'js/apply/form-group-toggle.js' %}"></script>
     {% endif %}
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/project_detail.html b/hypha/apply/projects/templates/application_projects/project_detail.html
index 713671decf4d626d2043aa62a4826412ddac05c3..e566323670da04ed72d58656db0b457e3ff30ad3 100644
--- a/hypha/apply/projects/templates/application_projects/project_detail.html
+++ b/hypha/apply/projects/templates/application_projects/project_detail.html
@@ -7,56 +7,49 @@
 {% block body_class %}{% endblock %}
 
 {% block content %}
-{% show_closing_banner object as show_banner %}
-{% if show_banner %}
-<div class="banner banner__close">
-    {% blocktrans with status=object.get_status_display %} This project is in {{ status }} state. {% endblocktrans %}
-</div>
-{% endif %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h1 class="beta heading heading--no-margin heading--bold">{{ object.title }}</h1>
-        <h5 class="heading heading--meta">
-
-            <span>
-                {% if public_page %}
-                <a class="link--transparent link--underlined" href="{% pageurl public_page %}" >
-                    {{ object.submission.page }}
-                </a>
+    {% show_closing_banner object as show_banner %}
+    {% display_project_status object request.user as project_status %}
+    {% if show_banner %}
+        <div class="banner banner__close">
+            {% blocktrans with status=project_status %} This project is in {{ status }} state. {% endblocktrans %}
+        </div>
+    {% endif %}
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h1 class="mb-0">{{ object.title }}</h1>
+            <div class="heading heading--meta text-sm mt-1">
+
+                <span>{{ object.submission.page }}</span>
+
+                {% if request.user.is_apply_staff and object.submission.round %}
+                    <span>
+                        <a class="link--transparent link--underlined" href="{% url 'apply:rounds:detail' pk=object.submission.round.pk %}">{{ object.submission.round }}</a>
+                    </span>
                 {% else %}
-                {{ object.submission.page }}
+                    <span>{{ object.submission.round }}</span>
                 {% endif %}
-            </span>
 
-            {% if request.user.is_apply_staff and object.submission.round %}
-            <span>
-                <a class="link--transparent link--underlined" href="{% url 'apply:rounds:detail' pk=object.submission.round.pk %}">{{ object.submission.round }}</a>
-            </span>
-            {% else %}
-                <span>{{ object.submission.round }}</span>
-            {% endif %}
-
-            <span>
-                {% if request.user.is_apply_staff %}
-                    <a data-fancybox
-                        data-src="#assign-lead"
-                        class="link link--edit-lead is-active link--transparent"
-                        href="#">
-                        <u>{% trans "Lead" %}: {{ object.lead }}</u>
-                        <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
-                    </a>
-                    <div class="modal" id="assign-lead">
-                        <h4 class="modal__project-header-bar">{% trans "Assign Lead" %}</h4>
-                        {% trans "Update" as update %}
-                        {% include 'funds/includes/delegated_form_base.html' with form=lead_form value=update %}
-                    </div>
-                {% else %}
-                    <span>{% trans "Lead" %}: {{ object.lead }}</span>
-                {% endif %}
+                <span>
+                    {% if request.user.is_apply_staff %}
+                        <a data-fancybox
+                           data-src="#assign-lead"
+                           class="link link--edit-lead is-active link--transparent"
+                           href="#">
+                            <u>{% trans "Lead" %}: {{ object.lead }}</u>
+                            <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
+                        </a>
+                        <div class="modal" id="assign-lead">
+                            <h4 class="modal__project-header-bar">{% trans "Assign Lead" %}</h4>
+                            {% trans "Update" as update %}
+                            {% include 'funds/includes/delegated_form_base.html' with form=lead_form value=update %}
+                        </div>
+                    {% else %}
+                        <span>{% trans "Lead" %}: {{ object.lead }}</span>
+                    {% endif %}
                 </button>
             </span>
 
-        </h5>
+        </div>
 
         <div class="status-bar">
             {% for status, text in statuses %}
@@ -72,7 +65,7 @@
 
         <div class="status-bar--mobile">
             <h6 class="status-bar__subheading">
-                {{ object.get_status_display }}
+                {{ project_status }}
             </h6>
         </div>
 
@@ -103,123 +96,140 @@
             </div>
         </div>
     </div>
-</div>
-
-<div class="wrapper wrapper--large wrapper--tabs js-tabs-content">
-    <div class="tabs__content" id="tab-1">
-        {% block notifications %}
-        {% endblock %}
-        <div class="wrapper wrapper--sidebar">
-            <article class="wrapper--sidebar--inner">
-                <h3>{% trans "Project Information" %}</h3>
-                <div class="grid grid--proposal-info">
-                    <div>
-                        <h5>{% trans "Contractor" %}</h5>
-                        <p>{{ object.vendor.name |default:"-" }}</p>
-                    </div>
+    </div>
 
-                    <div>
-                        <h5>{% trans "E-mail" %}</h5>
-                        {% if object.vendor.user.email %}
-                        <a href="mailto:{{ object.vendor.user.email }}">{{ object.vendor.user.email }}</a>
-                        {% else %}
-                        -
-                        {% endif %}
+    <div class="wrapper wrapper--large wrapper--tabs js-tabs-content">
+        <div class="tabs__content" id="tab-1">
+            {% block notifications %}
+            {% endblock %}
+            <div class="wrapper wrapper--sidebar">
+                <article class="wrapper--sidebar--inner">
+                    <h3>{% trans "Project Information" %}</h3>
+                    <div class="grid grid--proposal-info">
+                        <div>
+                            <h5>{% trans "Contractor" %}</h5>
+                            <p>{{ object.vendor.name |default:"-" }}</p>
+                        </div>
+
+                        <div>
+                            <h5>{% trans "E-mail" %}</h5>
+                            {% if object.vendor.user.email %}
+                                <a href="mailto:{{ object.vendor.user.email }}">{{ object.vendor.user.email }}</a>
+                            {% else %}
+                                -
+                            {% endif %}
+                        </div>
                     </div>
-                </div>
 
-                {% user_can_view_invoices object user as can_view_invoices %}
-                {% if can_view_invoices %}
-                <div class="wrapper wrapper--outer-space-large">
-                    {% include "application_projects/includes/invoices.html" %}
-                </div>
-                {% endif %}
+                    {% user_can_view_invoices object user as can_view_invoices %}
+                    {% if can_view_invoices %}
+                        <div class="wrapper wrapper--outer-space-large">
+                            {% include "application_projects/includes/invoices.html" %}
+                        </div>
+                    {% endif %}
 
-                {% project_can_have_report object as can_have_reports %}
-                {% if can_have_reports %}
-                    <div class="wrapper wrapper--outer-space-large">
-                        {% include "application_projects/includes/reports.html" %}
-                    </div>
-                {% endif %}
+                    {% project_can_have_report object as can_have_reports %}
+                    {% if can_have_reports %}
+                        <div class="wrapper wrapper--outer-space-large">
+                            {% include "application_projects/includes/reports.html" %}
+                        </div>
+                    {% endif %}
 
-                {% project_can_have_contracting_section object as can_have_contracting_section %}
-                {% if can_have_contracting_section %}
-                    {% include "application_projects/includes/contracting_documents.html" %}
-                {% endif %}
+                    {% project_can_have_contracting_section object as can_have_contracting_section %}
+                    {% if can_have_contracting_section %}
+                        {% include "application_projects/includes/contracting_documents.html" %}
+                    {% endif %}
 
-                {% include "application_projects/includes/supporting_documents.html" %}
-            </article>
+                    {% include "application_projects/includes/supporting_documents.html" %}
+                </article>
 
-            {% block sidebar %}
+                {% block sidebar %}
 
-            <aside class="sidebar">
-                {% user_next_step_on_project object user request=request as next_step %}
-                {% if next_step %}
-                    {% if mobile %}
-                    <a class="js-actions-toggle button button--white button--full-width button--actions">{% trans "Next Step" %}</a>
-                    {% endif %}
+                    <aside class="sidebar">
+                        {% user_next_step_on_project object user request=request as next_step %}
+                        {% if next_step %}
+                            {% if mobile %}
+                                <a class="js-actions-toggle button button--white button--full-width button--actions">{% trans "Next Step" %}</a>
+                            {% endif %}
+
+                            <div class="js-actions-sidebar sidebar__inner sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
 
-                    <div class="js-actions-sidebar sidebar__inner sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
+                                <h5>{% trans "Next Step" %}</h5>
+                                <p>{{ next_step }}</p>
+                                {% user_next_step_instructions object user as instructions %}
+                                {% if instructions %}
+                                    <div class="sidebar__inner--actions--instructions">
+                                        {% for instruction in instructions %}
+                                            <p>{{forloop.counter}}. {{ instruction }}</p>
+                                        {% endfor %}
+                                    </div>
+                                {% endif %}
 
-                        <h5>{% trans "Next Step" %}</h5>
-                        <p>{{ next_step }}</p>
-                        {% user_next_step_instructions object user as instructions %}
-                        {% if instructions %}
-                            <div class="sidebar__inner--actions--instructions">
-                            {% for instruction in instructions %}
-                                <p>{{forloop.counter}}. {{ instruction }}</p>
-                            {% endfor %}
                             </div>
                         {% endif %}
+                        {% if object.paf_approvals.exists and not user.is_applicant %}
+                            {% if mobile %}
+                                <a class="js-actions-toggle button button--white button--full-width button--actions">{% trans "PAF Approvals" %}</a>
+                            {% endif %}
 
-                    </div>
-                {% endif %}
-                {% if object.paf_approvals.exists and not user.is_applicant %}
-                    {% if mobile %}
-                    <a class="js-actions-toggle button button--white button--full-width button--actions">{% trans "PAF Approvals" %}</a>
-                    {% endif %}
-
-
-                    <div class="js-actions-sidebar sidebar__inner sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
 
-                    <h5>{% trans "PAF Approvals" %}</h5>
-                        {% for paf_approval in object.paf_approvals.all %}
-                            {% if paf_approval.approved %}
-                                <p class="sidebar__paf-approvals--approved m-0">{% trans "Approved by " %}{{ paf_approval.user }} {% if paf_approval.approved_at %}(<i>{{ paf_approval.approved_at|date }}</i>){% endif %}</p>
-                            {% else %}
-                                <p class="sidebar__paf-approvals--pending m-0">{% trans "Pending approval from " %}{% if paf_approval.user %}{{ paf_approval.user }}{% else %} {{ paf_approval.paf_reviewer_role.label }}{% trans " (nobody assigned yet)" %} {% endif %}</p>
-                            {% endif %}
-                            <br>
-                        {% endfor %}
+                            <div class="js-actions-sidebar sidebar__inner sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}">
+
+                                <h5>{% trans "PAF Approvals" %}</h5>
+                                {% for paf_approval in object.paf_approvals.all %}
+
+                                    {% if not paf_approval.approved %}
+                                        {% project_rejected_by_user object paf_approval.user as rejected %}
+                                        {% if rejected %}
+                                            <div class="flex">
+                                                <div>
+                                                    <svg class="icon icon--request-changes"><use xlink:href="#request-changes"></use></svg>
+                                                </div>
+                                                <div>
+                                                    <p class="sidebar__paf-approvals--approved m-0">{% trans "Request changes or more information by " %}{{ paf_approval.user }}</p>
+                                                    {% get_comment_for_requested_approval paf_approval as rejected_comment %}
+                                                    {% if rejected_comment %}
+                                                        <a href="#communications#{{ rejected_comment.id }}" class="font-bold" target="_blank">View comment</a>
+                                                    {% endif %}
+                                                </div>
+                                            </div>
+                                        {% else %}
+                                            <p class="sidebar__paf-approvals--pending m-0">{% trans "Pending approval from " %}{% if paf_approval.user %}{{ paf_approval.user }}{% else %} {{ paf_approval.paf_reviewer_role.label }}{% trans " (nobody assigned yet)" %} {% endif %}</p>
+                                        {% endif %}
+                                    {% else %}
+                                        <p class="sidebar__paf-approvals--approved m-0">{% trans "Approved by " %}{{ paf_approval.user }} {% if paf_approval.approved_at %}(<i>{{ paf_approval.approved_at|date }}</i>){% endif %}</p>
+                                    {% endif %}
+                                    <br>
+                                {% endfor %}
 
-                </div>
-                {% endif %}
+                            </div>
+                        {% endif %}
 
-                {% if request.user.is_apply_staff %}
-                {% block admin_assignments %}{% endblock %}
-                {% endif %}
+                        {% if request.user.is_apply_staff %}
+                            {% block admin_assignments %}{% endblock %}
+                        {% endif %}
 
-            </aside>
-            {% endblock sidebar %}
+                    </aside>
+                {% endblock sidebar %}
+            </div>
         </div>
-    </div>
 
     {# Tab 2 #}
-    <div class="tabs__content" id="tab-2">
-        <div class="feed">
-            {% include "activity/include/comment_form.html" %}
-            {% include "activity/include/comment_list.html" with editable=False %}
+        <div class="tabs__content" id="tab-2">
+            <div class="feed">
+                {% include "activity/include/comment_form.html" %}
+                {% include "activity/include/comment_list.html" with editable=False %}
+            </div>
         </div>
-    </div>
 
     {# Tab 3 #}
-    <div class="tabs__content" id="tab-3">
-        <div class="feed">
+        <div class="tabs__content" id="tab-3">
+            <div class="feed">
             {% comment %} Loaded using the htmx via alpine's custom event "open-tab-3"{% endcomment %}
-            <p>Loading...</p>
+                <p>Loading...</p>
+            </div>
         </div>
     </div>
-</div>
 {% endblock content %}
 
 {% block extra_css %}
diff --git a/hypha/apply/projects/templates/application_projects/project_form.html b/hypha/apply/projects/templates/application_projects/project_form.html
index c020941b2b2f8a85bfdd3f2551f3975f5bfc9e82..24ab8c832cb58b0d0449f528ea7e758b7f611b11 100644
--- a/hypha/apply/projects/templates/application_projects/project_form.html
+++ b/hypha/apply/projects/templates/application_projects/project_form.html
@@ -5,38 +5,38 @@
 {% block title %}{% trans "Editing" %}: {{ object.title }}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Editing" %}: {{ object.title}}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h2 class="heading heading--no-margin">{% trans "Editing" %}: {{ object.title}}</h2>
+        </div>
     </div>
-</div>
 
-{% include "forms/includes/form_errors.html" with form=form %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form" method="post">
-            {% csrf_token %}
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form" method="post">
+                {% csrf_token %}
 
-            {% for field in form %}
-                {% if field.field %}
-                    {% include "forms/includes/field.html" %}
-                {% else %}
-                    {{ field }}
-                {% endif %}
-            {% endfor %}
+                {% for field in form %}
+                    {% if field.field %}
+                        {% include "forms/includes/field.html" %}
+                    {% else %}
+                        {{ field }}
+                    {% endif %}
+                {% endfor %}
 
-            <a class="button button--submit button--top-space button--white" href="{{ object.get_absolute_url }}">
-                {% trans "Cancel" %}
-            </a>
+                <a class="button button--submit button--top-space button--white" href="{{ object.get_absolute_url }}">
+                    {% trans "Cancel" %}
+                </a>
 
-            <button class="button button--submit button--top-space button--primary" type="submit">
-                {% trans "Save" %}
-            </button>
+                <button class="button button--submit button--top-space button--primary" type="submit">
+                    {% trans "Save" %}
+                </button>
 
-        </form>
+            </form>
+        </div>
     </div>
-</div>
 {% endblock %}
 
 {% block extra_css %}
diff --git a/hypha/apply/projects/templates/application_projects/project_list.html b/hypha/apply/projects/templates/application_projects/project_list.html
index 78162663bd8cfd1d05168fa4ef3db3e96db55e40..95bea43e97775586e7828997f5e5c78a744bfaa6 100644
--- a/hypha/apply/projects/templates/application_projects/project_list.html
+++ b/hypha/apply/projects/templates/application_projects/project_list.html
@@ -12,14 +12,14 @@
         {% slot sub_heading %}{% trans "View, Search and filter all projects" %}{% endslot %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% if table %}
-    {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term search_placeholder="projects" use_search=True filter_action=filter_action use_batch_actions=True filter_classes="filters-open" %}
-    {% render_table table %}
-    {% else %}
-    <p>{% trans "No Projects Available." %}</p>
-    {% endif %}
-</div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% if table %}
+            {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term search_placeholder="projects" use_search=True filter_action=filter_action use_batch_actions=True filter_classes="filters-open" %}
+            {% render_table table %}
+        {% else %}
+            <p>{% trans "No Projects Available." %}</p>
+        {% endif %}
+    </div>
 
 {% endblock content %}
 
diff --git a/hypha/apply/projects/templates/application_projects/project_sow_detail.html b/hypha/apply/projects/templates/application_projects/project_sow_detail.html
index 124cd974db9b9072ec7138c575cc8b320d16a33b..dd77ece6bab055267775066e6ebaa436a4e77687 100644
--- a/hypha/apply/projects/templates/application_projects/project_sow_detail.html
+++ b/hypha/apply/projects/templates/application_projects/project_sow_detail.html
@@ -1,64 +1,50 @@
-{% extends "base-apply.html" %}
+{% extends "application_projects/project_approval_detail.html" %}
 {% load i18n static approval_tools %}
 
 {% block title %}{{ object.title }}{% endblock %}
 
-{% block extra_css %}
-        <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-        {{ reviewer_form.media.css }}
-{% endblock %}
-
-{% block body_class %}light-grey-bg{% endblock %}
-
 {% block content %}
-<div class="simplified">
-    <div class="simplified__admin-bar">
-        <div class="simplified__admin-bar-inner-project">
-            <div>
-                <a class="simplified__projects-link" href="{{ object.get_absolute_url }}">
-                    {% trans "View project page" %}
-                </a>
-                <h1 class="simplified__heading">{{ object.title }}</h1>
-                <h5 class="simplified__subheading">
-                    <span>{{ object.submission.page }}</span>
-                    <span>{{ object.submission.round }}</span>
-                    <span>{% trans "Lead" %}: {{ object.lead }}</span>
-                </h5>
-            </div>
+    <div class="simplified">
+        <div class="simplified__admin-bar">
+            <div class="simplified__admin-bar-inner-project">
+                <div>
+                    <a class="simplified__projects-link" href="{{ object.get_absolute_url }}">
+                        {% trans "View project page" %}
+                    </a>
+                    <h1 class="simplified__heading">{{ object.title }}</h1>
+                    <h5 class="simplified__subheading">
+                        <span>{{ object.submission.page }}</span>
+                        <span>{{ object.submission.round }}</span>
+                        <span>{% trans "Lead" %}: {{ object.lead }}</span>
+                    </h5>
+                </div>
 
-            <div class="dropdown">
-              <button class="button button--primary dropbtn" type="button" data-dropdown-target="#dropdown-content-download">
-                  {% trans 'Download' %}
-              </button>
-              <div id="dropdown-content-download" class="dropdown-content">
-                <a class="dropdown-item" href="{% url 'apply:projects:download-sow' pk=object.pk export_type='pdf' %}">
-                    {% trans 'Download as PDF' %}</a>
-                <a class="dropdown-item" href="{% url 'apply:projects:download-sow' pk=object.pk export_type='docx' %}">
-                    {% trans 'Download as DOCX' %}</a>
-              </div>
+                <div class="dropdown">
+                    <button class="button button--primary dropbtn" type="button" data-dropdown-target="#dropdown-content-download">
+                        {% trans 'Download SOW' %}
+                    </button>
+                    <div id="dropdown-content-download" class="dropdown-content">
+                        <a class="dropdown-item" href="{% url 'apply:projects:download-sow' pk=object.pk export_type='pdf' %}">
+                            {% trans 'Download as PDF' %}</a>
+                        <a class="dropdown-item" href="{% url 'apply:projects:download-sow' pk=object.pk export_type='docx' %}">
+                            {% trans 'Download as DOCX' %}</a>
+                    </div>
+                </div>
             </div>
         </div>
-    </div>
-    <div class="wrapper wrapper--large wrapper--tabs">
-        <div class="wrapper wrapper--sidebar">
-            <article class="wrapper--sidebar--inner simplified__wrapper">
-                <h3>{% trans "Project scope of work(SOW)" %}</h3>
-                <div class="card card--solid">
-                    {% if object.sow.output_answers %}
-                        <div class="simplified__rich-text">
-                            {{ object.sow.output_answers }}
-                        </div>
-                    {% endif %}
-                </div>
-            </article>
+        <div class="wrapper wrapper--large wrapper--tabs">
+            <div class="wrapper wrapper--sidebar">
+                <article class="wrapper--sidebar--inner simplified__wrapper">
+                    <h4>{% trans "Project scope of work(SOW)" %}</h4>
+                    <div class="card card--solid">
+                        {% if object.sow.output_answers %}
+                            <div class="simplified__paf_answers">
+                                {{ object.sow.output_answers }}
+                            </div>
+                        {% endif %}
+                    </div>
+                </article>
+            </div>
         </div>
     </div>
-</div>
 {% endblock content %}
-
-{% block extra_js %}
-    {{ block.super }}
-    <script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
-    <script src="{% static 'js/apply/fancybox-global.js' %}"></script>
-    <script src="{% static 'js/apply/dropdown.js' %}"></script>
-{% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/report_detail.html b/hypha/apply/projects/templates/application_projects/report_detail.html
index 0866e6a8467cd5668bc7be575a77d0ac48301b60..25c9650fc74e4fce24fd2e68be94cea128cfa9e7 100644
--- a/hypha/apply/projects/templates/application_projects/report_detail.html
+++ b/hypha/apply/projects/templates/application_projects/report_detail.html
@@ -51,29 +51,29 @@
         </div>
         <aside class="sidebar">
             {% if request.user.is_apply_staff or report.previous or report.next %}
-            <div class="sidebar__inner sidebar__inner--light-blue sidebar__inner--actions">
-                {% if request.user.is_apply_staff %}
-                    <a
-                        class="button button--bottom-space button--primary button--full-width"
-                        href="{% url "apply:projects:reports:edit" pk=report.pk %}">
-                        {% trans "Edit" %}
-                    </a>
-                {% endif %}
-                {% if report.previous %}
-                    <a
-                        class="button button--bottom-space button--primary button--full-width"
-                        href="{% url "apply:projects:reports:detail" pk=report.previous.pk %}">
-                        {% trans "View previous report" %}
-                    </a>
-                {% endif %}
-                {% if report.next %}
-                    <a
-                        class="button button--bottom-space button--primary button--full-width"
-                        href="{% url "apply:projects:reports:detail" pk=report.next.pk %}">
-                        {% trans "View next report" %}
-                    </a>
-                {% endif %}
-            </div>
+                <div class="sidebar__inner sidebar__inner--light-blue sidebar__inner--actions">
+                    {% if request.user.is_apply_staff %}
+                        <a
+                            class="button button--bottom-space button--primary button--full-width"
+                            href="{% url "apply:projects:reports:edit" pk=report.pk %}">
+                            {% trans "Edit" %}
+                        </a>
+                    {% endif %}
+                    {% if report.previous %}
+                        <a
+                            class="button button--bottom-space button--primary button--full-width"
+                            href="{% url "apply:projects:reports:detail" pk=report.previous.pk %}">
+                            {% trans "View previous report" %}
+                        </a>
+                    {% endif %}
+                    {% if report.next %}
+                        <a
+                            class="button button--bottom-space button--primary button--full-width"
+                            href="{% url "apply:projects:reports:detail" pk=report.next.pk %}">
+                            {% trans "View next report" %}
+                        </a>
+                    {% endif %}
+                </div>
             {% endif %}
         </aside>
     </div>
diff --git a/hypha/apply/projects/templates/application_projects/report_form.html b/hypha/apply/projects/templates/application_projects/report_form.html
index c259e3a2a797acf2c5c2fffb293d75851458bba6..00fab9e021299b7e91d5dab62724479d6b88a4fc 100644
--- a/hypha/apply/projects/templates/application_projects/report_form.html
+++ b/hypha/apply/projects/templates/application_projects/report_form.html
@@ -2,76 +2,76 @@
 {% load i18n static %}
 
 {% block extra_css %}
-{{ block.super }}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ block.super }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
 {% endblock %}
 
 {% block title %}{% trans "Edit Report" %} | {{ object.project.title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="admin-bar__back-link" href="{{ object.project.get_absolute_url }}">
-            {% trans "View project page" %}
-        </a>
-        <h2 class="heading heading--no-margin">{{ object.project.title }}</h2>
-        <h5 class="heading heading--no-margin">{% trans "Submit a report" %}</h5>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="admin-bar__back-link" href="{{ object.project.get_absolute_url }}">
+                {% trans "View project page" %}
+            </a>
+            <h2 class="heading heading--no-margin">{{ object.project.title }}</h2>
+            <h5 class="heading heading--no-margin">{% trans "Submit a report" %}</h5>
+        </div>
     </div>
-</div>
 
-{% include "forms/includes/form_errors.html" with form=form %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form">
-    <div class="wrapper--sidebar--inner">
+    <div class="wrapper wrapper--light-grey-bg wrapper--form">
+        <div class="wrapper--sidebar--inner">
 
-        <div class="alert">
-            <svg class="alert__icon"><use xlink:href="#exclamation-point"></use></svg>
-            <p class="alert__text">{% trans "You are reporting for the period running from" %} {{ report.start_date }} {% trans "to" %} {{ report.end_date }}</p>
-        </div>
+            <div class="alert">
+                <svg class="alert__icon"><use xlink:href="#exclamation-point"></use></svg>
+                <p class="alert__text">{% trans "You are reporting for the period running from" %} {{ report.start_date }} {% trans "to" %} {{ report.end_date }}</p>
+            </div>
 
-        <form class="form" action="" method="post" enctype="multipart/form-data" novalidate>
-            {% csrf_token %}
-            {{ form.media }}
+            <form class="form" action="" method="post" enctype="multipart/form-data" novalidate>
+                {% csrf_token %}
+                {{ form.media }}
 
-            {% for field in form %}
-                {% if field.field %}
-                    {% include "forms/includes/field.html" %}
-                {% else %}
-                    {{ field }}
-                {% endif %}
-            {% endfor %}
+                {% for field in form %}
+                    {% if field.field %}
+                        {% include "forms/includes/field.html" %}
+                    {% else %}
+                        {{ field }}
+                    {% endif %}
+                {% endfor %}
 
-            <input type="submit" id="submit-report-form-submit" name="submit" class="is-hidden" />
-            <input type="submit" id="submit-report-form-save" name="save" class="is-hidden" />
-            <button data-fancybox data-src="#save-report" class="button button--submit button--top-space button--white" type="button">{% trans "Save" %}</button>
-            <button data-fancybox data-src="#submit-report" class="button button--primary" type="button">{% trans "Submit" %}</button>
+                <input type="submit" id="submit-report-form-submit" name="submit" class="is-hidden" />
+                <input type="submit" id="submit-report-form-save" name="save" class="is-hidden" />
+                <button data-fancybox data-src="#save-report" class="button button--submit button--top-space button--white" type="button">{% trans "Save" %}</button>
+                <button data-fancybox data-src="#submit-report" class="button button--primary" type="button">{% trans "Submit" %}</button>
 
             <!-- Save report modal -->
-            <div class="modal" id="save-report">
-                <h4 class="modal__project-header-bar">{% trans "Save report" %}</h4>
-                <div class="modal__copy">
-                    <p>{% trans "Saving a draft means this report will be visible to you and staff from your project page." %}</p>
-                </div>
-                <div class="modal__buttons">
-                    <button data-fancybox-close class="button button--submit button--white">{% trans "Cancel" %}</button>
-                    <label class="button button--submit button--top-space button--primary" for="submit-report-form-save" tabindex="0">{% trans "Save" %}</label>
+                <div class="modal" id="save-report">
+                    <h4 class="modal__project-header-bar">{% trans "Save report" %}</h4>
+                    <div class="modal__copy">
+                        <p>{% trans "Saving a draft means this report will be visible to you and staff from your project page." %}</p>
+                    </div>
+                    <div class="modal__buttons">
+                        <button data-fancybox-close class="button button--submit button--white">{% trans "Cancel" %}</button>
+                        <label class="button button--submit button--top-space button--primary" for="submit-report-form-save" tabindex="0">{% trans "Save" %}</label>
+                    </div>
                 </div>
-            </div>
 
             <!-- Submit report modal -->
-            <div class="modal" id="submit-report">
-                <h4 class="modal__project-header-bar">{% trans "Submit report" %}</h4>
-                <p>{% trans "Are you sure you want to submit your report?" %}</p>
-                <div class="modal__buttons">
-                    <button data-fancybox-close class="button button--submit button--white">{% trans "Cancel" %}</button>
-                    <label class="button button--submit button--top-space button--primary" for="submit-report-form-submit" tabindex="0">{% trans "Submit" %}</label>
+                <div class="modal" id="submit-report">
+                    <h4 class="modal__project-header-bar">{% trans "Submit report" %}</h4>
+                    <p>{% trans "Are you sure you want to submit your report?" %}</p>
+                    <div class="modal__buttons">
+                        <button data-fancybox-close class="button button--submit button--white">{% trans "Cancel" %}</button>
+                        <label class="button button--submit button--top-space button--primary" for="submit-report-form-submit" tabindex="0">{% trans "Submit" %}</label>
+                    </div>
                 </div>
-            </div>
-        </form>
+            </form>
+        </div>
     </div>
-</div>
 {% endblock %}
 
 {% block extra_js %}
-<script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
-<script src="{% static 'js/apply/fancybox-global.js' %}"></script>
+    <script src="{% static 'js/apply/jquery.fancybox.min.js' %}"></script>
+    <script src="{% static 'js/apply/fancybox-global.js' %}"></script>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/report_list.html b/hypha/apply/projects/templates/application_projects/report_list.html
index 29c4c583f757cf2feb6049fd3dd6df768294305d..144ccee67259885c252e87d1f1ad0763b93fcca0 100644
--- a/hypha/apply/projects/templates/application_projects/report_list.html
+++ b/hypha/apply/projects/templates/application_projects/report_list.html
@@ -12,14 +12,14 @@
         {% slot sub_heading %}{% trans "View and filter all Submitted Reports" %}{% endslot %}
     {% endadminbar %}
 
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% if table %}
-    {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form use_search=False filter_action=filter_action filter_classes="filters--dates" %}
-    {% render_table table %}
-    {% else %}
-    <p>{% trans "No Reports Available." %}</p>
-    {% endif %}
-</div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% if table %}
+            {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form use_search=False filter_action=filter_action filter_classes="filters--dates" %}
+            {% render_table table %}
+        {% else %}
+            <p>{% trans "No Reports Available." %}</p>
+        {% endif %}
+    </div>
 
 {% endblock content %}
 
diff --git a/hypha/apply/projects/templates/application_projects/sow_export.html b/hypha/apply/projects/templates/application_projects/sow_export.html
index 3e6894815969b0fc1802bb732b06d385fb798063..7bbd83579613c8c7c059abad28e5d1075a971304 100644
--- a/hypha/apply/projects/templates/application_projects/sow_export.html
+++ b/hypha/apply/projects/templates/application_projects/sow_export.html
@@ -1,94 +1,94 @@
 <html>
-<head>
-    <title>{{ title|default:"" }}</title>
+    <head>
+        <title>{{ title|default:"" }}</title>
 
-    {% block style_base %}
+        {% block style_base %}
         {% comment %}
             See DEFAULT_CSS in https://github.com/chrisglass/xhtml2pdf/blob/master/xhtml2pdf/default.py
             for base style.
         {% endcomment %}
 
-        {% block layout_style %}
-            <style type="text/css">
-                @page {
-                    size: {{ pagesize|default:"A4" }};
-                    margin-left: 2cm;
-                    margin-right: 2cm;
-                    margin-top: 1cm;
-                    margin-bottom: 2cm;
-
-                    @frame header {
-                        -pdf-frame-content: page-header;
-                        margin-top: 3cm;
-                        margin-right: 2mm;
+            {% block layout_style %}
+                <style type="text/css">
+                    @page {
+                        size: {{ pagesize|default:"A4" }};
+                        margin-left: 2cm;
+                        margin-right: 2cm;
+                        margin-top: 1cm;
                         margin-bottom: 2cm;
-                        margin-left: 1.2cm;
-                    }
 
-                    @frame footer {
-                        -pdf-frame-content: page-footer;
-                        bottom: 0cm;
-                        margin-left: 1cm;
-                        margin-right: 1cm;
-                        height: 1cm;
+                        @frame header {
+                            -pdf-frame-content: page-header;
+                            margin-top: 3cm;
+                            margin-right: 2mm;
+                            margin-bottom: 2cm;
+                            margin-left: 1.2cm;
+                        }
+
+                        @frame footer {
+                            -pdf-frame-content: page-footer;
+                            bottom: 0cm;
+                            margin-left: 1cm;
+                            margin-right: 1cm;
+                            height: 1cm;
+                        }
                     }
+                </style>
+            {%endblock%}
+            <style type="text/css">
+                .title {
+                    text-align: center;
+                    font-size: 22px;
+                    font-weight: bold;
+                }
+                p {
+                    font-size: 16px;
+                }
+                #page-width {
+                    width: 100%;
+                    font-size: 16px;
+                }
+                .align-left {
+                    display: inline-block;
+                    padding-left: 100px;
+                }
+                .align-right {
+                    display: inline-block;
+                    padding-right: 100px;
                 }
             </style>
-        {%endblock%}
-        <style type="text/css">
-            .title {
-                text-align: center;
-                font-size: 22px;
-                font-weight: bold;
-            }
-            p {
-                font-size: 16px;
-            }
-            #page-width {
-                width: 100%;
-                font-size: 16px;
-            }
-            .align-left {
-                display: inline-block;
-                padding-left: 100px;
-            }
-            .align-right {
-                display: inline-block;
-                padding-right: 100px;
-            }
-        </style>
-        {% block extra_style %}{% endblock %}
-    {% endblock %}
-</head>
-<body>
-    <div>
-        {%block page_header%}
-            <h1 class="title"> {{ org_name }}(Scope of Work | <a href="{{ project_link }}">{{ title }}</a>)</h1>
-        {%endblock%}
+            {% block extra_style %}{% endblock %}
+        {% endblock %}
+    </head>
+    <body>
+        <div>
+            {%block page_header%}
+                <h1 class="title"> {{ org_name }}(Scope of Work | <a href="{{ project_link }}">{{ title }}</a>)</h1>
+            {%endblock%}
 
-        {%block content%}
+            {%block content%}
 <!--            PAF fields data in paragraph format-->
-            {% for field_name, field_value in sow_data.items %}
-                <p><b>{{ field_name }}</b></p>
-                <p>{{ field_value|default:"-" }}</p>
-            {% endfor %}
-        {%endblock%}
-    </div>
-
-    {% if show_footer %}
-        <div id="page-footer">
-            {%block page_foot%}
-                <table>
-                    <tr>
-                        <td>Exported by {{ export_user }} on {{ export_date }}</td>
-                        <td align="right">
-                            Page: <pdf:pagenumber />
-                        </td>
-                    </tr>
-                </table>
+                {% for field_name, field_value in sow_data.items %}
+                    <p><b>{{ field_name }}</b></p>
+                    <p>{{ field_value|default:"-" }}</p>
+                {% endfor %}
             {%endblock%}
         </div>
-    {% endif %}
-</body>
+
+        {% if show_footer %}
+            <div id="page-footer">
+                {%block page_foot%}
+                    <table>
+                        <tr>
+                            <td>Exported by {{ export_user }} on {{ export_date }}</td>
+                            <td align="right">
+                                Page: <pdf:pagenumber />
+                            </td>
+                        </tr>
+                    </table>
+                {%endblock%}
+            </div>
+        {% endif %}
+    </body>
 
 </html>
diff --git a/hypha/apply/projects/templates/application_projects/vendor_detail.html b/hypha/apply/projects/templates/application_projects/vendor_detail.html
index 22bf091d814aa45d968bbe8d1bf3ed855240e350..5dedc1eacbef8af5cd077b741d20f626ac4c56fb 100644
--- a/hypha/apply/projects/templates/application_projects/vendor_detail.html
+++ b/hypha/apply/projects/templates/application_projects/vendor_detail.html
@@ -4,48 +4,48 @@
 {% block title %}{% trans "Contracting Information for" %} {{ project.title }} {% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__projects-link" href="{{ project.get_absolute_url }}">
-            {% trans "View project page" %}
-        </a>
-        <h2 class="heading heading--no-margin">{% trans "Contracting Information for" %} {{ project.title }}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="simplified__projects-link" href="{{ project.get_absolute_url }}">
+                {% trans "View project page" %}
+            </a>
+            <h2 class="heading heading--no-margin">{% trans "Contracting Information for" %} {{ project.title }}</h2>
+        </div>
     </div>
-</div>
 
-<div class="grid">
-    <div>
-        <h5 class="vendor-info">{% trans "Last Updated" %}: {{ vendor.updated_at|date:'DATE_FORMAT' }}</h5>
-    </div>
-    {% if editable %}
+    <div class="grid">
         <div>
-            <a class="link link--edit-vendor is-active" href="{% url 'apply:projects:vendor' pk=project.pk %}">
-                {% trans "Edit" %}
-            <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
-            </a>
+            <h5 class="vendor-info">{% trans "Last Updated" %}: {{ vendor.updated_at|date:'DATE_FORMAT' }}</h5>
         </div>
-    {% endif %}
-</div>
-
-<div class="rich-text rich-text--answers">
-    {% for group in vendor_detailed_response.values %}
-        {% if group.title %}
-            <h1>{{ group.title|bleach }}</h4>
+        {% if editable %}
+            <div>
+                <a class="link link--edit-vendor is-active" href="{% url 'apply:projects:vendor' pk=project.pk %}">
+                    {% trans "Edit" %}
+                    <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
+                </a>
+            </div>
         {% endif %}
-        {% for question, answer in group.questions %}
-            <h5>{{ question }}</h5>
-            {% if question == 'Due Diligence Documents' %}
-                <div class="card card--solid">
-                    <div class="card__inner">
-                        {% for document in due_diligence_documents %}
-                            <p class="card__text"><a href="{% url "apply:projects:vendor-documents" pk=project.pk vendor_pk=project.vendor.pk file_pk=document.pk %}">{{ document.document.name }}</a></p>
-                        {% endfor %}
-                    </div>
-                </div>
-            {% else %}
-                <p>{% if answer == True or answer == False %}{{ answer|yesno:"Yes,No" }}{% else %}{% if answer %}{{ answer|bleach }}{% else %}-{% endif %}{% endif %}</p>
+    </div>
+
+    <div class="rich-text rich-text--answers">
+        {% for group in vendor_detailed_response.values %}
+            {% if group.title %}
+                <h1>{{ group.title|bleach }}</h4>
             {% endif %}
+            {% for question, answer in group.questions %}
+                <h5>{{ question }}</h5>
+                {% if question == 'Due Diligence Documents' %}
+                    <div class="card card--solid">
+                        <div class="card__inner">
+                            {% for document in due_diligence_documents %}
+                                <p class="card__text"><a href="{% url "apply:projects:vendor-documents" pk=project.pk vendor_pk=project.vendor.pk file_pk=document.pk %}">{{ document.document.name }}</a></p>
+                            {% endfor %}
+                        </div>
+                    </div>
+                {% else %}
+                    <p>{% if answer == True or answer == False %}{{ answer|yesno:"Yes,No" }}{% else %}{% if answer %}{{ answer|bleach }}{% else %}-{% endif %}{% endif %}</p>
+                {% endif %}
+            {% endfor %}
         {% endfor %}
-    {% endfor %}
-</div>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/projects/templates/application_projects/vendor_form.html b/hypha/apply/projects/templates/application_projects/vendor_form.html
index e6079e0c85850cec480c84985c7d8fe2545ee9a8..b14651f71f9d07e3a613855856dc76b41d1e0460 100644
--- a/hypha/apply/projects/templates/application_projects/vendor_form.html
+++ b/hypha/apply/projects/templates/application_projects/vendor_form.html
@@ -3,31 +3,31 @@
 
 {% block title %}{% trans "Update Contracting Information" %}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Update Contracting Information" %}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h2 class="heading heading--no-margin">{% trans "Update Contracting Information" %}</h2>
+        </div>
     </div>
-</div>
 
-{% include "forms/includes/form_errors.html" with form=form %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form" id="multi-step-vendor" action="" method="post" enctype="multipart/form-data">
-            {{ wizard.management_form }}
-            {% csrf_token %}
-            {{ form.media }}
-            {% for field in form %}
-                {% if field.field %}
-                    {% include "forms/includes/field.html" %}
-                {% else %}
-                    {{ field }}
-                {% endif %}
-            {% endfor %}
-            <button class="button button--submit button--top-space button--primary" type="submit" name="save">{% if wizard.steps.step1 == 6 %}{% trans "Submit" %}{% else %}{% trans "Save and continue" %}{% endif %}</button>
-        </form>
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form" id="multi-step-vendor" action="" method="post" enctype="multipart/form-data">
+                {{ wizard.management_form }}
+                {% csrf_token %}
+                {{ form.media }}
+                {% for field in form %}
+                    {% if field.field %}
+                        {% include "forms/includes/field.html" %}
+                    {% else %}
+                        {{ field }}
+                    {% endif %}
+                {% endfor %}
+                <button class="button button--submit button--top-space button--primary" type="submit" name="save">{% if wizard.steps.step1 == 6 %}{% trans "Submit" %}{% else %}{% trans "Save and continue" %}{% endif %}</button>
+            </form>
+        </div>
     </div>
-</div>
 {% endblock %}
 
 {% block extra_css %}
diff --git a/hypha/apply/projects/templates/application_projects/vendor_success.html b/hypha/apply/projects/templates/application_projects/vendor_success.html
index 297b4a6f0d560f139427971846e5d57de1495ca2..8eccfba26cb0beb58ea863ed4fbd51e4d7ad33af 100644
--- a/hypha/apply/projects/templates/application_projects/vendor_success.html
+++ b/hypha/apply/projects/templates/application_projects/vendor_success.html
@@ -3,18 +3,18 @@
 
 {% block title %}{% trans "Contractor Setup Completed" %}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Contractor Setup Completed" %}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h2 class="heading heading--no-margin">{% trans "Contractor Setup Completed" %}</h2>
+        </div>
+    </div>
+    <div class="wrapper wrapper--small">
+        <h3>{% trans "Thank you for submitting your information." %}</h3>
+        <p>{% trans "Your {{ ORG_SHORT_NAME }} Programme Manager will be in touch with you if there are any issues." %}</p>
+        <h3>{% trans "What will happen next?" %}</h3>
+        <p>{% trans "We will use this information to create the contract for your project." %}</p>
+        <p>{% trans "Once this has happened, we will send you a message with your contract." %}</p>
+        <p>{% trans "We'll ask you to read it, and if everything is OK, you can sign it." %}</p>
+        <a href="{% url 'apply:projects:detail' pk=project.pk %}">{% trans "Visit Project Detail Page" %}</a>
     </div>
-</div>
-<div class="wrapper wrapper--small">
-    <h3>{% trans "Thank you for submitting your information." %}</h3>
-    <p>{% trans "Your {{ ORG_SHORT_NAME }} Programme Manager will be in touch with you if there are any issues." %}</p>
-    <h3>{% trans "What will happen next?" %}</h3>
-    <p>{% trans "We will use this information to create the contract for your project." %}</p>
-    <p>{% trans "Once this has happened, we will send you a message with your contract." %}</p>
-    <p>{% trans "We'll ask you to read it, and if everything is OK, you can sign it." %}</p>
-    <a href="{% url 'apply:projects:detail' pk=project.pk %}">{% trans "Visit Project Detail Page" %}</a>
-</div>
 {% endblock %}
diff --git a/hypha/apply/projects/templatetags/approval_tools.py b/hypha/apply/projects/templatetags/approval_tools.py
index 3374fd36d4570bbf2c2f132ee930c87ed942f1cb..2038404515ec0e829ed6e3e933e12bb1b98c5774 100644
--- a/hypha/apply/projects/templatetags/approval_tools.py
+++ b/hypha/apply/projects/templatetags/approval_tools.py
@@ -1,3 +1,5 @@
+from datetime import timedelta
+
 from django import template
 
 from ..permissions import has_permission
@@ -22,21 +24,39 @@ def user_can_send_for_approval(project, user):
 
 @register.simple_tag
 def user_can_update_paf_approvers(project, user, request):
-    permission, _ = has_permission('paf_approvers_update', user, object=project, raise_exception=False, request=request)
+    permission, _ = has_permission(
+        "paf_approvers_update",
+        user,
+        object=project,
+        raise_exception=False,
+        request=request,
+    )
     return permission
 
 
 @register.simple_tag
 def user_can_assign_approvers_to_project(project, user, request):
-    permission, _ = has_permission('paf_approvers_assign', user, object=project, raise_exception=False, request=request)
+    permission, _ = has_permission(
+        "paf_approvers_assign",
+        user,
+        object=project,
+        raise_exception=False,
+        request=request,
+    )
     return permission
 
 
 @register.simple_tag
 def user_can_update_paf_status(project, user, **kwargs):
-    request = kwargs.get('request')
+    request = kwargs.get("request")
     if request:
-        permission, _ = has_permission('paf_status_update', user, object=project, raise_exception=False, request=request)
+        permission, _ = has_permission(
+            "paf_status_update",
+            user,
+            object=project,
+            raise_exception=False,
+            request=request,
+        )
         return permission
     return False
 
@@ -44,3 +64,38 @@ def user_can_update_paf_status(project, user, **kwargs):
 @register.simple_tag
 def user_can_edit_project(project, user):
     return project.editable_by(user)
+
+
+@register.simple_tag
+def project_rejected_by_user(project, user):
+    """Using for paf approvals sidebar section"""
+    # todo: need to find a better way to know request change action on PAF.
+    from hypha.apply.activity.models import Activity
+
+    if not user:
+        return False
+    message = "Requested changes for acceptance"  # picked from activity.adapters.activity_feed.ActivityAdapter messages
+    return Activity.actions.filter(
+        source_content_type__model="project",
+        source_object_id=project.id,
+        user__id=user.id,
+        message__icontains=message,
+    ).exists()
+
+
+@register.simple_tag
+def get_comment_for_requested_approval(requested_approval):
+    from hypha.apply.activity.models import Activity
+
+    if requested_approval.updated_at:
+        comment = Activity.comments.filter(
+            user__id=requested_approval.user.id,
+            source_content_type__model="project",
+            source_object_id=requested_approval.project.id,
+            timestamp__range=(
+                requested_approval.updated_at - timedelta(minutes=2),
+                requested_approval.updated_at + timedelta(minutes=2),
+            ),
+        ).first()
+        return comment if comment else None
+    return None
diff --git a/hypha/apply/projects/templatetags/contract_tools.py b/hypha/apply/projects/templatetags/contract_tools.py
index d3cc8a556ca087f5f6fb2302d0884942cd3c88c7..6373b9ab89d1f99cba9fc96f1458991f576e5ba3 100644
--- a/hypha/apply/projects/templatetags/contract_tools.py
+++ b/hypha/apply/projects/templatetags/contract_tools.py
@@ -9,13 +9,15 @@ register = template.Library()
 
 @register.simple_tag
 def user_can_approve_contract(user, project):
-    can_approve, _ = has_permission('contract_approve', user, object=project, raise_exception=False)
+    can_approve, _ = has_permission(
+        "contract_approve", user, object=project, raise_exception=False
+    )
     return can_approve
 
 
 @register.simple_tag
 def is_project_contract_approved(project):
-    contract = project.contracts.order_by('-created_at').first()
+    contract = project.contracts.order_by("-created_at").first()
     if contract and contract.approver:
         return True
     return False
@@ -23,7 +25,7 @@ def is_project_contract_approved(project):
 
 @register.simple_tag
 def contract_uploaded_by_contracting(project):
-    contract = project.contracts.order_by('-created_at').first()
+    contract = project.contracts.order_by("-created_at").first()
     if contract:
         return True
     return False
@@ -31,7 +33,7 @@ def contract_uploaded_by_contracting(project):
 
 @register.simple_tag
 def contract_reuploaded_by_applicant(project):
-    contract = project.contracts.order_by('-created_at').first()
+    contract = project.contracts.order_by("-created_at").first()
     if contract and contract.signed_by_applicant:
         return True
     return False
@@ -39,13 +41,21 @@ def contract_reuploaded_by_applicant(project):
 
 @register.simple_tag
 def user_can_submit_contract(project, user, contract):
-    can_submit, _ = has_permission('submit_contract_documents', user, object=project, raise_exception=False, contract=contract)
+    can_submit, _ = has_permission(
+        "submit_contract_documents",
+        user,
+        object=project,
+        raise_exception=False,
+        contract=contract,
+    )
     return can_submit
 
 
 @register.simple_tag
 def user_can_upload_contract(project, user):
-    can_upload, _ = has_permission('contract_upload', user, object=project, raise_exception=False)
+    can_upload, _ = has_permission(
+        "contract_upload", user, object=project, raise_exception=False
+    )
     return can_upload
 
 
diff --git a/hypha/apply/projects/templatetags/invoice_tools.py b/hypha/apply/projects/templatetags/invoice_tools.py
index f860dca13b8f9aa7d0d796c3f55a293f09f99e33..49bdcbb4321379d8aa081046f18dd7c8c17dea49 100644
--- a/hypha/apply/projects/templatetags/invoice_tools.py
+++ b/hypha/apply/projects/templatetags/invoice_tools.py
@@ -2,12 +2,14 @@ import decimal
 
 from django import template
 
+from hypha.apply.activity.templatetags.activity_tags import display_for
 from hypha.apply.projects.models.project import (
     CLOSING,
     COMPLETE,
-    IN_PROGRESS,
+    INVOICING_AND_REPORTING,
     ProjectSettings,
 )
+from hypha.apply.projects.utils import get_invoice_public_status
 
 register = template.Library()
 
@@ -36,7 +38,7 @@ def percentage(value, total):
 
     # round using Decimal since we're dealing with currency
     rounded_total = unrounded_total.quantize(
-        decimal.Decimal('0.0'),
+        decimal.Decimal("0.0"),
         rounding=decimal.ROUND_DOWN,
     )
 
@@ -50,14 +52,16 @@ def can_edit_deliverables(invoice, user):
 
 @register.simple_tag
 def user_can_view_invoices(project, user):
-    if project.status in [IN_PROGRESS, CLOSING, COMPLETE]:
+    if project.status in [INVOICING_AND_REPORTING, CLOSING, COMPLETE]:
         return True
     return False
 
 
 @register.simple_tag
 def user_can_add_invoices(project, user):
-    if project.status == IN_PROGRESS and (user.is_apply_staff or user == project.user):
+    if project.status == INVOICING_AND_REPORTING and (
+        user.is_apply_staff or user == project.user
+    ):
         return True
     return False
 
@@ -71,6 +75,7 @@ def is_vendor_setup(request):
 @register.simple_tag
 def get_invoice_form(invoice, user):
     from hypha.apply.projects.views.payment import ChangeInvoiceStatusForm
+
     form = ChangeInvoiceStatusForm(instance=invoice, user=user)
     if form:
         form.name = "change_invoice_status"
@@ -80,4 +85,21 @@ def get_invoice_form(invoice, user):
 
 @register.simple_tag
 def get_invoice_form_id(form, invoice):
-    return f'{form.name}-{invoice.id}'
+    return f"{form.name}-{invoice.id}"
+
+
+@register.simple_tag
+def extract_status(activity, user):
+    if activity and user:
+        invoice_activity_message = display_for(activity, user)
+        return invoice_activity_message.replace(
+            "Updated Invoice status to: ", ""
+        ).replace(".", "")
+    return ""
+
+
+@register.simple_tag
+def display_invoice_status_for_user(user, invoice):
+    if user.is_apply_staff or user.is_contracting or user.is_finance:
+        return invoice.status_display
+    return get_invoice_public_status(invoice_status=invoice.status)
diff --git a/hypha/apply/projects/templatetags/project_tags.py b/hypha/apply/projects/templatetags/project_tags.py
index 6084e37ebccd960bfc49592fdf6a4656f1a95b29..e68e10b293e4bfc529fc799e308782cb20e4f170 100644
--- a/hypha/apply/projects/templatetags/project_tags.py
+++ b/hypha/apply/projects/templatetags/project_tags.py
@@ -1,23 +1,26 @@
 from django import template
+from django.conf import settings
 from django.db.models import Count
 from django.urls import reverse
+from django.utils.translation import gettext_lazy as _
 
 from hypha.apply.projects.models.project import (
     CLOSING,
     COMPLETE,
     CONTRACTING,
     DRAFT,
-    IN_PROGRESS,
-    WAITING_FOR_APPROVAL,
+    INTERNAL_APPROVAL,
+    INVOICING_AND_REPORTING,
 )
 from hypha.apply.projects.permissions import has_permission
+from hypha.apply.projects.utils import get_project_public_status
 
 register = template.Library()
 
 
 @register.simple_tag
 def project_can_have_report(project):
-    if project.status in [COMPLETE, CLOSING, IN_PROGRESS]:
+    if project.status in [COMPLETE, CLOSING, INVOICING_AND_REPORTING]:
         return True
     return False
 
@@ -25,65 +28,101 @@ def project_can_have_report(project):
 @register.simple_tag
 def user_next_step_on_project(project, user, request=None):
     from hypha.apply.projects.models.project import PAFReviewersRole, ProjectSettings
+
     if project.status == DRAFT:
         if user.is_apply_staff:
             if not project.user_has_updated_details:
-                return "Fill in the Approval Form(PAF)"
+                return _("Fill in the Approval Form(PAF)")
             if project.paf_approvals.exists():
-                return "Resubmit project documents for approval"
-            return "Submit project documents for approval"
+                return _("Resubmit project documents for approval")
+            return _("Submit project documents for approval")
+        elif user.is_applicant:
+            return _(
+                "Awaiting project documents to be created and approved by {org_short_name} internally. "
+                "Please check back when the project has moved to contracting stage."
+            ).format(org_short_name=settings.ORG_SHORT_NAME)
         if project.paf_approvals.exists():
-            return "Changes requested. Awaiting documents to be resubmitted."
-        return "Awaiting approval form to be created."
-    elif project.status == WAITING_FOR_APPROVAL:
+            return _("Changes requested. Awaiting documents to be resubmitted.")
+        return _("Awaiting approval form to be created.")
+    elif project.status == INTERNAL_APPROVAL:
         if user.is_applicant:
-            return "Awaiting approval form to be approved."
+            return _(
+                "Awaiting project documents to be created and approved by {org_short_name} internally. "
+                "Please check back when the project has moved to contracting stage."
+            ).format(org_short_name=settings.ORG_SHORT_NAME)
 
         if request:
             project_settings = ProjectSettings.for_request(request=request)
             if project_settings.paf_approval_sequential:
-                latest_unapproved_approval = project.paf_approvals.filter(approved=False).first()
+                latest_unapproved_approval = project.paf_approvals.filter(
+                    approved=False
+                ).first()
                 if latest_unapproved_approval:
                     if latest_unapproved_approval.user:
-                        return f"Awaiting approval. Assigned to {latest_unapproved_approval.user}"
-                    return f"Awaiting {latest_unapproved_approval.paf_reviewer_role.label} to assign an approver"
+                        return _("Awaiting approval. Assigned to {approver}").format(
+                            approver=latest_unapproved_approval.user
+                        )
+                    return _("Awaiting {reviewer_role} to assign an approver").format(
+                        reviewer_role=latest_unapproved_approval.paf_reviewer_role.label
+                    )
             else:
-                matched_roles = PAFReviewersRole.objects.annotate(roles_count=Count('user_roles')).filter(
-                    roles_count=len(user.groups.all()))
+                matched_roles = PAFReviewersRole.objects.annotate(
+                    roles_count=Count("user_roles")
+                ).filter(roles_count=len(user.groups.all()))
                 for group in user.groups.all():
                     matched_roles = matched_roles.filter(user_roles__id=group.id)
                 if not matched_roles:
-                    return "Awaiting PAF approval form to be approved"
+                    return _("Awaiting PAF approval form to be approved")
                 else:
-                    matched_unapproved_approval = project.paf_approvals.filter(approved=False, paf_reviewer_role__in=matched_roles)
+                    matched_unapproved_approval = project.paf_approvals.filter(
+                        approved=False, paf_reviewer_role__in=matched_roles
+                    )
                     if not matched_unapproved_approval.exists():
-                        return "Awaiting approval from other approvers teams"
+                        return _("Awaiting approval from other approvers teams")
                     else:
                         if matched_unapproved_approval.first().user:
-                            return f"Awaiting approval. Assigned to {matched_unapproved_approval.first().user}"
-                        return f"Awaiting {matched_unapproved_approval.first().paf_reviewer_role.label} to assign an approver"
-
-        return "Awaiting project approval from assigned approvers"
+                            return _(
+                                "Awaiting approval. Assigned to {approver}"
+                            ).format(approver=matched_unapproved_approval.first().user)
+                        return _(
+                            "Awaiting {reviewer_role} to assign an approver"
+                        ).format(
+                            reviewer_role=matched_unapproved_approval.first().paf_reviewer_role.label
+                        )
+
+        return _("Awaiting project approval from assigned approvers")
     elif project.status == CONTRACTING:
         if not project.contracts.exists():
-            return "Awaiting signed contract from Contracting team"
+            if user.is_applicant:
+                return _("Awaiting signed contract from {org_short_name}").format(
+                    org_short_name=settings.ORG_SHORT_NAME
+                )
+            return _("Awaiting signed contract from Contracting team")
         else:
-            contract = project.contracts.order_by('-created_at').first()
+            contract = project.contracts.order_by("-created_at").first()
             if not contract.signed_by_applicant:
                 if user.is_applicant:
-                    return "Awaiting contract documents to be submitted by applicant."
-                return "Awaiting countersigned contract from Applicant"
+                    return _("Awaiting contract documents to be submitted by you.")
+                return _("Awaiting countersigned contract from Vendor")
             elif not project.submitted_contract_documents:
-                return "Awaiting contract documents submission from Applicant"
+                if user.is_applicant:
+                    return _("Awaiting contract documents submission by you")
+                return _("Awaiting contract documents submission from Vendor")
             else:
                 if user.is_apply_staff:
-                    return "Review the contract for all relevant details and approve."
-                return "Awaiting contract approval from Staff"
-    elif project.status == IN_PROGRESS:
-        if user.is_applicant:
-            return "Add invoices"
+                    return _(
+                        "Review the contract for all relevant details and approve."
+                    )
+                if user.is_applicant:
+                    return _("Awaiting contract approval from {org_short_name}").format(
+                        org_short_name=settings.ORG_SHORT_NAME
+                    )
+                return _("Awaiting contract approval from Staff")
+    elif project.status == INVOICING_AND_REPORTING:
+        if user.is_applicant and not project.invoices.exists():
+            return _("Add invoices")
         elif user.is_apply_staff or user.is_finance:
-            return "Review invoice and take action"
+            return _("Review invoice and take action")
     return False
 
 
@@ -92,50 +131,68 @@ def user_next_step_instructions(project, user):
     """
     To provide instructions incase next step is not enough like 'contracting documents submitted by an applicant'
     """
-    if project.status == CONTRACTING and user == project.user and project.contracts.exists():
-        contract = project.contracts.order_by('-created_at').first()
+    if (
+        project.status == CONTRACTING
+        and user == project.user
+        and project.contracts.exists()
+    ):
+        contract = project.contracts.order_by("-created_at").first()
         if contract and not contract.signed_by_applicant:
-            return ['Please download the signed contract uploaded by contracting team',
-                    'Countersign',
-                    'Upload it back',
-                    'Please also make sure to upload other required contracting documents']
+            return [
+                _(
+                    "Please download the signed contract uploaded by {org_short_name}"
+                ).format(org_short_name=settings.ORG_SHORT_NAME),
+                _("Countersign"),
+                _("Upload it back"),
+                _(
+                    "Please also make sure to upload other required contracting documents"
+                ),
+            ]
     return False
 
 
 @register.simple_tag
 def user_can_update_project_reports(project, user):
-    permission, _ = has_permission('project_reports_update', user, object=project, raise_exception=False)
+    permission, _ = has_permission(
+        "project_reports_update", user, object=project, raise_exception=False
+    )
     return permission
 
 
 @register.simple_tag
 def user_can_update_report_config(project, user):
-    permission, _ = has_permission('report_config_update', user, object=project, raise_exception=False)
+    permission, _ = has_permission(
+        "report_config_update", user, object=project, raise_exception=False
+    )
     return permission
 
 
 @register.simple_tag
 def user_can_update_report(report, user):
-    permission, _ = has_permission('report_update', user, object=report, raise_exception=False)
+    permission, _ = has_permission(
+        "report_update", user, object=report, raise_exception=False
+    )
     return permission
 
 
 @register.simple_tag
 def user_can_view_report(report, user):
-    permission, _ = has_permission('report_view', user, object=report, raise_exception=False)
+    permission, _ = has_permission(
+        "report_view", user, object=report, raise_exception=False
+    )
     return permission
 
 
 @register.simple_tag
 def project_can_have_contracting_section(project):
-    if project.status in [DRAFT, WAITING_FOR_APPROVAL]:
+    if project.status in [DRAFT, INTERNAL_APPROVAL]:
         return False
     return True
 
 
 @register.simple_tag
 def can_access_supporting_documents_section(project):
-    if project.status not in [IN_PROGRESS, CLOSING, COMPLETE]:
+    if project.status not in [INVOICING_AND_REPORTING, CLOSING, COMPLETE]:
         return True
     return False
 
@@ -149,7 +206,9 @@ def show_closing_banner(project):
 
 @register.simple_tag
 def user_can_update_project_status(project, user):
-    can_update_status, _ = has_permission('project_status_update', user, object=project, raise_exception=False)
+    can_update_status, _ = has_permission(
+        "project_status_update", user, object=project, raise_exception=False
+    )
     return can_update_status
 
 
@@ -167,9 +226,16 @@ def project_settings_url(instance):
 
 @register.simple_tag
 def allow_collapsible_header(project, header_type):
-    if header_type == 'project_documents' and project.status not in [DRAFT, WAITING_FOR_APPROVAL]:
+    if header_type == "project_documents" and project.status not in [
+        DRAFT,
+        INTERNAL_APPROVAL,
+    ]:
         return True
-    if header_type == 'contracting_documents' and project.status not in [DRAFT, WAITING_FOR_APPROVAL, CONTRACTING]:
+    if header_type == "contracting_documents" and project.status not in [
+        DRAFT,
+        INTERNAL_APPROVAL,
+        CONTRACTING,
+    ]:
         return True
     return False
 
@@ -188,7 +254,7 @@ def user_can_take_actions(project, user):
     """
     if user.is_apply_staff or user.is_contracting:
         return True
-    if user.id in project.paf_approvals.values_list('user', flat=True):
+    if user.id in project.paf_approvals.values_list("user", flat=True):
         return True
     return False
 
@@ -201,3 +267,10 @@ def category_latest_file(project, category):
 @register.simple_tag
 def contract_category_latest_file(project, category):
     return category.contract_packet_files.filter(project=project).first()
+
+
+@register.simple_tag
+def display_project_status(project, user):
+    if user.is_apply_staff or user.is_contracting or user.is_finance:
+        return project.status_display
+    return get_project_public_status(project_status=project.status)
diff --git a/hypha/apply/projects/tests/factories.py b/hypha/apply/projects/tests/factories.py
index efded5bb263e2c929e7b1d0a30cfadc758c1016e..f65f243f94aba9e193627f6c9c5bb4da42a1f969 100644
--- a/hypha/apply/projects/tests/factories.py
+++ b/hypha/apply/projects/tests/factories.py
@@ -9,12 +9,13 @@ from hypha.apply.stream_forms.testing.factories import (
     FormDataFactory,
     FormFieldsBlockFactory,
 )
+from hypha.apply.users.groups import APPROVER_GROUP_NAME, STAFF_GROUP_NAME
 from hypha.apply.users.tests.factories import GroupFactory, StaffFactory, UserFactory
 
 from ..models.payment import Invoice, InvoiceDeliverable, SupportingDocument
 from ..models.project import (
     COMPLETE,
-    IN_PROGRESS,
+    INVOICING_AND_REPORTING,
     Contract,
     Deliverable,
     DocumentCategory,
@@ -28,14 +29,16 @@ from ..models.project import (
 from ..models.report import Report, ReportConfig, ReportVersion
 
 ADDRESS = {
-    'country': 'GB',
-    'thoroughfare': factory.Faker('street_name').evaluate(None, None, {'locale': None}),
-    'premise': factory.Faker('building_number').evaluate(None, None, {'locale': None}),
-    'locality': {
-        'localityname': factory.Faker('city').evaluate(None, None, {'locale': None}),
-        'administrativearea': factory.Faker('city').evaluate(None, None, {'locale': None}),
-        'postal_code': 'SW1 4AQ',
-    }
+    "country": "GB",
+    "thoroughfare": factory.Faker("street_name").evaluate(None, None, {"locale": None}),
+    "premise": factory.Faker("building_number").evaluate(None, None, {"locale": None}),
+    "locality": {
+        "localityname": factory.Faker("city").evaluate(None, None, {"locale": None}),
+        "administrativearea": factory.Faker("city").evaluate(
+            None, None, {"locale": None}
+        ),
+        "postal_code": "SW1 4AQ",
+    },
 }
 
 
@@ -44,17 +47,17 @@ def address_to_form_data():
     Generate a AddressField compatible dictionary from the address data
     """
     return {
-        'contact_address_0': ADDRESS['country'],
-        'contact_address_1': ADDRESS['thoroughfare'],
-        'contact_address_2': ADDRESS['premise'],
-        'contact_address_3_0': ADDRESS['locality']['localityname'],
-        'contact_address_3_1': ADDRESS['locality']['administrativearea'],
-        'contact_address_3_2': ADDRESS['locality']['postal_code'],
+        "contact_address_0": ADDRESS["country"],
+        "contact_address_1": ADDRESS["thoroughfare"],
+        "contact_address_2": ADDRESS["premise"],
+        "contact_address_3_0": ADDRESS["locality"]["localityname"],
+        "contact_address_3_1": ADDRESS["locality"]["administrativearea"],
+        "contact_address_3_2": ADDRESS["locality"]["postal_code"],
     }
 
 
 class DocumentCategoryFactory(factory.django.DjangoModelFactory):
-    name = factory.Sequence('name {}'.format)
+    name = factory.Sequence("name {}".format)
     recommended_minimum = 1
 
     class Meta:
@@ -65,7 +68,7 @@ class ProjectApprovalFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ProjectApprovalForm
 
-    name = factory.Faker('word')
+    name = factory.Faker("word")
     form_fields = FormFieldsBlockFactory
 
 
@@ -73,7 +76,7 @@ class ProjectSOWFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ProjectSOWForm
 
-    name = factory.Faker('word')
+    name = factory.Faker("word")
     form_fields = FormFieldsBlockFactory
 
 
@@ -85,9 +88,9 @@ class ProjectFactory(factory.django.DjangoModelFactory):
     submission = factory.SubFactory(ApplicationSubmissionFactory)
     user = factory.SubFactory(UserFactory)
 
-    title = factory.Sequence('name {}'.format)
+    title = factory.Sequence("name {}".format)
     lead = factory.SubFactory(StaffFactory)
-    value = decimal.Decimal('100')
+    value = decimal.Decimal("100")
     proposed_start = factory.LazyFunction(timezone.now)
     proposed_end = factory.LazyFunction(timezone.now)
 
@@ -96,7 +99,7 @@ class ProjectFactory(factory.django.DjangoModelFactory):
     form_fields = FormFieldsBlockFactory
     form_data = factory.SubFactory(
         ProjectApprovalFormDataFactory,
-        form_fields=factory.SelfAttribute('..form_fields'),
+        form_fields=factory.SelfAttribute("..form_fields"),
     )
 
     class Meta:
@@ -107,7 +110,7 @@ class ProjectFactory(factory.django.DjangoModelFactory):
             is_locked=True,
         )
         in_progress = factory.Trait(
-            status=IN_PROGRESS,
+            status=INVOICING_AND_REPORTING,
         )
         is_complete = factory.Trait(
             status=COMPLETE,
@@ -115,7 +118,7 @@ class ProjectFactory(factory.django.DjangoModelFactory):
 
 
 class PAFReviewerRoleFactory(factory.django.DjangoModelFactory):
-    label = factory.Faker('name')
+    label = factory.Faker("name")
 
     class Meta:
         model = PAFReviewersRole
@@ -123,12 +126,10 @@ class PAFReviewerRoleFactory(factory.django.DjangoModelFactory):
     @factory.post_generation
     def user_roles(self, create, extracted, **kwargs):
         if create:
-            if not extracted:
-                roles = GroupFactory(**kwargs)
-            else:
-                roles = extracted
-
-            self.user_roles.add(roles)
+            self.user_roles.add(
+                GroupFactory(name=STAFF_GROUP_NAME),
+                GroupFactory(name=APPROVER_GROUP_NAME),
+            )
 
 
 class PAFApprovalsFactory(factory.django.DjangoModelFactory):
@@ -156,7 +157,7 @@ class PacketFileFactory(factory.django.DjangoModelFactory):
     category = factory.SubFactory(DocumentCategoryFactory)
     project = factory.SubFactory(ProjectFactory)
 
-    title = factory.Sequence('name {}'.format)
+    title = factory.Sequence("name {}".format)
     document = factory.django.FileField()
 
     class Meta:
@@ -164,6 +165,8 @@ class PacketFileFactory(factory.django.DjangoModelFactory):
 
 
 class InvoiceFactory(factory.django.DjangoModelFactory):
+    invoice_number = factory.Faker("name")
+    invoice_amount = decimal.Decimal("10")
     project = factory.SubFactory(ProjectFactory)
     by = factory.SubFactory(UserFactory)
     document = factory.django.FileField()
@@ -189,7 +192,7 @@ class ReportConfigFactory(factory.django.DjangoModelFactory):
 
     class Meta:
         model = ReportConfig
-        django_get_or_create = ('project',)
+        django_get_or_create = ("project",)
 
     class Params:
         weeks = factory.Trait(
@@ -200,8 +203,8 @@ class ReportConfigFactory(factory.django.DjangoModelFactory):
 class ReportVersionFactory(factory.django.DjangoModelFactory):
     report = factory.SubFactory("hypha.apply.projects.tests.factories.ReportFactory")
     submitted = factory.LazyFunction(timezone.now)
-    public_content = factory.Faker('paragraph')
-    private_content = factory.Faker('paragraph')
+    public_content = factory.Faker("paragraph")
+    private_content = factory.Faker("paragraph")
     draft = True
 
     class Meta:
@@ -222,7 +225,9 @@ class ReportVersionFactory(factory.django.DjangoModelFactory):
 
 
 class ReportFactory(factory.django.DjangoModelFactory):
-    project = factory.SubFactory("hypha.apply.projects.tests.factories.ApprovedProjectFactory")
+    project = factory.SubFactory(
+        "hypha.apply.projects.tests.factories.ApprovedProjectFactory"
+    )
     end_date = factory.LazyFunction(timezone.now)
 
     class Meta:
@@ -230,24 +235,28 @@ class ReportFactory(factory.django.DjangoModelFactory):
 
     class Params:
         past_due = factory.Trait(
-            end_date=factory.LazyFunction(lambda: timezone.now() - relativedelta(days=1))
+            end_date=factory.LazyFunction(
+                lambda: timezone.now() - relativedelta(days=1)
+            )
         )
         is_submitted = factory.Trait(
-            version=factory.RelatedFactory(ReportVersionFactory, 'report', draft=False, relate=True)
+            version=factory.RelatedFactory(
+                ReportVersionFactory, "report", draft=False, relate=True
+            )
         )
         is_draft = factory.Trait(
-            version=factory.RelatedFactory(ReportVersionFactory, 'report', relate=True),
+            version=factory.RelatedFactory(ReportVersionFactory, "report", relate=True),
         )
 
 
 class ApprovedProjectFactory(ProjectFactory):
-    contract = factory.RelatedFactory(ContractFactory, 'project')
-    report_config = factory.RelatedFactory(ReportConfigFactory, 'project')
+    contract = factory.RelatedFactory(ContractFactory, "project")
+    report_config = factory.RelatedFactory(ReportConfigFactory, "project")
 
 
 class DeliverableFactory(factory.django.DjangoModelFactory):
-    name = factory.Sequence('name {}'.format)
-    unit_price = decimal.Decimal('100')
+    name = factory.Sequence("name {}".format)
+    unit_price = decimal.Decimal("100")
     project = factory.SubFactory(ProjectFactory)
 
     class Meta:
diff --git a/hypha/apply/projects/tests/test_commands.py b/hypha/apply/projects/tests/test_commands.py
index e3b8852886840e943cff34558a175a8d68e1fb85..a94de7e40d636bc6825399a30b4c514c0039f579 100644
--- a/hypha/apply/projects/tests/test_commands.py
+++ b/hypha/apply/projects/tests/test_commands.py
@@ -10,50 +10,58 @@ from hypha.apply.home.models import ApplyHomePage
 from .factories import ProjectFactory, ReportConfigFactory, ReportFactory
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestNotifyReportDue(TestCase):
     def test_notify_report_due_in_7_days(self):
         in_a_week = timezone.now() + relativedelta(days=7)
         ReportConfigFactory(schedule_start=in_a_week, project__in_progress=True)
         out = StringIO()
 
-        with self.settings(ALLOWED_HOSTS=[ApplyHomePage.objects.first().get_site().hostname]):
-            call_command('notify_report_due', 7, stdout=out)
-        self.assertIn('Notified project', out.getvalue())
+        with self.settings(
+            ALLOWED_HOSTS=[ApplyHomePage.objects.first().get_site().hostname]
+        ):
+            call_command("notify_report_due", 7, stdout=out)
+        self.assertIn("Notified project", out.getvalue())
 
     def test_dont_notify_report_due_in_7_days_already_submitted(self):
         in_a_week = timezone.now() + relativedelta(days=7)
-        config = ReportConfigFactory(schedule_start=in_a_week, project__in_progress=True)
+        config = ReportConfigFactory(
+            schedule_start=in_a_week, project__in_progress=True
+        )
         ReportFactory(
             project=config.project,
             is_submitted=True,
             end_date=config.schedule_start,
         )
         out = StringIO()
-        with self.settings(ALLOWED_HOSTS=[ApplyHomePage.objects.first().get_site().hostname]):
-            call_command('notify_report_due', 7, stdout=out)
-        self.assertNotIn('Notified project', out.getvalue())
+        with self.settings(
+            ALLOWED_HOSTS=[ApplyHomePage.objects.first().get_site().hostname]
+        ):
+            call_command("notify_report_due", 7, stdout=out)
+        self.assertNotIn("Notified project", out.getvalue())
 
     def test_dont_notify_already_notified(self):
         in_a_week = timezone.now() + relativedelta(days=7)
-        config = ReportConfigFactory(schedule_start=in_a_week, project__in_progress=True)
+        config = ReportConfigFactory(
+            schedule_start=in_a_week, project__in_progress=True
+        )
         ReportFactory(
             project=config.project,
             end_date=config.schedule_start,
             notified=timezone.now(),
         )
         out = StringIO()
-        call_command('notify_report_due', 7, stdout=out)
-        self.assertNotIn('Notified project', out.getvalue())
+        call_command("notify_report_due", 7, stdout=out)
+        self.assertNotIn("Notified project", out.getvalue())
 
     def test_dont_notify_project_not_in_progress(self):
         ProjectFactory()
         out = StringIO()
-        call_command('notify_report_due', 7, stdout=out)
-        self.assertNotIn('Notified project', out.getvalue())
+        call_command("notify_report_due", 7, stdout=out)
+        self.assertNotIn("Notified project", out.getvalue())
 
     def test_dont_notify_project_complete(self):
         ProjectFactory(is_complete=True)
         out = StringIO()
-        call_command('notify_report_due', 7, stdout=out)
-        self.assertNotIn('Notified project', out.getvalue())
+        call_command("notify_report_due", 7, stdout=out)
+        self.assertNotIn("Notified project", out.getvalue())
diff --git a/hypha/apply/projects/tests/test_forms.py b/hypha/apply/projects/tests/test_forms.py
index e95d418c1d804d30911709caf5ce2a7383932d6e..a1d85c869bfa5d29f3ae686f9b63a4d1344977ca 100644
--- a/hypha/apply/projects/tests/test_forms.py
+++ b/hypha/apply/projects/tests/test_forms.py
@@ -2,6 +2,7 @@ import json
 from io import BytesIO
 
 from django.core.files.uploadedfile import SimpleUploadedFile
+from django.http import QueryDict
 from django.test import TestCase, override_settings
 
 from hypha.apply.home.factories import ApplySiteFactory
@@ -33,7 +34,6 @@ from ..models.payment import (
     CHANGES_REQUESTED_BY_FINANCE_1,
     CHANGES_REQUESTED_BY_FINANCE_2,
     CHANGES_REQUESTED_BY_STAFF,
-    CONVERTED,
     DECLINED,
     PAID,
     RESUBMITTED,
@@ -57,8 +57,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance1_choices_with_submitted_status(self):
@@ -66,8 +71,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance2_choices_with_submitted_status(self):
@@ -75,8 +85,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED], invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_staff_choices_with_resubmitted_status(self):
@@ -84,9 +99,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance1_choices_with_resubmitted_status(self):
@@ -94,9 +113,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance2_choices_with_resubmitted_status(self):
@@ -104,9 +127,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_staff_choices_with_changes_requested_by_staff_status(self):
@@ -114,8 +141,10 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([DECLINED], invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices([DECLINED], invoice_status_user_choices(user))
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance1_choices_with_changes_requested_by_staff_status(self):
@@ -123,8 +152,10 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([DECLINED], invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices([DECLINED], invoice_status_user_choices(user))
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance2_choices_with_changes_requested_by_staff_status(self):
@@ -132,8 +163,10 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([DECLINED], invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices([DECLINED], invoice_status_user_choices(user))
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_staff_choices_with_approved_by_staff_status(self):
@@ -141,9 +174,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance1_choices_with_approved_by_staff_status(self):
@@ -151,9 +188,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance2_choices_with_approved_by_staff_status(self):
@@ -161,9 +202,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_staff_choices_with_changes_requested_by_finance1_status(self):
@@ -171,9 +216,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, DECLINED],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance1_choices_with_changes_requested_by_finance1_status(self):
@@ -181,9 +230,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, DECLINED],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_finance2_choices_with_changes_requested_by_finance1_status(self):
@@ -191,9 +244,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_STAFF, DECLINED],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_STAFF, DECLINED],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     def test_staff_choices_with_approved_by_finance1_status(self):
@@ -201,9 +258,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
@@ -212,9 +273,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=False)
@@ -223,9 +288,10 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CONVERTED, PAID],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices([PAID], invoice_status_user_choices(user))
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
@@ -234,9 +300,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
@@ -245,9 +315,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = StaffFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
@@ -256,9 +330,13 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = FinanceFactory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
@@ -267,19 +345,24 @@ class TestChangeInvoiceStatusFormForm(TestCase):
         user = Finance2Factory()
         form = ChangeInvoiceStatusForm(instance=invoice, user=user)
 
-        expected = set(filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
-                                              invoice_status_user_choices(user)))
-        actual = set(form.fields['status'].choices)
+        expected = set(
+            filter_request_choices(
+                [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1],
+                invoice_status_user_choices(user),
+            )
+        )
+        actual = set(form.fields["status"].choices)
         self.assertEqual(expected, actual)
 
 
 class TestChangePAFStatusForm(TestCase):
-
     @classmethod
     def setUpTestData(cls):
         super().setUpTestData()
         apply_site = ApplySiteFactory()
-        cls.project_setting, _ = ProjectSettings.objects.get_or_create(site_id=apply_site.id)
+        cls.project_setting, _ = ProjectSettings.objects.get_or_create(
+            site_id=apply_site.id
+        )
         cls.project_setting.use_settings = True
         cls.project_setting.save()
         cls.role = PAFReviewerRoleFactory(page=cls.project_setting)
@@ -287,14 +370,18 @@ class TestChangePAFStatusForm(TestCase):
     def test_paf_status_is_required(self):
         project = ProjectFactory(in_approval=True)
         user = StaffFactory()
-        form = ChangePAFStatusForm(data={'comment': 'comment'}, instance=project, user=user)
+        form = ChangePAFStatusForm(
+            data={"comment": "comment"}, instance=project, user=user
+        )
         self.assertFalse(form.is_valid())
-        self.assertIn('paf_status', form.errors.keys())
+        self.assertIn("paf_status", form.errors.keys())
 
     def test_comment_is_not_required(self):
         project = ProjectFactory(in_approval=True)
         user = StaffFactory()
-        form = ChangePAFStatusForm(data={'paf_status': APPROVE}, instance=project, user=user)
+        form = ChangePAFStatusForm(
+            data={"paf_status": APPROVE}, instance=project, user=user
+        )
         self.assertTrue(form.is_valid())
         self.assertEqual(form.errors, {})
 
@@ -305,12 +392,17 @@ class TestProjectApprovalForm(TestCase):
 
         self.assertFalse(project.user_has_updated_details)
 
-        data = {
-            'title': f'{project.title} test',
-            'value': project.value,
-            'proposed_start': project.proposed_start,
-            'proposed_end': project.proposed_end,
-        }
+        # Use querydict for request.POST
+        data = QueryDict("").copy()
+
+        data.update(
+            {
+                "title": f"{project.title} test",
+                "value": project.value,
+                "proposed_start": project.proposed_start,
+                "proposed_end": project.proposed_end,
+            }
+        )
         data.update(address_to_form_data())
         form = ProjectApprovalForm(instance=project, data=data)
         self.assertTrue(form.is_valid(), form.errors.as_text())
@@ -323,16 +415,17 @@ class TestProjectApprovalForm(TestCase):
 class TestCreateInvoiceForm(TestCase):
     def test_adding_invoice(self):
         data = {
-            'paid_value': '10',
-            'comment': 'test comment',
+            "invoice_number": "00INV_NUM",
+            "invoice_amount": "10",
+            "paid_value": "10",
+            "comment": "test comment",
         }
 
-        document = SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read())
-        supporting_documents = [SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read())]
-        files = {
-            'document': document,
-            'supporting_documents': supporting_documents
-        }
+        document = SimpleUploadedFile("invoice.pdf", BytesIO(b"somebinarydata").read())
+        supporting_documents = [
+            SimpleUploadedFile("invoice.pdf", BytesIO(b"somebinarydata").read())
+        ]
+        files = {"document": document, "supporting_documents": supporting_documents}
 
         form = CreateInvoiceForm(data=data, files=files)
         self.assertTrue(form.is_valid(), msg=form.errors)
@@ -347,14 +440,15 @@ class TestCreateInvoiceForm(TestCase):
 
     def test_supporting_documents_not_required(self):
         data = {
-            'paid_value': '10',
-            'comment': 'test comment',
-
+            "invoice_number": "00INV_NUM",
+            "invoice_amount": "10",
+            "paid_value": "10",
+            "comment": "test comment",
         }
 
-        document = SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read())
+        document = SimpleUploadedFile("invoice.pdf", BytesIO(b"somebinarydata").read())
         files = {
-            'document': document,
+            "document": document,
         }
 
         form = CreateInvoiceForm(data=data, files=files)
@@ -368,7 +462,6 @@ class TestCreateInvoiceForm(TestCase):
 
 
 class TestEditInvoiceForm(TestCase):
-
     def test_remove_existing_supporting_document(self):
         invoice = InvoiceFactory()
         SupportingDocumentFactory(invoice=invoice, document=invoice.document)
@@ -376,13 +469,16 @@ class TestEditInvoiceForm(TestCase):
 
         form = EditInvoiceForm(
             data={
-                'document': invoice.document,
-                'supporting_documents-uploads': '[]',
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "document": invoice.document,
+                "supporting_documents-uploads": "[]",
             },
             files={
-                'supporting_documents': [],
+                "supporting_documents": [],
             },
-            instance=invoice)
+            instance=invoice,
+        )
         self.assertTrue(form.is_valid())
 
         form.save()
@@ -395,14 +491,21 @@ class TestEditInvoiceForm(TestCase):
 
         form = EditInvoiceForm(
             data={
-                'document': invoice.document,
-                'supporting_documents-uploads': json.dumps(
-                    [{"name": supporting_document.document.name,
-                      "size": supporting_document.document.size,
-                      "type": "existing"}]
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "document": invoice.document,
+                "supporting_documents-uploads": json.dumps(
+                    [
+                        {
+                            "name": supporting_document.document.name,
+                            "size": supporting_document.document.size,
+                            "type": "existing",
+                        }
+                    ]
                 ),
             },
-            instance=invoice)
+            instance=invoice,
+        )
         self.assertTrue(form.is_valid())
 
         invoice = form.save()
@@ -412,14 +515,18 @@ class TestEditInvoiceForm(TestCase):
         invoice = InvoiceFactory()
         self.assertEqual(invoice.supporting_documents.count(), 0)
 
-        supporting_document = [SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read())]
+        supporting_document = [
+            SimpleUploadedFile("invoice.pdf", BytesIO(b"somebinarydata").read())
+        ]
         form = EditInvoiceForm(
             data={
-                'document': invoice.document,
-                'supporting_documents-uploads': '[]',
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "document": invoice.document,
+                "supporting_documents-uploads": "[]",
             },
             files={
-                'supporting_documents': supporting_document,
+                "supporting_documents": supporting_document,
             },
             instance=invoice,
         )
@@ -429,7 +536,7 @@ class TestEditInvoiceForm(TestCase):
         self.assertEqual(invoice.supporting_documents.count(), 1)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestSelectDocumentForm(TestCase):
     def test_copying_files(self):
         category = DocumentCategoryFactory()
@@ -444,42 +551,46 @@ class TestSelectDocumentForm(TestCase):
 
         form = SelectDocumentForm(
             files,
-            data={'category': category.id, 'document': url},
+            data={"category": category.id, "document": url},
         )
         self.assertTrue(form.is_valid(), form.errors)
 
         form.instance.project = project
         form.save()
 
-        packet_files = project.packet_files.order_by('id')
+        packet_files = project.packet_files.order_by("id")
         self.assertEqual(len(packet_files), 1)
 
         self.assertEqual(packet_files.first().document.read(), files[3].read())
 
 
 class TestStaffContractUploadForm(TestCase):
-    mock_file = SimpleUploadedFile('contract.pdf', BytesIO(b'somebinarydata').read())
+    mock_file = SimpleUploadedFile("contract.pdf", BytesIO(b"somebinarydata").read())
 
     def test_staff_can_upload_unsigned(self):
-        form = StaffUploadContractForm(data={}, files={'file': self.mock_file})
+        form = StaffUploadContractForm(data={}, files={"file": self.mock_file})
         self.assertTrue(form.is_valid(), form.errors)
-        self.assertFalse(form.cleaned_data.get('signed_by_applicant'))
+        self.assertFalse(form.cleaned_data.get("signed_by_applicant"))
 
     def test_staff_can_upload_signed(self):
-        form = StaffUploadContractForm(data={'signed_by_applicant': True}, files={'file': self.mock_file})
+        form = StaffUploadContractForm(
+            data={"signed_by_applicant": True}, files={"file": self.mock_file}
+        )
         self.assertTrue(form.is_valid(), form.errors)
-        self.assertTrue(form.cleaned_data.get('signed_by_applicant'))
+        self.assertTrue(form.cleaned_data.get("signed_by_applicant"))
 
 
 class TestContractUploadForm(TestCase):
-    mock_file = SimpleUploadedFile('contract.pdf', BytesIO(b'somebinarydata').read())
+    mock_file = SimpleUploadedFile("contract.pdf", BytesIO(b"somebinarydata").read())
 
     def test_applicant_cant_upload_unsigned(self):
-        form = UploadContractForm(data={}, files={'file': self.mock_file})
+        form = UploadContractForm(data={}, files={"file": self.mock_file})
         self.assertTrue(form.is_valid(), form.errors)
-        self.assertIsNone(form.cleaned_data.get('signed_by_applicant'))
+        self.assertIsNone(form.cleaned_data.get("signed_by_applicant"))
 
     def test_applicant_can_upload_signed(self):
-        form = UploadContractForm(data={'signed_by_applicant': True}, files={'file': self.mock_file})
+        form = UploadContractForm(
+            data={"signed_by_applicant": True}, files={"file": self.mock_file}
+        )
         self.assertTrue(form.is_valid(), form.errors)
-        self.assertIsNone(form.cleaned_data.get('signed_by_applicant'))
+        self.assertIsNone(form.cleaned_data.get("signed_by_applicant"))
diff --git a/hypha/apply/projects/tests/test_models.py b/hypha/apply/projects/tests/test_models.py
index 2a54a95c13e2be744ad80fe19aa18432bd1ec4ce..4a2199decceb0ee01e53d8eeb77f784f486efc31 100644
--- a/hypha/apply/projects/tests/test_models.py
+++ b/hypha/apply/projects/tests/test_models.py
@@ -19,7 +19,6 @@ from ..models.payment import (
     CHANGES_REQUESTED_BY_FINANCE_1,
     CHANGES_REQUESTED_BY_FINANCE_2,
     CHANGES_REQUESTED_BY_STAFF,
-    CONVERTED,
     DECLINED,
     INVOICE_STATUS_FINANCE_1_CHOICES,
     INVOICE_STATUS_FINANCE_2_CHOICES,
@@ -34,11 +33,8 @@ from ..models.project import Project
 from ..models.report import Report, ReportConfig
 from .factories import (
     DeliverableFactory,
-    DocumentCategoryFactory,
     InvoiceDeliverableFactory,
     InvoiceFactory,
-    PacketFileFactory,
-    ProjectFactory,
     ReportConfigFactory,
     ReportFactory,
 )
@@ -54,49 +50,6 @@ class TestProjectModel(TestCase):
         self.assertEqual(project.title, submission.title)
         self.assertEqual(project.user, submission.user)
 
-    def test_get_missing_document_categories_with_enough_documents(self):
-        project = ProjectFactory()
-        category = DocumentCategoryFactory(recommended_minimum=1)
-        PacketFileFactory(project=project, category=category)
-
-        self.assertEqual(project.packet_files.count(), 1)
-
-        missing = list(project.get_missing_document_categories())
-
-        self.assertEqual(len(missing), 0)
-
-    def test_get_missing_document_categories_with_no_documents(self):
-        project = ProjectFactory()
-        category = DocumentCategoryFactory(recommended_minimum=1)
-
-        self.assertEqual(project.packet_files.count(), 0)
-
-        missing = list(project.get_missing_document_categories())
-
-        self.assertEqual(len(missing), 1)
-        self.assertEqual(missing[0]['category'], category)
-        self.assertEqual(missing[0]['difference'], 1)
-
-    def test_get_missing_document_categories_with_some_documents(self):
-        project = ProjectFactory()
-
-        category1 = DocumentCategoryFactory(recommended_minimum=5)
-        PacketFileFactory(project=project, category=category1)
-        PacketFileFactory(project=project, category=category1)
-
-        category2 = DocumentCategoryFactory(recommended_minimum=3)
-        PacketFileFactory(project=project, category=category2)
-
-        self.assertEqual(project.packet_files.count(), 3)
-
-        missing = list(project.get_missing_document_categories())
-
-        self.assertEqual(len(missing), 2)
-        self.assertEqual(missing[0]['category'], category1)
-        self.assertEqual(missing[0]['difference'], 3)
-        self.assertEqual(missing[1]['category'], category2)
-        self.assertEqual(missing[1]['difference'], 2)
-
 
 class TestInvoiceModel(TestCase):
     def test_invoice_status_user_choices(self):
@@ -180,30 +133,37 @@ class TestInvoiceModel(TestCase):
         invoice = InvoiceFactory(
             paid_value=None,
         )
-        self.assertNotEqual(invoice.value, Decimal('1'))
+        self.assertNotEqual(invoice.value, Decimal("1"))
 
     def test_paid_value_overrides_paid_value(self):
         invoice = InvoiceFactory(
-            paid_value=Decimal('2'),
+            paid_value=Decimal("2"),
         )
-        self.assertEqual(invoice.value, Decimal('2'))
+        self.assertEqual(invoice.value, Decimal("2"))
 
         invoice = InvoiceFactory(
-            paid_value=Decimal('2'),
+            paid_value=Decimal("2"),
         )
-        self.assertEqual(invoice.value, Decimal('2'))
+        self.assertEqual(invoice.value, Decimal("2"))
 
     def test_deliverables_total_amount(self):
         deliverable = DeliverableFactory(unit_price=100)
-        invoice_deliverable = InvoiceDeliverableFactory(deliverable=deliverable, quantity=2)
+        invoice_deliverable = InvoiceDeliverableFactory(
+            deliverable=deliverable, quantity=2
+        )
         self.assertEqual(invoice_deliverable.deliverable.unit_price, 100.00)
 
         invoice = InvoiceFactory(status=APPROVED_BY_STAFF)
         invoice.deliverables.add(invoice_deliverable)
-        self.assertEqual(invoice.deliverables_total_amount['total'], 200.00)
+        self.assertEqual(invoice.deliverables_total_amount["total"], 200.00)
 
     def test_staff_can_change_status(self):
-        statuses = [SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1]
+        statuses = [
+            SUBMITTED,
+            RESUBMITTED,
+            CHANGES_REQUESTED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+        ]
         user = StaffFactory()
         for status in statuses:
             invoice = InvoiceFactory(status=status)
@@ -211,8 +171,12 @@ class TestInvoiceModel(TestCase):
 
     def test_staff_cant_change_status(self):
         statuses = [
-            APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2,
-            CHANGES_REQUESTED_BY_FINANCE_2, DECLINED, PAID
+            APPROVED_BY_STAFF,
+            APPROVED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            DECLINED,
+            PAID,
         ]
         user = StaffFactory()
         for status in statuses:
@@ -229,7 +193,7 @@ class TestInvoiceModel(TestCase):
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=False)
     def test_finance1_can_change_status(self):
-        statuses = [APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1, CONVERTED]
+        statuses = [APPROVED_BY_STAFF, APPROVED_BY_FINANCE_1]
         user = FinanceFactory()
         for status in statuses:
             invoice = InvoiceFactory(status=status)
@@ -238,8 +202,14 @@ class TestInvoiceModel(TestCase):
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
     def test_finance1_cant_change_status_with_extended_flow(self):
         statuses = [
-            APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF,
-            CHANGES_REQUESTED_BY_FINANCE_1, DECLINED, PAID, RESUBMITTED, SUBMITTED
+            APPROVED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            DECLINED,
+            PAID,
+            RESUBMITTED,
+            SUBMITTED,
         ]
         user = FinanceFactory()
         for status in statuses:
@@ -249,8 +219,12 @@ class TestInvoiceModel(TestCase):
     @override_settings(INVOICE_EXTENDED_WORKFLOW=False)
     def test_finance1_cant_change_status(self):
         statuses = [
-            CHANGES_REQUESTED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1,
-            DECLINED, PAID, RESUBMITTED, SUBMITTED
+            CHANGES_REQUESTED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            DECLINED,
+            PAID,
+            RESUBMITTED,
+            SUBMITTED,
         ]
         user = FinanceFactory()
         for status in statuses:
@@ -259,7 +233,7 @@ class TestInvoiceModel(TestCase):
 
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
     def test_finance2_can_change_status_with_extended_flow(self):
-        statuses = [APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CONVERTED]
+        statuses = [APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2]
         user = Finance2Factory()
         for status in statuses:
             invoice = InvoiceFactory(status=status)
@@ -268,8 +242,14 @@ class TestInvoiceModel(TestCase):
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
     def test_finance2_cant_change_status(self):
         statuses = [
-            APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2,
-            CHANGES_REQUESTED_BY_STAFF, DECLINED, PAID, RESUBMITTED, SUBMITTED
+            APPROVED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_STAFF,
+            DECLINED,
+            PAID,
+            RESUBMITTED,
+            SUBMITTED,
         ]
         user = Finance2Factory()
         for status in statuses:
@@ -285,8 +265,13 @@ class TestInvoiceModel(TestCase):
 
     def test_applicant_cant_edit_invoice(self):
         statuses = [
-            APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1,
-            CHANGES_REQUESTED_BY_FINANCE_2, DECLINED, PAID
+            APPROVED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_2,
+            APPROVED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            DECLINED,
+            PAID,
         ]
         user = ApplicantFactory()
         for status in statuses:
@@ -302,8 +287,13 @@ class TestInvoiceModel(TestCase):
 
     def test_staff_cant_edit_invoice(self):
         statuses = [
-            APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, APPROVED_BY_STAFF,
-            CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, DECLINED, PAID
+            APPROVED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_2,
+            APPROVED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_STAFF,
+            DECLINED,
+            PAID,
         ]
         user = StaffFactory()
         for status in statuses:
@@ -312,8 +302,16 @@ class TestInvoiceModel(TestCase):
 
     def test_applicant_cant_edit_deliverables(self):
         statuses = [
-            SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1,
-            APPROVED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2, DECLINED, PAID
+            SUBMITTED,
+            RESUBMITTED,
+            CHANGES_REQUESTED_BY_STAFF,
+            APPROVED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_1,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            APPROVED_BY_FINANCE_2,
+            DECLINED,
+            PAID,
         ]
         user = ApplicantFactory()
         for status in statuses:
@@ -329,8 +327,13 @@ class TestInvoiceModel(TestCase):
 
     def test_staff_cant_edit_deliverables(self):
         statuses = [
-            APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, APPROVED_BY_STAFF,
-            CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, DECLINED, PAID
+            APPROVED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_2,
+            APPROVED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_STAFF,
+            DECLINED,
+            PAID,
         ]
         user = StaffFactory()
         for status in statuses:
@@ -355,8 +358,14 @@ class TestInvoiceModel(TestCase):
 
     def test_finance1_cant_edit_deliverables(self):
         statuses = [
-            APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_STAFF,
-            DECLINED, PAID, SUBMITTED, RESUBMITTED,
+            APPROVED_BY_FINANCE_1,
+            APPROVED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            CHANGES_REQUESTED_BY_STAFF,
+            DECLINED,
+            PAID,
+            SUBMITTED,
+            RESUBMITTED,
         ]
         user = FinanceFactory()
         for status in statuses:
@@ -374,8 +383,15 @@ class TestInvoiceModel(TestCase):
     @override_settings(INVOICE_EXTENDED_WORKFLOW=True)
     def test_finance2_cant_edit_deliverables(self):
         statuses = [
-            APPROVED_BY_FINANCE_2, APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1,
-            CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, DECLINED, PAID, SUBMITTED, RESUBMITTED
+            APPROVED_BY_FINANCE_2,
+            APPROVED_BY_STAFF,
+            CHANGES_REQUESTED_BY_FINANCE_1,
+            CHANGES_REQUESTED_BY_FINANCE_2,
+            CHANGES_REQUESTED_BY_STAFF,
+            DECLINED,
+            PAID,
+            SUBMITTED,
+            RESUBMITTED,
         ]
         user = Finance2Factory()
         for status in statuses:
@@ -509,12 +525,16 @@ class TestReportConfig(TestCase):
         # length (31st Oct to 30th Nov)
         # combined => 31th + 1 month = 30th - 1 day = 29th (wrong)
         # separate => 31th - 1 day = 30th + 1 month = 30th (correct)
-        next_due = report.project.start_date - relativedelta(days=1) + relativedelta(months=1)
+        next_due = (
+            report.project.start_date - relativedelta(days=1) + relativedelta(months=1)
+        )
         self.assertEqual(Report.objects.count(), 1)
         self.assertEqual(report.end_date, next_due)
 
     def test_no_report_creates_report_not_in_past(self):
-        config = ReportConfigFactory(schedule_start=self.today - relativedelta(months=3))
+        config = ReportConfigFactory(
+            schedule_start=self.today - relativedelta(months=3)
+        )
         report = config.current_due_report()
         self.assertEqual(Report.objects.count(), 1)
         self.assertEqual(report.end_date, self.today)
@@ -534,7 +554,9 @@ class TestReportConfig(TestCase):
 
     def test_past_due_report_creates_report(self):
         config = ReportConfigFactory(schedule_start=self.today - relativedelta(days=2))
-        ReportFactory(project=config.project, end_date=self.today - relativedelta(days=1))
+        ReportFactory(
+            project=config.project, end_date=self.today - relativedelta(days=1)
+        )
 
         # Separate day from month for case where start date + 1 month would exceed next month
         # length (31st Oct to 30th Nov)
@@ -552,7 +574,9 @@ class TestReportConfig(TestCase):
 
     def test_past_due_report_future_schedule_creates_report(self):
         config = ReportConfigFactory(schedule_start=self.today + relativedelta(days=3))
-        ReportFactory(project=config.project, end_date=self.today - relativedelta(days=1))
+        ReportFactory(
+            project=config.project, end_date=self.today - relativedelta(days=1)
+        )
 
         report = config.current_due_report()
         self.assertEqual(Report.objects.count(), 2)
@@ -560,19 +584,27 @@ class TestReportConfig(TestCase):
 
     def test_submitted_report_unaffected(self):
         config = ReportConfigFactory()
-        report = ReportFactory(is_submitted=True, project=config.project, end_date=self.today + relativedelta(days=1))
+        report = ReportFactory(
+            is_submitted=True,
+            project=config.project,
+            end_date=self.today + relativedelta(days=1),
+        )
         next_report = config.current_due_report()
         self.assertNotEqual(report, next_report)
 
     def test_past_due(self):
         report = ReportFactory(past_due=True)
         config = report.project.report_config
-        self.assertQuerysetEqual(config.past_due_reports(), [report], transform=lambda x: x)
+        self.assertQuerysetEqual(
+            config.past_due_reports(), [report], transform=lambda x: x
+        )
 
     def test_past_due_has_drafts(self):
         report = ReportFactory(past_due=True, is_draft=True)
         config = report.project.report_config
-        self.assertQuerysetEqual(config.past_due_reports(), [report], transform=lambda x: x)
+        self.assertQuerysetEqual(
+            config.past_due_reports(), [report], transform=lambda x: x
+        )
 
     def test_past_due_no_submitted(self):
         report = ReportFactory(is_submitted=True, past_due=True)
diff --git a/hypha/apply/projects/tests/test_settings.py b/hypha/apply/projects/tests/test_settings.py
index ef4e94f1df75085dfbd202c94c093ef2cda31bfa..b006647fa687c296692cf97ab098e946ee3a7efe 100644
--- a/hypha/apply/projects/tests/test_settings.py
+++ b/hypha/apply/projects/tests/test_settings.py
@@ -8,8 +8,8 @@ class TestProjectFeatureFlag(TestCase):
     def test_urls_404_when_turned_off(self):
         self.client.force_login(StaffFactory())
 
-        response = self.client.get('/apply/projects/', follow=True)
+        response = self.client.get("/apply/projects/", follow=True)
         self.assertEqual(response.status_code, 404)
 
-        response = self.client.get('/apply/projects/1/', follow=True)
+        response = self.client.get("/apply/projects/1/", follow=True)
         self.assertEqual(response.status_code, 404)
diff --git a/hypha/apply/projects/tests/test_templatetags.py b/hypha/apply/projects/tests/test_templatetags.py
index 1b8b87826a4fd0074ca1506d5302ae05bfdf8cd4..9fd0d6e4717cd7e0eead94b11219150b3e0ebe26 100644
--- a/hypha/apply/projects/tests/test_templatetags.py
+++ b/hypha/apply/projects/tests/test_templatetags.py
@@ -19,8 +19,8 @@ from ..models.project import (
     COMPLETE,
     CONTRACTING,
     DRAFT,
-    IN_PROGRESS,
-    WAITING_FOR_APPROVAL,
+    INTERNAL_APPROVAL,
+    INVOICING_AND_REPORTING,
 )
 from ..templatetags.contract_tools import user_can_upload_contract
 from ..templatetags.invoice_tools import can_change_status, can_delete, can_edit
@@ -34,13 +34,13 @@ class TestContractTools(TestCase):
         project = ProjectFactory(status=DRAFT)
         self.assertFalse(user_can_upload_contract(project, staff))
 
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
         self.assertFalse(user_can_upload_contract(project, staff))
 
         project = ProjectFactory(status=CONTRACTING)
         self.assertFalse(user_can_upload_contract(project, staff))
 
-        project = ProjectFactory(status=IN_PROGRESS)
+        project = ProjectFactory(status=INVOICING_AND_REPORTING)
         self.assertFalse(user_can_upload_contract(project, staff))
 
         project = ProjectFactory(status=COMPLETE)
@@ -55,14 +55,14 @@ class TestContractTools(TestCase):
         project = ProjectFactory(status=DRAFT, user=applicant)
         self.assertFalse(user_can_upload_contract(project, applicant))
 
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL, user=applicant)
+        project = ProjectFactory(status=INTERNAL_APPROVAL, user=applicant)
         self.assertFalse(user_can_upload_contract(project, applicant))
 
         project = ProjectFactory(status=CONTRACTING, user=applicant)
         ContractFactory(project=project)
         self.assertTrue(user_can_upload_contract(project, applicant))
 
-        project = ProjectFactory(status=IN_PROGRESS, user=applicant)
+        project = ProjectFactory(status=INVOICING_AND_REPORTING, user=applicant)
         self.assertFalse(user_can_upload_contract(project, applicant))
 
         project = ProjectFactory(status=COMPLETE, user=applicant)
diff --git a/hypha/apply/projects/tests/test_views.py b/hypha/apply/projects/tests/test_views.py
index 3520e21a9a496a46584146d5070e43b1e33e5a8d..688f9d2119feefaac2ef88bafd5f54c3dd2c57b7 100644
--- a/hypha/apply/projects/tests/test_views.py
+++ b/hypha/apply/projects/tests/test_views.py
@@ -31,9 +31,9 @@ from ..models.project import (
     COMPLETE,
     CONTRACTING,
     DRAFT,
-    IN_PROGRESS,
+    INTERNAL_APPROVAL,
+    INVOICING_AND_REPORTING,
     REQUEST_CHANGE,
-    WAITING_FOR_APPROVAL,
     ProjectSettings,
 )
 from ..views.project import ContractsMixin, ProjectDetailApprovalView
@@ -52,18 +52,20 @@ from .factories import (
 
 
 class TestUpdateLeadView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = ApproverFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_update_lead(self):
         project = ProjectFactory()
 
         new_lead = self.user_factory()
-        response = self.post_page(project, {'form-submitted-lead_form': '', 'lead': new_lead.id})
+        response = self.post_page(
+            project, {"form-submitted-lead_form": "", "lead": new_lead.id}
+        )
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
@@ -73,7 +75,9 @@ class TestUpdateLeadView(BaseViewTestCase):
         project = ProjectFactory(lead=None)
 
         new_lead = self.user_factory()
-        response = self.post_page(project, {'form-submitted-lead_form': '', 'lead': new_lead.id})
+        response = self.post_page(
+            project, {"form-submitted-lead_form": "", "lead": new_lead.id}
+        )
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
@@ -81,20 +85,22 @@ class TestUpdateLeadView(BaseViewTestCase):
 
 
 class TestSendForApprovalView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def setUp(self):
         super().setUp()
         apply_site = ApplySiteFactory()
-        self.project_setting, _ = ProjectSettings.objects.get_or_create(site_id=apply_site.id)
+        self.project_setting, _ = ProjectSettings.objects.get_or_create(
+            site_id=apply_site.id
+        )
         self.project_setting.use_settings = True
         self.project_setting.save()
         self.role = PAFReviewerRoleFactory(page=self.project_setting)
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_send_for_approval_fails_when_project_is_locked(self):
         project = ProjectFactory(is_locked=True)
@@ -105,7 +111,7 @@ class TestSendForApprovalView(BaseViewTestCase):
         self.assertFalse(form.is_valid())
 
     def test_send_for_approval_fails_when_project_is_not_in_draft_state(self):
-        project = ProjectFactory(status='in_progress')
+        project = ProjectFactory(status=INVOICING_AND_REPORTING)
 
         # The view doesn't have any custom changes when form validation fails
         # so check that directly.
@@ -115,78 +121,100 @@ class TestSendForApprovalView(BaseViewTestCase):
     def test_send_for_approval_happy_path(self):
         project = ProjectFactory(is_locked=False, status=DRAFT)
 
-        response = self.post_page(project, {'form-submitted-request_approval_form': ''})
+        response = self.post_page(project, {"form-submitted-request_approval_form": ""})
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
 
         self.assertFalse(project.is_locked)
-        self.assertEqual(project.status, WAITING_FOR_APPROVAL)
+        self.assertEqual(project.status, INTERNAL_APPROVAL)
 
 
 class TestChangePAFStatusView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
-    user_factory = StaffFactory
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
+    user_factory = ApproverFactory
 
     def setUp(self):
         super().setUp()
         apply_site = ApplySiteFactory()
-        self.project_setting, _ = ProjectSettings.objects.get_or_create(site_id=apply_site.id)
+        self.project_setting, _ = ProjectSettings.objects.get_or_create(
+            site_id=apply_site.id
+        )
         self.project_setting.use_settings = True
         self.project_setting.save()
         self.role = PAFReviewerRoleFactory(page=self.project_setting)
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_unassigned_applicant_cant_update_paf_status(self):
         user = ApplicantFactory()
         self.client.force_login(user=user)
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
 
-        PAFApprovalsFactory(project=project, user=ApplicantFactory(), paf_reviewer_role=self.role)
+        PAFApprovalsFactory(
+            project=project, user=ApplicantFactory(), paf_reviewer_role=self.role
+        )
 
-        response = self.post_page(project, {'form-submitted-change_paf_status': '', 'paf_status': APPROVE})
+        response = self.post_page(
+            project, {"form-submitted-change_paf_status": "", "paf_status": APPROVE}
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_unassigned_staff_cant_update_paf_status(self):
         user = StaffFactory()
         self.client.force_login(user=user)
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
 
-        PAFApprovalsFactory(project=project, user=StaffFactory(), paf_reviewer_role=self.role)
+        PAFApprovalsFactory(
+            project=project, user=StaffFactory(), paf_reviewer_role=self.role
+        )
 
-        response = self.post_page(project, {'form-submitted-change_paf_status': '', 'paf_status': APPROVE})
+        response = self.post_page(
+            project, {"form-submitted-change_paf_status": "", "paf_status": APPROVE}
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_unassigned_finance_cant_update_paf_status(self):
         user = FinanceFactory()
         self.client.force_login(user=user)
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
 
-        PAFApprovalsFactory(project=project, user=FinanceFactory(), paf_reviewer_role=self.role)
+        PAFApprovalsFactory(
+            project=project, user=FinanceFactory(), paf_reviewer_role=self.role
+        )
 
-        response = self.post_page(project, {'form-submitted-change_paf_status': '', 'paf_status': APPROVE})
+        response = self.post_page(
+            project, {"form-submitted-change_paf_status": "", "paf_status": APPROVE}
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_unassigned_contracting_cant_update_paf_status(self):
         user = ContractingFactory()
         self.client.force_login(user=user)
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
 
-        PAFApprovalsFactory(project=project, user=ContractingFactory(), paf_reviewer_role=self.role)
+        PAFApprovalsFactory(
+            project=project, user=ContractingFactory(), paf_reviewer_role=self.role
+        )
 
-        response = self.post_page(project, {'form-submitted-change_paf_status': '', 'paf_status': APPROVE})
+        response = self.post_page(
+            project, {"form-submitted-change_paf_status": "", "paf_status": APPROVE}
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_assigned_approvers_can_approve_paf(self):
         # reviewer can be staff, finance or contracting
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
 
-        approval = PAFApprovalsFactory(project=project, user=self.user, paf_reviewer_role=self.role)
+        approval = PAFApprovalsFactory(
+            project=project, user=self.user, paf_reviewer_role=self.role
+        )
 
-        response = self.post_page(project, {'form-submitted-change_paf_status': '', 'paf_status': APPROVE})
+        response = self.post_page(
+            project, {"form-submitted-change_paf_status": "", "paf_status": APPROVE}
+        )
 
         self.assertEqual(response.status_code, 200)
 
@@ -198,11 +226,16 @@ class TestChangePAFStatusView(BaseViewTestCase):
 
     def test_assigned_approvers_can_reject_paf(self):
         # reviewer can be staff, finance or contracting, or any assigned role
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
 
-        approval = PAFApprovalsFactory(project=project, user=self.user, paf_reviewer_role=self.role)
+        approval = PAFApprovalsFactory(
+            project=project, user=self.user, paf_reviewer_role=self.role
+        )
 
-        response = self.post_page(project, {'form-submitted-change_paf_status': '', 'paf_status': REQUEST_CHANGE})
+        response = self.post_page(
+            project,
+            {"form-submitted-change_paf_status": "", "paf_status": REQUEST_CHANGE},
+        )
 
         self.assertEqual(response.status_code, 200)
         project.refresh_from_db()
@@ -214,11 +247,11 @@ class TestChangePAFStatusView(BaseViewTestCase):
 
 
 class BaseProjectDetailTestCase(BaseViewTestCase):
-    url_name = 'funds:projects:{}'
-    base_view_name = 'detail'
+    url_name = "funds:projects:{}"
+    base_view_name = "detail"
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
 
 class TestStaffProjectDetailView(BaseProjectDetailTestCase):
@@ -239,13 +272,14 @@ class TestFinanceProjectDetailView(BaseProjectDetailTestCase):
     user_factory = FinanceFactory
 
     def test_has_access(self):
-        project = ProjectFactory(status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(status=INTERNAL_APPROVAL)
         response = self.get_page(project)
         self.assertEqual(response.status_code, 200)
 
-
     def test_lab_project_renders(self):
-        project = ProjectFactory(submission=LabSubmissionFactory(), status=WAITING_FOR_APPROVAL)
+        project = ProjectFactory(
+            submission=LabSubmissionFactory(), status=INTERNAL_APPROVAL
+        )
         response = self.get_page(project)
         self.assertEqual(response.status_code, 200)
 
@@ -283,70 +317,84 @@ class TestReviewerUserProjectDetailView(BaseProjectDetailTestCase):
 
 
 class TestRemoveDocumentView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_remove_document(self):
         project = ProjectFactory()
         document = PacketFileFactory()
 
-        response = self.post_page(project, {
-            'form-submitted-remove_document_form': '',
-            'id': document.id,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-remove_document_form": "",
+                "id": document.id,
+            },
+        )
         project.refresh_from_db()
 
         self.assertEqual(response.status_code, 200)
-        self.assertNotIn(document.pk, project.packet_files.values_list('pk', flat=True))
+        self.assertNotIn(document.pk, project.packet_files.values_list("pk", flat=True))
 
     def test_remove_non_existent_document(self):
-        response = self.post_page(ProjectFactory(), {
-            'form-submitted-remove_document_form': '',
-            'id': 1,
-        })
+        response = self.post_page(
+            ProjectFactory(),
+            {
+                "form-submitted-remove_document_form": "",
+                "id": 1,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
 
 class TestApplicantUploadContractView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_owner_upload_contract(self):
         project = ProjectFactory(status=CONTRACTING, user=self.user)
         ContractFactory(project=project)
 
-        test_doc = BytesIO(b'somebinarydata')
-        test_doc.name = 'contract.pdf'
+        test_doc = BytesIO(b"somebinarydata")
+        test_doc.name = "contract.pdf"
 
-        response = self.post_page(project, {
-            'form-submitted-contract_form': '',
-            'file': test_doc,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-contract_form": "",
+                "file": test_doc,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
 
-        self.assertTrue(project.contracts.order_by('-created_at').first().signed_by_applicant)
+        self.assertTrue(
+            project.contracts.order_by("-created_at").first().signed_by_applicant
+        )
 
     def test_non_owner_upload_contract(self):
         project = ProjectFactory(status=CONTRACTING)
         contract_count = project.contracts.count()
 
-        test_doc = BytesIO(b'somebinarydata')
-        test_doc.name = 'contract.pdf'
+        test_doc = BytesIO(b"somebinarydata")
+        test_doc.name = "contract.pdf"
 
-        response = self.post_page(project, {
-            'form-submitted-contract_form': '',
-            'file': test_doc,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-contract_form": "",
+                "file": test_doc,
+            },
+        )
         self.assertEqual(response.status_code, 403)
 
         project.refresh_from_db()
@@ -354,12 +402,12 @@ class TestApplicantUploadContractView(BaseViewTestCase):
 
 
 class TestStaffSelectDocumentView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_can_choose(self):
         category = DocumentCategoryFactory()
@@ -367,11 +415,14 @@ class TestStaffSelectDocumentView(BaseViewTestCase):
 
         files = get_files(project)
 
-        response = self.post_page(project, {
-            'form-submitted-select_document_form': '',
-            'category': category.id,
-            'document': files[0].url,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-select_document_form": "",
+                "category": category.id,
+                "document": files[0].url,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
@@ -380,12 +431,12 @@ class TestStaffSelectDocumentView(BaseViewTestCase):
 
 
 class TestApplicantSelectDocumentView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_can_choose(self):
         category = DocumentCategoryFactory()
@@ -393,11 +444,14 @@ class TestApplicantSelectDocumentView(BaseViewTestCase):
 
         files = get_files(project)
 
-        response = self.post_page(project, {
-            'form-submitted-select_document_form': '',
-            'category': category.id,
-            'document': files[0].url,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-select_document_form": "",
+                "category": category.id,
+                "document": files[0].url,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
@@ -406,26 +460,29 @@ class TestApplicantSelectDocumentView(BaseViewTestCase):
 
 
 class TestUploadDocumentView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_upload_document(self):
         category = DocumentCategoryFactory()
         project = ProjectFactory()
 
-        test_doc = BytesIO(b'somebinarydata')
-        test_doc.name = 'document.pdf'
-
-        response = self.post_page(project, {
-            'form-submitted-document_form': '',
-            'title': 'test document',
-            'category': category.id,
-            'document': test_doc,
-        })
+        test_doc = BytesIO(b"somebinarydata")
+        test_doc.name = "document.pdf"
+
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-document_form": "",
+                "title": "test document",
+                "category": category.id,
+                "document": test_doc,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
         project.refresh_from_db()
@@ -452,7 +509,7 @@ class TestContractsMixin(TestCase):
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
 
-        contracts = self.DummyContractsView(project).get_context_data()['contracts']
+        contracts = self.DummyContractsView(project).get_context_data()["contracts"]
 
         self.assertEqual(len(contracts), 3)
 
@@ -463,7 +520,7 @@ class TestContractsMixin(TestCase):
         ContractFactory(project=project, signed_by_applicant=False, approver=None)
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
 
-        contracts = self.DummyContractsView(project).get_context_data()['contracts']
+        contracts = self.DummyContractsView(project).get_context_data()["contracts"]
 
         self.assertEqual(len(contracts), 2)
         for contract in contracts:
@@ -471,7 +528,7 @@ class TestContractsMixin(TestCase):
 
     def test_no_contracts_returns_nothing(self):
         project = ProjectFactory()
-        contracts = self.DummyContractsView(project).get_context_data()['contracts']
+        contracts = self.DummyContractsView(project).get_context_data()["contracts"]
 
         self.assertEqual(len(contracts), 0)
 
@@ -479,13 +536,15 @@ class TestContractsMixin(TestCase):
         project = ProjectFactory()
         ContractFactory(project=project, signed_by_applicant=False, approver=None)
         ContractFactory(project=project, signed_by_applicant=False, approver=None)
-        latest = ContractFactory(project=project, signed_by_applicant=False, approver=None)
+        latest = ContractFactory(
+            project=project, signed_by_applicant=False, approver=None
+        )
 
         context = self.DummyContractsView(project).get_context_data()
 
-        contracts = context['contracts']
-        to_approve = context['contract_to_approve']
-        to_sign = context['contract_to_sign']
+        contracts = context["contracts"]
+        to_approve = context["contract_to_approve"]
+        to_sign = context["contract_to_sign"]
 
         self.assertEqual(len(contracts), 0)
         self.assertEqual(latest, to_sign)
@@ -495,13 +554,15 @@ class TestContractsMixin(TestCase):
         project = ProjectFactory()
         ContractFactory(project=project, signed_by_applicant=True, approver=None)
         ContractFactory(project=project, signed_by_applicant=True, approver=None)
-        latest = ContractFactory(project=project, signed_by_applicant=True, approver=None)
+        latest = ContractFactory(
+            project=project, signed_by_applicant=True, approver=None
+        )
 
         context = self.DummyContractsView(project).get_context_data()
 
-        contracts = context['contracts']
-        to_approve = context['contract_to_approve']
-        to_sign = context['contract_to_sign']
+        contracts = context["contracts"]
+        to_approve = context["contract_to_approve"]
+        to_sign = context["contract_to_sign"]
 
         self.assertEqual(len(contracts), 0)
         self.assertEqual(latest, to_approve)
@@ -514,13 +575,15 @@ class TestContractsMixin(TestCase):
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
         ContractFactory(project=project, signed_by_applicant=False, approver=None)
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
-        latest = ContractFactory(project=project, signed_by_applicant=False, approver=None)
+        latest = ContractFactory(
+            project=project, signed_by_applicant=False, approver=None
+        )
 
         context = self.DummyContractsView(project).get_context_data()
 
-        contracts = context['contracts']
-        to_approve = context['contract_to_approve']
-        to_sign = context['contract_to_sign']
+        contracts = context["contracts"]
+        to_approve = context["contract_to_approve"]
+        to_sign = context["contract_to_sign"]
 
         self.assertEqual(len(contracts), 2)
         self.assertEqual(latest, to_sign)
@@ -533,13 +596,15 @@ class TestContractsMixin(TestCase):
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
         ContractFactory(project=project, signed_by_applicant=False, approver=None)
         ContractFactory(project=project, signed_by_applicant=True, approver=user)
-        latest = ContractFactory(project=project, signed_by_applicant=True, approver=None)
+        latest = ContractFactory(
+            project=project, signed_by_applicant=True, approver=None
+        )
 
         context = self.DummyContractsView(project).get_context_data()
 
-        contracts = context['contracts']
-        to_approve = context['contract_to_approve']
-        to_sign = context['contract_to_sign']
+        contracts = context["contracts"]
+        to_approve = context["contract_to_approve"]
+        to_sign = context["contract_to_sign"]
 
         self.assertEqual(len(contracts), 2)
         self.assertEqual(latest, to_approve)
@@ -556,9 +621,9 @@ class TestContractsMixin(TestCase):
 
         context = self.DummyContractsView(project).get_context_data()
 
-        contracts = context['contracts']
-        to_approve = context['contract_to_approve']
-        to_sign = context['contract_to_sign']
+        contracts = context["contracts"]
+        to_approve = context["contract_to_approve"]
+        to_sign = context["contract_to_sign"]
 
         self.assertEqual(len(contracts), 3)
         self.assertIsNone(to_approve)
@@ -566,71 +631,93 @@ class TestContractsMixin(TestCase):
 
 
 class TestApproveContractView(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id}
+        return {"pk": instance.id}
 
     def test_approve_unapproved_contract(self):
         project = ProjectFactory(status=CONTRACTING)
-        contract = ContractFactory(project=project, signed_by_applicant=True, approver=None)
+        contract = ContractFactory(
+            project=project, signed_by_applicant=True, approver=None
+        )
 
-        response = self.post_page(project, {
-            'form-submitted-approve_contract_form': '',
-            'id': contract.id,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-approve_contract_form": "",
+                "id": contract.id,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
         contract.refresh_from_db()
         self.assertEqual(contract.approver, self.user)
 
         project.refresh_from_db()
-        self.assertEqual(project.status, IN_PROGRESS)
+        self.assertEqual(project.status, INVOICING_AND_REPORTING)
 
     def test_approve_already_approved_contract(self):
-        project = ProjectFactory(status=IN_PROGRESS)
+        project = ProjectFactory(status=INVOICING_AND_REPORTING)
         user = StaffFactory()
-        contract = ContractFactory(project=project, signed_by_applicant=True, approver=user)
+        contract = ContractFactory(
+            project=project, signed_by_applicant=True, approver=user
+        )
 
-        response = self.post_page(project, {
-            'form-submitted-approve_contract_form': '',
-            'id': contract.id,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-approve_contract_form": "",
+                "id": contract.id,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
         contract.refresh_from_db()
         self.assertEqual(contract.approver, user)
 
         project.refresh_from_db()
-        self.assertEqual(project.status, IN_PROGRESS)
+        self.assertEqual(project.status, INVOICING_AND_REPORTING)
 
     def test_approve_unsigned_contract(self):
         project = ProjectFactory()
-        contract = ContractFactory(project=project, signed_by_applicant=False, approver=None)
+        contract = ContractFactory(
+            project=project, signed_by_applicant=False, approver=None
+        )
 
-        response = self.post_page(project, {
-            'form-submitted-approve_contract_form': '',
-            'id': contract.id,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-approve_contract_form": "",
+                "id": contract.id,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
-        messages = list(response.context['messages'])
+        messages = list(response.context["messages"])
         self.assertEqual(len(messages), 1)
 
     def test_attempt_to_approve_non_latest(self):
         project = ProjectFactory()
-        contract_attempt = ContractFactory(project=project, signed_by_applicant=True, approver=None)
-        contract_meant = ContractFactory(project=project, signed_by_applicant=True, approver=None)
+        contract_attempt = ContractFactory(
+            project=project, signed_by_applicant=True, approver=None
+        )
+        contract_meant = ContractFactory(
+            project=project, signed_by_applicant=True, approver=None
+        )
 
-        response = self.post_page(project, {
-            'form-submitted-approve_contract_form': '',
-            'id': contract_attempt.id,
-        })
+        response = self.post_page(
+            project,
+            {
+                "form-submitted-approve_contract_form": "",
+                "id": contract_attempt.id,
+            },
+        )
         self.assertEqual(response.status_code, 200)
 
-        messages = list(response.context['messages'])
+        messages = list(response.context["messages"])
         self.assertEqual(len(messages), 1)
         contract_attempt.refresh_from_db()
         contract_meant.refresh_from_db()
@@ -639,13 +726,13 @@ class TestApproveContractView(BaseViewTestCase):
 
 
 class BasePacketFileViewTestCase(BaseViewTestCase):
-    url_name = 'funds:projects:{}'
-    base_view_name = 'document'
+    url_name = "funds:projects:{}"
+    base_view_name = "document"
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'file_pk': instance.id,
+            "pk": instance.project.pk,
+            "file_pk": instance.id,
         }
 
 
@@ -684,7 +771,7 @@ class TestAnonPacketView(BasePacketFileViewTestCase):
         self.assertEqual(response.status_code, 200)
         self.assertEqual(len(response.redirect_chain), 2)
         for path, _ in response.redirect_chain:
-            self.assertIn(reverse('users_public:login'), path)
+            self.assertIn(reverse("users_public:login"), path)
 
 
 class TestProjectDetailApprovalView(TestCase):
@@ -692,7 +779,7 @@ class TestProjectDetailApprovalView(TestCase):
         factory = RequestFactory()
         project = ProjectFactory()
 
-        request = factory.get(f'/project/{project.pk}')
+        request = factory.get(f"/project/{project.pk}")
         request.user = StaffFactory()
 
         response = ProjectDetailApprovalView.as_view()(request, pk=project.pk)
@@ -704,60 +791,60 @@ class TestProjectDetailApprovalView(TestCase):
 
 
 class TestStaffDetailInvoiceStatus(BaseViewTestCase):
-    base_view_name = 'invoice-detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk,
+            "pk": instance.project.pk,
+            "invoice_pk": instance.pk,
         }
 
     def test_can(self):
         invoice = InvoiceFactory()
-        response = self.get_page(invoice, url_kwargs={'pk': invoice.project.pk})
+        response = self.get_page(invoice, url_kwargs={"pk": invoice.project.pk})
         self.assertEqual(response.status_code, 200)
 
     def test_wrong_project_cant(self):
         other_project = ProjectFactory()
         invoice = InvoiceFactory()
-        response = self.get_page(invoice, url_kwargs={'pk': other_project.pk})
+        response = self.get_page(invoice, url_kwargs={"pk": other_project.pk})
         self.assertEqual(response.status_code, 404)
 
 
 class TestFinanceDetailInvoiceStatus(BaseViewTestCase):
-    base_view_name = 'invoice-detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-detail"
+    url_name = "funds:projects:{}"
     user_factory = FinanceFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk,
+            "pk": instance.project.pk,
+            "invoice_pk": instance.pk,
         }
 
     def test_can(self):
         invoice = InvoiceFactory()
-        response = self.get_page(invoice, url_kwargs={'pk': invoice.project.pk})
+        response = self.get_page(invoice, url_kwargs={"pk": invoice.project.pk})
         self.assertEqual(response.status_code, 200)
 
     def test_wrong_project_cant(self):
         other_project = ProjectFactory()
         invoice = InvoiceFactory()
-        response = self.get_page(invoice, url_kwargs={'pk': other_project.pk})
+        response = self.get_page(invoice, url_kwargs={"pk": other_project.pk})
         self.assertEqual(response.status_code, 404)
 
 
 class TestApplicantDetailInvoiceStatus(BaseViewTestCase):
-    base_view_name = 'invoice-detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-detail"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk,
+            "pk": instance.project.pk,
+            "invoice_pk": instance.pk,
         }
 
     def test_can(self):
@@ -772,14 +859,14 @@ class TestApplicantDetailInvoiceStatus(BaseViewTestCase):
 
 
 class TestApplicantEditInvoiceView(BaseViewTestCase):
-    base_view_name = 'invoice-edit'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-edit"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk,
+            "pk": instance.project.pk,
+            "invoice_pk": instance.pk,
         }
 
     def test_editing_invoice_remove_supporting_document(self):
@@ -788,11 +875,16 @@ class TestApplicantEditInvoiceView(BaseViewTestCase):
 
         self.assertTrue(invoice.supporting_documents.exists())
 
-        response = self.post_page(invoice, {
-            'comment': 'test comment',
-            'invoice': '',
-            'supporting_documents-uploads': '[]',
-        })
+        response = self.post_page(
+            invoice,
+            {
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "comment": "test comment",
+                "invoice": "",
+                "supporting_documents-uploads": "[]",
+            },
+        )
 
         self.assertEqual(response.status_code, 200)
         self.assertFalse(invoice.supporting_documents.exists())
@@ -802,11 +894,24 @@ class TestApplicantEditInvoiceView(BaseViewTestCase):
         invoice = InvoiceFactory(project=project)
         supporting_document = SupportingDocumentFactory(invoice=invoice)
 
-        response = self.post_page(invoice, {
-            'comment': 'test comment',
-            'invoice': '',
-            'supporting_documents-uploads': json.dumps([{"name": supporting_document.document.name, "size": supporting_document.document.size, "type": "existing"}]),
-        })
+        response = self.post_page(
+            invoice,
+            {
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "comment": "test comment",
+                "invoice": "",
+                "supporting_documents-uploads": json.dumps(
+                    [
+                        {
+                            "name": supporting_document.document.name,
+                            "size": supporting_document.document.size,
+                            "type": "existing",
+                        }
+                    ]
+                ),
+            },
+        )
 
         self.assertEqual(response.status_code, 200)
         self.assertEqual(project.invoices.count(), 1)
@@ -814,29 +919,36 @@ class TestApplicantEditInvoiceView(BaseViewTestCase):
         invoice.refresh_from_db()
 
         self.assertEqual(project.invoices.first().pk, invoice.pk)
-        self.assertEqual(invoice.supporting_documents.first().document, supporting_document.document)
+        self.assertEqual(
+            invoice.supporting_documents.first().document, supporting_document.document
+        )
 
 
 class TestStaffEditInvoiceView(BaseViewTestCase):
-    base_view_name = 'invoice-edit'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-edit"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk,
+            "pk": instance.project.pk,
+            "invoice_pk": instance.pk,
         }
 
     def test_editing_invoice_remove_supporting_document(self):
         invoice = InvoiceFactory()
         SupportingDocumentFactory(invoice=invoice)
 
-        response = self.post_page(invoice, {
-            'comment': 'test comment',
-            'invoice': '',
-            'supporting_documents-uploads': '[]',
-        })
+        response = self.post_page(
+            invoice,
+            {
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "comment": "test comment",
+                "invoice": "",
+                "supporting_documents-uploads": "[]",
+            },
+        )
 
         self.assertEqual(response.status_code, 200)
 
@@ -847,14 +959,27 @@ class TestStaffEditInvoiceView(BaseViewTestCase):
         invoice = InvoiceFactory(project=project)
         supporting_document = SupportingDocumentFactory(invoice=invoice)
 
-        document = BytesIO(b'somebinarydata')
-        document.name = 'invoice.pdf'
-
-        response = self.post_page(invoice, {
-            'comment': 'test comment',
-            'document': document,
-            'supporting_documents-uploads': json.dumps([{"name": supporting_document.document.name, "size": supporting_document.document.size, "type": "existing"}]),
-        })
+        document = BytesIO(b"somebinarydata")
+        document.name = "invoice.pdf"
+
+        response = self.post_page(
+            invoice,
+            {
+                "invoice_number": invoice.invoice_number,
+                "invoice_amount": invoice.invoice_amount,
+                "comment": "test comment",
+                "document": document,
+                "supporting_documents-uploads": json.dumps(
+                    [
+                        {
+                            "name": supporting_document.document.name,
+                            "size": supporting_document.document.size,
+                            "type": "existing",
+                        }
+                    ]
+                ),
+            },
+        )
 
         self.assertEqual(response.status_code, 200)
         self.assertEqual(project.invoices.count(), 1)
@@ -863,97 +988,99 @@ class TestStaffEditInvoiceView(BaseViewTestCase):
 
         self.assertEqual(project.invoices.first().pk, invoice.pk)
 
-        self.assertEqual(invoice.supporting_documents.first().document, supporting_document.document)
+        self.assertEqual(
+            invoice.supporting_documents.first().document, supporting_document.document
+        )
 
 
 class TestStaffChangeInvoiceStatus(BaseViewTestCase):
-    base_view_name = 'invoice-detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-detail"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk,
+            "pk": instance.project.pk,
+            "invoice_pk": instance.pk,
         }
 
     def test_can(self):
         invoice = InvoiceFactory()
-        response = self.post_page(invoice, {
-            'form-submitted-change_invoice_status': '',
-            'status': CHANGES_REQUESTED_BY_STAFF,
-            'comment': 'this is a comment',
-        })
+        response = self.post_page(
+            invoice,
+            {
+                "form-submitted-change_invoice_status": "",
+                "status": CHANGES_REQUESTED_BY_STAFF,
+                "comment": "this is a comment",
+            },
+        )
         self.assertEqual(response.status_code, 200)
         invoice.refresh_from_db()
         self.assertEqual(invoice.status, CHANGES_REQUESTED_BY_STAFF)
 
 
 class TestApplicantChangeInoviceStatus(BaseViewTestCase):
-    base_view_name = 'invoice-detail'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-detail"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
-        return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk
-        }
+        return {"pk": instance.project.pk, "invoice_pk": instance.pk}
 
     def test_can(self):
         invoice = InvoiceFactory(project__user=self.user)
-        response = self.post_page(invoice, {
-            'form-submitted-change_invoice_status': '',
-            'status': CHANGES_REQUESTED_BY_STAFF,
-        })
+        response = self.post_page(
+            invoice,
+            {
+                "form-submitted-change_invoice_status": "",
+                "status": CHANGES_REQUESTED_BY_STAFF,
+            },
+        )
         self.assertEqual(response.status_code, 200)
         invoice.refresh_from_db()
         self.assertEqual(invoice.status, SUBMITTED)
 
     def test_other_cant(self):
         invoice = InvoiceFactory()
-        response = self.post_page(invoice, {
-            'form-submitted-change_invoice_status': '',
-            'status': CHANGES_REQUESTED_BY_STAFF,
-        })
+        response = self.post_page(
+            invoice,
+            {
+                "form-submitted-change_invoice_status": "",
+                "status": CHANGES_REQUESTED_BY_STAFF,
+            },
+        )
         self.assertEqual(response.status_code, 403)
         invoice.refresh_from_db()
         self.assertEqual(invoice.status, SUBMITTED)
 
 
 class TestStaffInoviceDocumentPrivateMedia(BaseViewTestCase):
-    base_view_name = 'invoice-document'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-document"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
-        return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk
-        }
+        return {"pk": instance.project.pk, "invoice_pk": instance.pk}
 
     def test_can_access(self):
         invoice = InvoiceFactory()
-        response = self.get_page(invoice, url_kwargs={'pk': invoice.project.pk})
+        response = self.get_page(invoice, url_kwargs={"pk": invoice.project.pk})
         self.assertContains(response, invoice.document.read())
 
     def test_cant_access_if_project_wrong(self):
         other_project = ProjectFactory()
         invoice = InvoiceFactory()
-        response = self.get_page(invoice, url_kwargs={'pk': other_project.pk})
+        response = self.get_page(invoice, url_kwargs={"pk": other_project.pk})
         self.assertEqual(response.status_code, 404)
 
 
 class TestApplicantInvoiceDocumentPrivateMedia(BaseViewTestCase):
-    base_view_name = 'invoice-document'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-document"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
-        return {
-            'pk': instance.project.pk,
-            'invoice_pk': instance.pk
-        }
+        return {"pk": instance.project.pk, "invoice_pk": instance.pk}
 
     def test_can_access_own(self):
         invoice = InvoiceFactory(project__user=self.user)
@@ -967,15 +1094,15 @@ class TestApplicantInvoiceDocumentPrivateMedia(BaseViewTestCase):
 
 
 class TestStaffInvoiceSupportingDocumentPrivateMedia(BaseViewTestCase):
-    base_view_name = 'invoice-supporting-document'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-supporting-document"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.invoice.project.pk,
-            'invoice_pk': instance.invoice.pk,
-            'file_pk': instance.pk,
+            "pk": instance.invoice.project.pk,
+            "invoice_pk": instance.invoice.pk,
+            "file_pk": instance.pk,
         }
 
     def test_can_access(self):
@@ -985,19 +1112,21 @@ class TestStaffInvoiceSupportingDocumentPrivateMedia(BaseViewTestCase):
 
 
 class TestApplicantSupportingDocumentPrivateMedia(BaseViewTestCase):
-    base_view_name = 'invoice-supporting-document'
-    url_name = 'funds:projects:{}'
+    base_view_name = "invoice-supporting-document"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.invoice.project.pk,
-            'invoice_pk': instance.invoice.pk,
-            'file_pk': instance.pk,
+            "pk": instance.invoice.project.pk,
+            "invoice_pk": instance.invoice.pk,
+            "file_pk": instance.pk,
         }
 
     def test_can_access_own(self):
-        supporting_document = SupportingDocumentFactory(invoice__project__user=self.user)
+        supporting_document = SupportingDocumentFactory(
+            invoice__project__user=self.user
+        )
         response = self.get_page(supporting_document)
         self.assertContains(response, supporting_document.document.read())
 
@@ -1007,68 +1136,68 @@ class TestApplicantSupportingDocumentPrivateMedia(BaseViewTestCase):
         self.assertEqual(response.status_code, 403)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestProjectListView(TestCase):
     def test_staff_can_access_project_list_page(self):
         ProjectFactory(status=CONTRACTING)
-        ProjectFactory(status=IN_PROGRESS)
+        ProjectFactory(status=INVOICING_AND_REPORTING)
 
         self.client.force_login(StaffFactory())
 
-        url = reverse('apply:projects:all')
+        url = reverse("apply:projects:all")
 
         response = self.client.get(url, follow=True)
         self.assertEqual(response.status_code, 200)
 
     def test_applicants_cannot_access_project_list_page(self):
         ProjectFactory(status=CONTRACTING)
-        ProjectFactory(status=IN_PROGRESS)
+        ProjectFactory(status=INVOICING_AND_REPORTING)
 
         self.client.force_login(UserFactory())
 
-        url = reverse('apply:projects:all')
+        url = reverse("apply:projects:all")
 
         response = self.client.get(url, follow=True)
         self.assertEqual(response.status_code, 403)
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestProjectOverviewView(TestCase):
     def test_staff_can_access(self):
         ProjectFactory(status=CONTRACTING)
-        ProjectFactory(status=IN_PROGRESS)
+        ProjectFactory(status=INVOICING_AND_REPORTING)
 
         self.client.force_login(StaffFactory())
 
-        url = reverse('apply:projects:overview')
+        url = reverse("apply:projects:overview")
 
         response = self.client.get(url, follow=True)
         self.assertEqual(response.status_code, 200)
 
     def test_applicants_cannot_access(self):
         ProjectFactory(status=CONTRACTING)
-        ProjectFactory(status=IN_PROGRESS)
+        ProjectFactory(status=INVOICING_AND_REPORTING)
 
         self.client.force_login(UserFactory())
 
-        url = reverse('apply:projects:overview')
+        url = reverse("apply:projects:overview")
 
         response = self.client.get(url, follow=True)
         self.assertEqual(response.status_code, 403)
 
 
 class TestStaffSubmitReport(BaseViewTestCase):
-    base_view_name = 'edit'
-    url_name = 'funds:projects:reports:{}'
+    base_view_name = "edit"
+    url_name = "funds:projects:reports:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_get_page_for_inprogress_project(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
         response = self.get_page(report)
         self.assertContains(response, report.project.title)
 
@@ -1082,83 +1211,103 @@ class TestStaffSubmitReport(BaseViewTestCase):
         self.assertEqual(response.status_code, 403)
 
     def test_submit_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
+        response = self.post_page(report, {"public_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.first().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.first().public_content, "Some text")
         self.assertEqual(report.versions.first(), report.current)
         self.assertEqual(report.current.author, self.user)
         self.assertIsNone(report.draft)
 
     def test_cant_submit_report_for_closing_and_complete_project(self):
         report = ReportFactory(project__status=CLOSING)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        response = self.post_page(report, {"public_content": "Some text"})
         self.assertEqual(response.status_code, 403)
 
         report = ReportFactory(project__status=COMPLETE)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        response = self.post_page(report, {"public_content": "Some text"})
         self.assertEqual(response.status_code, 403)
 
     def test_submit_private_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
-        response = self.post_page(report, {'private_content': 'Some text'})
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
+        response = self.post_page(report, {"private_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.first().private_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.first().private_content, "Some text")
         self.assertEqual(report.versions.first(), report.current)
         self.assertEqual(report.current.author, self.user)
         self.assertIsNone(report.draft)
 
     def test_cant_submit_blank_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
         response = self.post_page(report, {})
         report.refresh_from_db()
         self.assertEqual(response.status_code, 200)
         self.assertEqual(report.versions.count(), 0)
 
     def test_save_report_draft(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
-        response = self.post_page(report, {'public_content': 'Some text', 'save': 'Save'})
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
+        response = self.post_page(
+            report, {"public_content": "Some text", "save": "Save"}
+        )
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.first().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.first().public_content, "Some text")
         self.assertEqual(report.versions.first(), report.draft)
         self.assertIsNone(report.current)
 
     def test_save_report_with_draft(self):
-        report = ReportFactory(is_draft=True, project__status=IN_PROGRESS)
+        report = ReportFactory(is_draft=True, project__status=INVOICING_AND_REPORTING)
         self.assertEqual(report.versions.first(), report.draft)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        response = self.post_page(report, {"public_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.last().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.last().public_content, "Some text")
         self.assertEqual(report.versions.last(), report.current)
         self.assertIsNone(report.draft)
 
     def test_edit_submitted_report(self):
-        report = ReportFactory(is_submitted=True, project__status=IN_PROGRESS)
+        report = ReportFactory(
+            is_submitted=True, project__status=INVOICING_AND_REPORTING
+        )
         self.assertEqual(report.versions.first(), report.current)
-        response = self.post_page(report, {'public_content': 'Some text', 'save': ' Save'})
+        response = self.post_page(
+            report, {"public_content": "Some text", "save": " Save"}
+        )
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.last().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.last().public_content, "Some text")
         self.assertEqual(report.versions.last(), report.draft)
         self.assertEqual(report.versions.first(), report.current)
 
     def test_resubmit_submitted_report(self):
         yesterday = timezone.now() - relativedelta(days=1)
-        version = ReportVersionFactory(report__project__status=IN_PROGRESS, submitted=yesterday)
+        version = ReportVersionFactory(
+            report__project__status=INVOICING_AND_REPORTING, submitted=yesterday
+        )
         report = version.report
         report.current = version
         report.submitted = version.submitted
         report.save()
         self.assertEqual(report.submitted, yesterday)
         self.assertEqual(report.versions.first(), report.current)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        response = self.post_page(report, {"public_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.last().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.last().public_content, "Some text")
         self.assertEqual(report.versions.last(), report.current)
         self.assertIsNone(report.draft)
         self.assertEqual(report.submitted.date(), yesterday.date())
@@ -1167,28 +1316,31 @@ class TestStaffSubmitReport(BaseViewTestCase):
     def test_cant_submit_future_report(self):
         submitted_report = ReportFactory(
             end_date=timezone.now() + relativedelta(days=1),
-            is_submitted=True, project__status=IN_PROGRESS,
+            is_submitted=True,
+            project__status=INVOICING_AND_REPORTING,
         )
         future_report = ReportFactory(
             end_date=timezone.now() + relativedelta(days=3),
             project=submitted_report.project,
         )
-        response = self.post_page(future_report, {'public_content': 'Some text'})
+        response = self.post_page(future_report, {"public_content": "Some text"})
         self.assertEqual(response.status_code, 403)
 
 
 class TestApplicantSubmitReport(BaseViewTestCase):
-    base_view_name = 'edit'
-    url_name = 'funds:projects:reports:{}'
+    base_view_name = "edit"
+    url_name = "funds:projects:reports:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_get_own_report_for_inprogress_project(self):
-        report = ReportFactory(project__status=IN_PROGRESS, project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, project__user=self.user
+        )
         response = self.get_page(report)
         self.assertContains(response, report.project.title)
 
@@ -1202,80 +1354,110 @@ class TestApplicantSubmitReport(BaseViewTestCase):
         self.assertEqual(response.status_code, 403)
 
     def test_cant_get_other_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
     def test_submit_own_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, project__user=self.user)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, project__user=self.user
+        )
+        response = self.post_page(report, {"public_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.first().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.first().public_content, "Some text")
         self.assertEqual(report.versions.first(), report.current)
         self.assertEqual(report.current.author, self.user)
 
     def test_submit_private_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, project__user=self.user)
-        response = self.post_page(report, {'private_content': 'Some text'})
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, project__user=self.user
+        )
+        response = self.post_page(report, {"private_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.first().private_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.first().private_content, "Some text")
         self.assertEqual(report.versions.first(), report.current)
         self.assertEqual(report.current.author, self.user)
         self.assertIsNone(report.draft)
 
     def test_cant_submit_blank_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, project__user=self.user
+        )
         response = self.post_page(report, {})
         report.refresh_from_db()
         self.assertEqual(response.status_code, 200)
         self.assertEqual(report.versions.count(), 0)
 
     def test_save_report_draft(self):
-        report = ReportFactory(project__status=IN_PROGRESS, project__user=self.user)
-        response = self.post_page(report, {'public_content': 'Some text', 'save': 'Save'})
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, project__user=self.user
+        )
+        response = self.post_page(
+            report, {"public_content": "Some text", "save": "Save"}
+        )
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.first().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.first().public_content, "Some text")
         self.assertEqual(report.versions.first(), report.draft)
         self.assertIsNone(report.current)
 
     def test_save_report_with_draft(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_draft=True, project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            is_draft=True,
+            project__user=self.user,
+        )
         self.assertEqual(report.versions.first(), report.draft)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        response = self.post_page(report, {"public_content": "Some text"})
         report.refresh_from_db()
-        self.assertRedirects(response, self.absolute_url(report.project.get_absolute_url()))
-        self.assertEqual(report.versions.last().public_content, 'Some text')
+        self.assertRedirects(
+            response, self.absolute_url(report.project.get_absolute_url())
+        )
+        self.assertEqual(report.versions.last().public_content, "Some text")
         self.assertEqual(report.versions.last(), report.current)
         self.assertIsNone(report.draft)
 
     def test_cant_edit_submitted_report(self):
         # :todo: need to check if applicant can edit submitted report or not.
-        report = ReportFactory(project__status=IN_PROGRESS, is_submitted=True, project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            is_submitted=True,
+            project__user=self.user,
+        )
         self.assertEqual(report.versions.first(), report.current)
-        response = self.post_page(report, {'public_content': 'Some text', 'save': ' Save'})
+        response = self.post_page(
+            report, {"public_content": "Some text", "save": " Save"}
+        )
         self.assertEqual(response.status_code, 403)
 
     def test_cant_submit_other_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS)
-        response = self.post_page(report, {'public_content': 'Some text'})
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING)
+        response = self.post_page(report, {"public_content": "Some text"})
         self.assertEqual(response.status_code, 403)
 
 
 class TestStaffReportDetail(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:reports:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:reports:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_can_access_submitted_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_submitted=True)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, is_submitted=True
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 200)
 
@@ -1288,103 +1470,131 @@ class TestStaffReportDetail(BaseViewTestCase):
         self.assertEqual(response.status_code, 200)
 
     def test_cant_access_skipped_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, skipped=True)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING, skipped=True)
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_draft_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_draft=True)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING, is_draft=True)
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_future_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, end_date=timezone.now() + relativedelta(days=1))
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            end_date=timezone.now() + relativedelta(days=1),
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
 
 class TestApplicantReportDetail(BaseViewTestCase):
-    base_view_name = 'detail'
-    url_name = 'funds:projects:reports:{}'
+    base_view_name = "detail"
+    url_name = "funds:projects:reports:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_can_access_own_submitted_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_submitted=True, project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            is_submitted=True,
+            project__user=self.user,
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 200)
 
     def test_cant_access_own_draft_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_draft=True, project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            is_draft=True,
+            project__user=self.user,
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_own_future_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, end_date=timezone.now() + relativedelta(days=1),
-                               project__user=self.user)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            end_date=timezone.now() + relativedelta(days=1),
+            project__user=self.user,
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_other_submitted_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_submitted=True)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, is_submitted=True
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 200)
 
     def test_cant_access_other_draft_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_draft=True)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING, is_draft=True)
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_other_future_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, end_date=timezone.now() + relativedelta(days=1))
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            end_date=timezone.now() + relativedelta(days=1),
+        )
         response = self.get_page(report)
         self.assertEqual(response.status_code, 403)
 
 
 class TestSkipReport(BaseViewTestCase):
-    base_view_name = 'skip'
-    url_name = 'funds:projects:reports:{}'
+    base_view_name = "skip"
+    url_name = "funds:projects:reports:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_can_skip_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, past_due=True)
+        report = ReportFactory(project__status=INVOICING_AND_REPORTING, past_due=True)
         response = self.post_page(report)
         self.assertEqual(response.status_code, 200)
         report.refresh_from_db()
         self.assertTrue(report.skipped)
 
     def test_can_unskip_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, skipped=True, past_due=True)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, skipped=True, past_due=True
+        )
         response = self.post_page(report)
         self.assertEqual(response.status_code, 200)
         report.refresh_from_db()
         self.assertFalse(report.skipped)
 
     def test_cant_skip_current_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, end_date=timezone.now() + relativedelta(days=1))
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING,
+            end_date=timezone.now() + relativedelta(days=1),
+        )
         response = self.post_page(report)
         self.assertEqual(response.status_code, 200)
         report.refresh_from_db()
         self.assertFalse(report.skipped)
 
     def test_cant_skip_submitted_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_submitted=True)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, is_submitted=True
+        )
         response = self.post_page(report, data={})
         self.assertEqual(response.status_code, 200)
         report.refresh_from_db()
         self.assertFalse(report.skipped)
 
     def test_can_skip_draft_report(self):
-        report = ReportFactory(project__status=IN_PROGRESS, is_draft=True, past_due=True)
+        report = ReportFactory(
+            project__status=INVOICING_AND_REPORTING, is_draft=True, past_due=True
+        )
         response = self.post_page(report)
         self.assertEqual(response.status_code, 200)
         report.refresh_from_db()
@@ -1392,52 +1602,56 @@ class TestSkipReport(BaseViewTestCase):
 
 
 class TestStaffProjectDetailDownloadView(BaseViewTestCase):
-    base_view_name = 'download'
-    url_name = 'funds:projects:{}'
+    base_view_name = "download"
+    url_name = "funds:projects:{}"
     user_factory = StaffFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_can_access_pdf(self):
         project = ProjectFactory()
-        response = self.get_page(project, url_kwargs={'export_type': 'pdf'})
+        response = self.get_page(project, url_kwargs={"export_type": "pdf"})
         self.assertEqual(response.status_code, 200)
 
     def test_can_access_docx(self):
         project = ProjectFactory()
-        response = self.get_page(project, url_kwargs={'export_type': 'docx'})
+        response = self.get_page(project, url_kwargs={"export_type": "docx"})
         self.assertEqual(response.status_code, 200)
 
     def test_response_object_is_pdf(self):
         project = ProjectFactory()
-        response = self.get_page(project, url_kwargs={'export_type': 'pdf'})
-        self.assertIn('.pdf', response.headers['content-disposition'].split('filename=')[1])
+        response = self.get_page(project, url_kwargs={"export_type": "pdf"})
+        self.assertIn(
+            ".pdf", response.headers["content-disposition"].split("filename=")[1]
+        )
 
     def test_response_object_is_docx(self):
         project = ProjectFactory()
-        response = self.get_page(project, url_kwargs={'export_type': 'docx'})
-        self.assertIn('.docx', response.headers['content-disposition'].split('filename=')[1])
+        response = self.get_page(project, url_kwargs={"export_type": "docx"})
+        self.assertIn(
+            ".docx", response.headers["content-disposition"].split("filename=")[1]
+        )
 
 
 class ApplicantStaffProjectDetailDownloadView(BaseViewTestCase):
-    base_view_name = 'download'
-    url_name = 'funds:projects:{}'
+    base_view_name = "download"
+    url_name = "funds:projects:{}"
     user_factory = ApplicantFactory
 
     def get_kwargs(self, instance):
         return {
-            'pk': instance.pk,
+            "pk": instance.pk,
         }
 
     def test_cant_access_pdf(self):
         project = ProjectFactory()
-        response = self.get_page(project, url_kwargs={'export_type': 'pdf'})
+        response = self.get_page(project, url_kwargs={"export_type": "pdf"})
         self.assertEqual(response.status_code, 403)
 
     def test_cant_access_docx(self):
         project = ProjectFactory()
-        response = self.get_page(project, url_kwargs={'export_type': 'docx'})
+        response = self.get_page(project, url_kwargs={"export_type": "docx"})
         self.assertEqual(response.status_code, 403)
diff --git a/hypha/apply/projects/urls.py b/hypha/apply/projects/urls.py
index a30caab2f2b244db281b9117a0ac1543f46a4c28..774375ee62fab47a21f22a2e342d91f7af8263ee 100644
--- a/hypha/apply/projects/urls.py
+++ b/hypha/apply/projects/urls.py
@@ -30,55 +30,146 @@ from .views import (
     partial_project_activities,
 )
 
-app_name = 'projects'
+app_name = "projects"
 
 urlpatterns = [
-    path('', ProjectOverviewView.as_view(), name='overview'),
-    path('all/', ProjectListView.as_view(), name='all'),
-    path('invoices/', InvoiceListView.as_view(), name='invoices'),
-
-    path('<int:pk>/', include([
-        path('', ProjectDetailView.as_view(), name='detail'),
-        path('partial/activities/', partial_project_activities, name="partial-activities"),
-        path('edit/', ProjectApprovalFormEditView.as_view(), name="edit"),
-        path('documents/<int:file_pk>/', ProjectPrivateMediaView.as_view(), name="document"),
-        path('category/<str:type>/<int:category_pk>/template/', CategoryTemplatePrivateMediaView.as_view(), name="category_template"),
-        path('contract/<int:file_pk>/', ContractPrivateMediaView.as_view(), name="contract"),
-        path('contract/documents/<int:file_pk>/', ContractDocumentPrivateMediaView.as_view(), name="contract_document"),
-        path('download/<str:export_type>/', ProjectDetailDownloadView.as_view(), name='download'),
-        path('approval/', ProjectDetailApprovalView.as_view(), name='approval'),
-        path('sow/', ProjectSOWView.as_view(), name='sow'),
-        path('sow/download/<str:export_type>/', ProjectSOWDownloadView.as_view(), name='download-sow'),
-        path('invoice/', CreateInvoiceView.as_view(), name='invoice'),
-        path('vendor/', CreateVendorView.as_view(), name='vendor'),
-        path('vendor/<int:vendor_pk>/', VendorDetailView.as_view(), name='vendor-detail'),
-        path('vendor/<int:vendor_pk>/documents/<int:file_pk>/', VendorPrivateMediaView.as_view(), name='vendor-documents'),
-        path('invoices/<int:invoice_pk>/', include([
-            path('', InvoiceView.as_view(), name='invoice-detail'),
-
-            path('edit/', EditInvoiceView.as_view(), name='invoice-edit'),
-            path('delete/', DeleteInvoiceView.as_view(), name='invoice-delete'),
-            path('documents/invoice/', InvoicePrivateMedia.as_view(), name="invoice-document"),
-            path('documents/supporting/<int:file_pk>/', InvoicePrivateMedia.as_view(), name="invoice-supporting-document"),
-        ])),
-    ])),
-
-    path('reports/', include(([
-        path('', ReportListView.as_view(), name='all'),
-        path('<int:pk>/', include([
-            path('', ReportDetailView.as_view(), name='detail'),
-            path('skip/', ReportSkipView.as_view(), name='skip'),
-            path('edit/', ReportUpdateView.as_view(), name='edit'),
-            path('documents/<int:file_pk>/', ReportPrivateMedia.as_view(), name="document"),
-        ])),
-    ], 'reports'))),
-    path('vendor/', include(([
-        path('', ReportListView.as_view(), name='all'),
-        path('<int:pk>/', include([
-            path('', ReportDetailView.as_view(), name='detail'),
-            path('skip/', ReportSkipView.as_view(), name='skip'),
-            path('edit/', ReportUpdateView.as_view(), name='edit'),
-            path('documents/<int:file_pk>/', ReportPrivateMedia.as_view(), name="document"),
-        ])),
-    ], 'reports'))),
+    path("", ProjectOverviewView.as_view(), name="overview"),
+    path("all/", ProjectListView.as_view(), name="all"),
+    path("invoices/", InvoiceListView.as_view(), name="invoices"),
+    path(
+        "<int:pk>/",
+        include(
+            [
+                path("", ProjectDetailView.as_view(), name="detail"),
+                path(
+                    "partial/activities/",
+                    partial_project_activities,
+                    name="partial-activities",
+                ),
+                path("edit/", ProjectApprovalFormEditView.as_view(), name="edit"),
+                path(
+                    "documents/<int:file_pk>/",
+                    ProjectPrivateMediaView.as_view(),
+                    name="document",
+                ),
+                path(
+                    "category/<str:type>/<int:category_pk>/template/",
+                    CategoryTemplatePrivateMediaView.as_view(),
+                    name="category_template",
+                ),
+                path(
+                    "contract/<int:file_pk>/",
+                    ContractPrivateMediaView.as_view(),
+                    name="contract",
+                ),
+                path(
+                    "contract/documents/<int:file_pk>/",
+                    ContractDocumentPrivateMediaView.as_view(),
+                    name="contract_document",
+                ),
+                path(
+                    "download/<str:export_type>/",
+                    ProjectDetailDownloadView.as_view(),
+                    name="download",
+                ),
+                path("approval/", ProjectDetailApprovalView.as_view(), name="approval"),
+                path("sow/", ProjectSOWView.as_view(), name="sow"),
+                path(
+                    "sow/download/<str:export_type>/",
+                    ProjectSOWDownloadView.as_view(),
+                    name="download-sow",
+                ),
+                path("invoice/", CreateInvoiceView.as_view(), name="invoice"),
+                path("vendor/", CreateVendorView.as_view(), name="vendor"),
+                path(
+                    "vendor/<int:vendor_pk>/",
+                    VendorDetailView.as_view(),
+                    name="vendor-detail",
+                ),
+                path(
+                    "vendor/<int:vendor_pk>/documents/<int:file_pk>/",
+                    VendorPrivateMediaView.as_view(),
+                    name="vendor-documents",
+                ),
+                path(
+                    "invoices/<int:invoice_pk>/",
+                    include(
+                        [
+                            path("", InvoiceView.as_view(), name="invoice-detail"),
+                            path(
+                                "edit/", EditInvoiceView.as_view(), name="invoice-edit"
+                            ),
+                            path(
+                                "delete/",
+                                DeleteInvoiceView.as_view(),
+                                name="invoice-delete",
+                            ),
+                            path(
+                                "documents/invoice/",
+                                InvoicePrivateMedia.as_view(),
+                                name="invoice-document",
+                            ),
+                            path(
+                                "documents/supporting/<int:file_pk>/",
+                                InvoicePrivateMedia.as_view(),
+                                name="invoice-supporting-document",
+                            ),
+                        ]
+                    ),
+                ),
+            ]
+        ),
+    ),
+    path(
+        "reports/",
+        include(
+            (
+                [
+                    path("", ReportListView.as_view(), name="all"),
+                    path(
+                        "<int:pk>/",
+                        include(
+                            [
+                                path("", ReportDetailView.as_view(), name="detail"),
+                                path("skip/", ReportSkipView.as_view(), name="skip"),
+                                path("edit/", ReportUpdateView.as_view(), name="edit"),
+                                path(
+                                    "documents/<int:file_pk>/",
+                                    ReportPrivateMedia.as_view(),
+                                    name="document",
+                                ),
+                            ]
+                        ),
+                    ),
+                ],
+                "reports",
+            )
+        ),
+    ),
+    path(
+        "vendor/",
+        include(
+            (
+                [
+                    path("", ReportListView.as_view(), name="all"),
+                    path(
+                        "<int:pk>/",
+                        include(
+                            [
+                                path("", ReportDetailView.as_view(), name="detail"),
+                                path("skip/", ReportSkipView.as_view(), name="skip"),
+                                path("edit/", ReportUpdateView.as_view(), name="edit"),
+                                path(
+                                    "documents/<int:file_pk>/",
+                                    ReportPrivateMedia.as_view(),
+                                    name="document",
+                                ),
+                            ]
+                        ),
+                    ),
+                ],
+                "reports",
+            )
+        ),
+    ),
 ]
diff --git a/hypha/apply/projects/utils.py b/hypha/apply/projects/utils.py
index ed409921a50e77b34d85cf001d5807718473b35f..aab11ecce982351b8a8d95d19e02f7c820fcd069 100644
--- a/hypha/apply/projects/utils.py
+++ b/hypha/apply/projects/utils.py
@@ -1,6 +1,24 @@
 from django.conf import settings
+from django.utils.translation import gettext_lazy as _
 
 from .models import Deliverable, Project
+from .models.payment import (
+    APPROVED_BY_FINANCE_1,
+    APPROVED_BY_FINANCE_2,
+    APPROVED_BY_STAFF,
+    CHANGES_REQUESTED_BY_FINANCE_1,
+    CHANGES_REQUESTED_BY_FINANCE_2,
+    CHANGES_REQUESTED_BY_STAFF,
+    DECLINED,
+    PAID,
+    RESUBMITTED,
+    SUBMITTED,
+)
+from .models.project import (
+    PAF_STATUS_CHOICES,
+    PROJECT_PUBLIC_STATUSES,
+    PROJECT_STATUS_CHOICES,
+)
 
 
 def fetch_and_save_deliverables(project_id):
@@ -9,6 +27,7 @@ def fetch_and_save_deliverables(project_id):
     """
     if settings.INTACCT_ENABLED:
         from hypha.apply.projects.services.sageintacct.utils import fetch_deliverables
+
         project = Project.objects.get(id=project_id)
         program_project_id = project.program_project_id
         deliverables = fetch_deliverables(program_project_id)
@@ -16,11 +35,11 @@ def fetch_and_save_deliverables(project_id):
 
 
 def save_deliverables(project_id, deliverables=None):
-    '''
+    """
     TODO: List of deliverables coming from IntAcct is
     not verified yet from the team. This method may need
     revision when that is done.
-    '''
+    """
     if deliverables is None:
         deliverables = []
     if deliverables:
@@ -28,18 +47,18 @@ def save_deliverables(project_id, deliverables=None):
     project = Project.objects.get(id=project_id)
     new_deliverable_list = []
     for deliverable in deliverables:
-        item_id = deliverable['ITEMID']
-        item_name = deliverable['ITEMNAME']
-        qty_remaining = int(float(deliverable['QTY_REMAINING']))
-        price = deliverable['PRICE']
+        item_id = deliverable["ITEMID"]
+        item_name = deliverable["ITEMNAME"]
+        qty_remaining = int(float(deliverable["QTY_REMAINING"]))
+        price = deliverable["PRICE"]
         extra_information = {
-            'UNIT': deliverable['UNIT'],
-            'DEPARTMENTID': deliverable['DEPARTMENTID'],
-            'PROJECTID': deliverable['PROJECTID'],
-            'LOCATIONID': deliverable['LOCATIONID'],
-            'CLASSID': deliverable['CLASSID'],
-            'BILLABLE': deliverable['BILLABLE'],
-            'CUSTOMERID': deliverable['CUSTOMERID'],
+            "UNIT": deliverable["UNIT"],
+            "DEPARTMENTID": deliverable["DEPARTMENTID"],
+            "PROJECTID": deliverable["PROJECTID"],
+            "LOCATIONID": deliverable["LOCATIONID"],
+            "CLASSID": deliverable["CLASSID"],
+            "BILLABLE": deliverable["BILLABLE"],
+            "CUSTOMERID": deliverable["CUSTOMERID"],
         }
         new_deliverable_list.append(
             Deliverable(
@@ -48,7 +67,7 @@ def save_deliverables(project_id, deliverables=None):
                 available_to_invoice=qty_remaining,
                 unit_price=price,
                 extra_information=extra_information,
-                project=project
+                project=project,
             )
         )
     Deliverable.objects.bulk_create(new_deliverable_list)
@@ -63,13 +82,14 @@ def remove_deliverables_from_project(project_id):
 
 
 def fetch_and_save_project_details(project_id, external_projectid):
-    '''
+    """
     Fetch and save project contract information from enabled payment service.
-    '''
+    """
     if settings.INTACCT_ENABLED:
         from hypha.apply.projects.services.sageintacct.utils import (
             fetch_project_details,
         )
+
         data = fetch_project_details(external_projectid)
         save_project_details(project_id, data)
 
@@ -81,11 +101,46 @@ def save_project_details(project_id, data):
 
 
 def create_invoice(invoice):
-    '''
+    """
     Creates invoice at enabled payment service.
-    '''
+    """
     if settings.INTACCT_ENABLED:
         from hypha.apply.projects.services.sageintacct.utils import (
             create_intacct_invoice,
         )
+
         create_intacct_invoice(invoice)
+
+
+def get_paf_status_display(paf_status):
+    return dict(PAF_STATUS_CHOICES)[paf_status]
+
+
+# Invoices public statuses
+def get_invoice_public_status(invoice_status):
+    if (
+        invoice_status
+        in [SUBMITTED, RESUBMITTED, APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1]
+    ) or (
+        invoice_status in [APPROVED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2]
+        and settings.INVOICE_EXTENDED_WORKFLOW
+    ):
+        return _("Pending Approval")
+    if (invoice_status == APPROVED_BY_FINANCE_1) or (
+        invoice_status == APPROVED_BY_FINANCE_2 and settings.INVOICE_EXTENDED_WORKFLOW
+    ):
+        return _("Approved")
+    if invoice_status == CHANGES_REQUESTED_BY_STAFF:
+        return _("Request for change or more information")
+    if invoice_status == DECLINED:
+        return _("Declined")
+    if invoice_status == PAID:
+        return _("Paid")
+
+
+def get_project_status_display_value(project_status):
+    return dict(PROJECT_STATUS_CHOICES)[project_status]
+
+
+def get_project_public_status(project_status):
+    return dict(PROJECT_PUBLIC_STATUSES)[project_status]
diff --git a/hypha/apply/projects/views/__init__.py b/hypha/apply/projects/views/__init__.py
index e8d953b11ba51a18d1623e9b48a6860af742d77b..256135879c892e9a4db747ce9c47ef6c9d24dad6 100644
--- a/hypha/apply/projects/views/__init__.py
+++ b/hypha/apply/projects/views/__init__.py
@@ -43,43 +43,43 @@ from .report import (
 from .vendor import CreateVendorView, VendorDetailView, VendorPrivateMediaView
 
 __all__ = [
-    'partial_project_activities',
-    'ChangeInvoiceStatusView',
-    'SendForApprovalView',
-    'UploadDocumentView',
-    'RemoveDocumentView',
-    'SelectDocumentView',
-    'UpdateLeadView',
-    'ApproveContractView',
-    'UploadContractView',
-    'ContractDocumentPrivateMediaView',
-    'BaseProjectDetailView',
-    'AdminProjectDetailView',
-    'ApplicantProjectDetailView',
-    'ProjectDetailView',
-    'ProjectPrivateMediaView',
-    'CategoryTemplatePrivateMediaView',
-    'ContractPrivateMediaView',
-    'ProjectDetailApprovalView',
-    'ProjectDetailDownloadView',
-    'ProjectSOWView',
-    'ProjectSOWDownloadView',
-    'ProjectApprovalFormEditView',
-    'ProjectListView',
-    'ProjectOverviewView',
-    'ReportDetailView',
-    'ReportUpdateView',
-    'ReportPrivateMedia',
-    'ReportSkipView',
-    'ReportFrequencyUpdate',
-    'ReportListView',
-    'CreateVendorView',
-    'VendorDetailView',
-    'VendorPrivateMediaView',
-    'CreateInvoiceView',
-    'InvoiceListView',
-    'InvoiceView',
-    'EditInvoiceView',
-    'DeleteInvoiceView',
-    'InvoicePrivateMedia',
+    "partial_project_activities",
+    "ChangeInvoiceStatusView",
+    "SendForApprovalView",
+    "UploadDocumentView",
+    "RemoveDocumentView",
+    "SelectDocumentView",
+    "UpdateLeadView",
+    "ApproveContractView",
+    "UploadContractView",
+    "ContractDocumentPrivateMediaView",
+    "BaseProjectDetailView",
+    "AdminProjectDetailView",
+    "ApplicantProjectDetailView",
+    "ProjectDetailView",
+    "ProjectPrivateMediaView",
+    "CategoryTemplatePrivateMediaView",
+    "ContractPrivateMediaView",
+    "ProjectDetailApprovalView",
+    "ProjectDetailDownloadView",
+    "ProjectSOWView",
+    "ProjectSOWDownloadView",
+    "ProjectApprovalFormEditView",
+    "ProjectListView",
+    "ProjectOverviewView",
+    "ReportDetailView",
+    "ReportUpdateView",
+    "ReportPrivateMedia",
+    "ReportSkipView",
+    "ReportFrequencyUpdate",
+    "ReportListView",
+    "CreateVendorView",
+    "VendorDetailView",
+    "VendorPrivateMediaView",
+    "CreateInvoiceView",
+    "InvoiceListView",
+    "InvoiceView",
+    "EditInvoiceView",
+    "DeleteInvoiceView",
+    "InvoicePrivateMedia",
 ]
diff --git a/hypha/apply/projects/views/payment.py b/hypha/apply/projects/views/payment.py
index ac1c48bcb43574f5e0d9730e11ac8f07d7d1bd8c..1a876dd47aa0ca8cf9fcd5b133efcfc6fb7e7540 100644
--- a/hypha/apply/projects/views/payment.py
+++ b/hypha/apply/projects/views/payment.py
@@ -30,13 +30,13 @@ from ..models.project import PROJECT_ACTION_MESSAGE_TAG, Project
 from ..tables import InvoiceListTable
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class InvoiceAccessMixin(UserPassesTestMixin):
     model = Invoice
 
     def get_object(self):
-        project = get_object_or_404(Project, pk=self.kwargs['pk'])
-        return get_object_or_404(project.invoices.all(), pk=self.kwargs['invoice_pk'])
+        project = get_object_or_404(Project, pk=self.kwargs["pk"])
+        return get_object_or_404(project.invoices.all(), pk=self.kwargs["invoice_pk"])
 
     def test_func(self):
         if self.request.user.is_apply_staff:
@@ -51,17 +51,19 @@ class InvoiceAccessMixin(UserPassesTestMixin):
         return False
 
 
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_required, name="dispatch")
 class ChangeInvoiceStatusView(DelegatedViewMixin, InvoiceAccessMixin, UpdateView):
     form_class = ChangeInvoiceStatusForm
-    context_name = 'change_invoice_status'
+    context_name = "change_invoice_status"
     model = Invoice
 
     def form_valid(self, form):
         response = super().form_valid(form)
-        if form.cleaned_data['comment']:
-            invoice_status_change = _('<p>Invoice status updated to: {status}.</p>').format(status=self.object.status_display)
-            comment = f'<p>{self.object.comment}.</p>'
+        if form.cleaned_data["comment"]:
+            invoice_status_change = _(
+                "<p>Invoice status updated to: {status}.</p>"
+            ).format(status=self.object.get_status_display())
+            comment = f"<p>{self.object.comment}.</p>"
 
             message = invoice_status_change + comment
 
@@ -75,9 +77,13 @@ class ChangeInvoiceStatusView(DelegatedViewMixin, InvoiceAccessMixin, UpdateView
                 related_object=self.object,
             )
 
-        if (self.request.user.is_apply_staff and self.object.status == APPROVED_BY_STAFF) or \
-            (settings.INVOICE_EXTENDED_WORKFLOW and self.request.user.is_finance_level_1 and
-             self.object.status == APPROVED_BY_FINANCE_1):
+        if (
+            self.request.user.is_apply_staff and self.object.status == APPROVED_BY_STAFF
+        ) or (
+            settings.INVOICE_EXTENDED_WORKFLOW
+            and self.request.user.is_finance_level_1
+            and self.object.status == APPROVED_BY_FINANCE_1
+        ):
             messenger(
                 MESSAGES.APPROVE_INVOICE,
                 request=self.request,
@@ -101,8 +107,8 @@ class DeleteInvoiceView(DeleteView):
     model = Invoice
 
     def get_object(self):
-        project = get_object_or_404(Project, pk=self.kwargs['pk'])
-        return get_object_or_404(project.invoices.all(), pk=self.kwargs['invoice_pk'])
+        project = get_object_or_404(Project, pk=self.kwargs["pk"])
+        return get_object_or_404(project.invoices.all(), pk=self.kwargs["invoice_pk"])
 
     def dispatch(self, request, *args, **kwargs):
         self.object = self.get_object()
@@ -130,24 +136,38 @@ class DeleteInvoiceView(DeleteView):
 
 
 class InvoiceAdminView(InvoiceAccessMixin, DelegateableView, DetailView):
-    form_views = [
-        ChangeInvoiceStatusView
-    ]
-    template_name_suffix = '_admin_detail'
+    form_views = [ChangeInvoiceStatusView]
+    template_name_suffix = "_admin_detail"
 
     def get_context_data(self, **kwargs):
         invoice = self.get_object()
         project = invoice.project
         deliverables = project.deliverables.all()
+        invoice_activities = Activity.actions.filter(
+            related_content_type__model="invoice", related_object_id=invoice.id
+        ).visible_to(self.request.user)
         return super().get_context_data(
             **kwargs,
-            deliverables=deliverables
+            deliverables=deliverables,
+            latest_activity=invoice_activities.first(),
+            activities=invoice_activities[1:],
         )
 
 
 class InvoiceApplicantView(InvoiceAccessMixin, DelegateableView, DetailView):
     form_views = []
 
+    def get_context_data(self, **kwargs):
+        invoice = self.get_object()
+        invoice_activities = Activity.actions.filter(
+            related_content_type__model="invoice", related_object_id=invoice.id
+        ).visible_to(self.request.user)
+        return super().get_context_data(
+            **kwargs,
+            latest_activity=invoice_activities.first(),
+            activities=invoice_activities[1:],
+        )
+
 
 class InvoiceView(ViewDispatcher):
     admin_view = InvoiceAdminView
@@ -160,16 +180,18 @@ class CreateInvoiceView(CreateView):
     form_class = CreateInvoiceForm
 
     def dispatch(self, request, *args, **kwargs):
-        self.project = Project.objects.get(pk=kwargs['pk'])
+        self.project = Project.objects.get(pk=kwargs["pk"])
         if not request.user.is_apply_staff and not self.project.user == request.user:
             return redirect(self.project)
         return super().dispatch(request, *args, **kwargs)
 
     def buttons(self):
-        yield ('submit', 'primary', _('Save'))
+        yield ("submit", "primary", _("Save"))
 
     def get_context_data(self, **kwargs):
-        return super().get_context_data(project=self.project, buttons=self.buttons(), **kwargs)
+        return super().get_context_data(
+            project=self.project, buttons=self.buttons(), **kwargs
+        )
 
     def form_valid(self, form):
         form.instance.project = self.project
@@ -177,8 +199,8 @@ class CreateInvoiceView(CreateView):
 
         response = super().form_valid(form)
 
-        if form.cleaned_data['message_for_pm']:
-            invoice_status_change = _('<p>Invoice created.</p>')
+        if form.cleaned_data["message_for_pm"]:
+            invoice_status_change = _("<p>Invoice added.</p>")
 
             message_for_pm = f'<p>{form.cleaned_data["message_for_pm"]}</p>'
 
@@ -201,7 +223,9 @@ class CreateInvoiceView(CreateView):
             source=self.project,
             related=self.object,
         )
-        messages.success(self.request, _("Invoice has been uploaded"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request, _("Invoice added"), extra_tags=PROJECT_ACTION_MESSAGE_TAG
+        )
 
         # Required for django-file-form: delete temporary files for the new files
         # that are uploaded.
@@ -219,9 +243,9 @@ class EditInvoiceView(InvoiceAccessMixin, UpdateView):
         return super().dispatch(request, *args, **kwargs)
 
     def buttons(self):
-        yield ('submit', 'primary', _('Save'))
+        yield ("submit", "primary", _("Save"))
         if self.object.can_user_delete(self.request.user):
-            yield ('delete', 'warning', _('Delete'))
+            yield ("delete", "warning", _("Delete"))
 
     def get_initial(self):
         initial = super().get_initial()
@@ -231,13 +255,19 @@ class EditInvoiceView(InvoiceAccessMixin, UpdateView):
         return initial
 
     def get_context_data(self, **kwargs):
-        return super().get_context_data(buttons=self.buttons(), **kwargs)
+        return super().get_context_data(
+            project=self.object.project, buttons=self.buttons(), **kwargs
+        )
 
     def post(self, request, *args, **kwargs):
         self.object = self.get_object()
         form = self.get_form()
-        if 'delete' in form.data:
-            return redirect('apply:projects:invoice-delete', pk=self.object.project.id, invoice_pk=self.object.id)
+        if "delete" in form.data:
+            return redirect(
+                "apply:projects:invoice-delete",
+                pk=self.object.project.id,
+                invoice_pk=self.object.id,
+            )
         if form.is_valid():
             return self.form_valid(form)
         else:
@@ -250,8 +280,10 @@ class EditInvoiceView(InvoiceAccessMixin, UpdateView):
                 self.object.transition_invoice_to_resubmitted()
                 self.object.save()
 
-            if form.cleaned_data['message_for_pm']:
-                invoice_status_change = _('<p>Invoice status updated to: {status}.</p>').format(status=self.object.status_display)
+            if form.cleaned_data["message_for_pm"]:
+                invoice_status_change = _(
+                    "<p>Invoice status updated to: {status}.</p>"
+                ).format(status=self.object.get_status_display())
                 message_for_pm = f'<p>{form.cleaned_data["message_for_pm"]}</p>'
                 message = invoice_status_change + message_for_pm
 
@@ -279,20 +311,20 @@ class EditInvoiceView(InvoiceAccessMixin, UpdateView):
         return response
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class InvoicePrivateMedia(UserPassesTestMixin, PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        invoice_pk = self.kwargs['invoice_pk']
-        project_pk = self.kwargs['pk']
+        invoice_pk = self.kwargs["invoice_pk"]
+        project_pk = self.kwargs["pk"]
         self.project = get_object_or_404(Project, pk=project_pk)
         self.invoice = get_object_or_404(self.project.invoices.all(), pk=invoice_pk)
 
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
-        file_pk = kwargs.get('file_pk')
+        file_pk = kwargs.get("file_pk")
         if not file_pk:
             return self.invoice.document
 
@@ -312,9 +344,9 @@ class InvoicePrivateMedia(UserPassesTestMixin, PrivateMediaView):
         return False
 
 
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_required, name="dispatch")
 class InvoiceListView(SingleTableMixin, FilterView):
     filterset_class = InvoiceListFilter
     model = Invoice
     table_class = InvoiceListTable
-    template_name = 'application_projects/invoice_list.html'
+    template_name = "application_projects/invoice_list.html"
diff --git a/hypha/apply/projects/views/project.py b/hypha/apply/projects/views/project.py
index df0b3e1e35c1810790ca01728c48312d65e57fea..aa58efdd9705ed6f9e0b3880aa5b95bf6db95494 100644
--- a/hypha/apply/projects/views/project.py
+++ b/hypha/apply/projects/views/project.py
@@ -28,19 +28,20 @@ from django.views.generic import (
     UpdateView,
 )
 from django.views.generic.detail import SingleObjectMixin
+from django_file_form.models import PlaceholderUploadedFile
 from django_filters.views import FilterView
 from django_tables2 import SingleTableMixin
 from docx import Document
 from htmldocx import HtmlToDocx
 from xhtml2pdf import pisa
 
+from hypha.apply.activity.adapters.utils import get_users_for_groups
 from hypha.apply.activity.messaging import MESSAGES, messenger
 from hypha.apply.activity.models import ACTION, ALL, COMMENT, Activity
 from hypha.apply.activity.views import ActivityContextMixin, CommentFormView
 from hypha.apply.stream_forms.models import BaseStreamForm
 from hypha.apply.users.decorators import (
     staff_or_finance_or_contracting_required,
-    staff_or_finance_required,
     staff_required,
 )
 from hypha.apply.utils.models import PDFPageSettings
@@ -72,11 +73,12 @@ from ..models.project import (
     APPROVE,
     CONTRACTING,
     DRAFT,
-    IN_PROGRESS,
+    INTERNAL_APPROVAL,
+    INVOICING_AND_REPORTING,
     PROJECT_ACTION_MESSAGE_TAG,
+    PROJECT_PUBLIC_STATUSES,
     PROJECT_STATUS_CHOICES,
     REQUEST_CHANGE,
-    WAITING_FOR_APPROVAL,
     Contract,
     ContractDocumentCategory,
     ContractPacketFile,
@@ -89,19 +91,20 @@ from ..models.project import (
 from ..models.report import Report
 from ..permissions import has_permission
 from ..tables import InvoiceListTable, ProjectsListTable, ReportListTable
+from ..utils import get_paf_status_display
 from ..views.payment import ChangeInvoiceStatusView
 from .report import ReportFrequencyUpdate, ReportingMixin
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class SendForApprovalView(DelegatedViewMixin, UpdateView):
-    context_name = 'request_approval_form'
+    context_name = "request_approval_form"
     form_class = SetPendingForm
     model = Project
 
     def form_valid(self, form):
-        project = self.kwargs['object']
-        old_stage = project.get_status_display()
+        project = self.kwargs["object"]
+        old_stage = project.status
 
         response = super().form_valid(form)
 
@@ -143,8 +146,8 @@ class SendForApprovalView(DelegatedViewMixin, UpdateView):
                     source=self.object,
                 )
 
-        project.status = WAITING_FOR_APPROVAL
-        project.save(update_fields=['status'])
+        project.status = INTERNAL_APPROVAL
+        project.save(update_fields=["status"])
 
         messenger(
             MESSAGES.PROJECT_TRANSITION,
@@ -154,19 +157,23 @@ class SendForApprovalView(DelegatedViewMixin, UpdateView):
             related=old_stage,
         )
 
-        messages.success(self.request, _("PAF has been submitted for approval"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("PAF has been submitted for approval"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
 
 # PROJECT DOCUMENTS
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class UploadDocumentView(DelegatedViewMixin, CreateView):
-    context_name = 'document_form'
+    context_name = "document_form"
     form_class = UploadDocumentForm
     model = Project
 
     def form_valid(self, form):
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
         form.instance.project = project
         response = super().form_valid(form)
 
@@ -177,59 +184,72 @@ class UploadDocumentView(DelegatedViewMixin, CreateView):
             source=project,
         )
 
-        messages.success(self.request, _("Document has been uploaded"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Document has been uploaded"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
 
         return response
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class RemoveDocumentView(DelegatedViewMixin, FormView):
-    context_name = 'remove_document_form'
+    context_name = "remove_document_form"
     form_class = RemoveDocumentForm
     model = Project
 
     def form_valid(self, form):
         document_id = form.cleaned_data["id"]
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
 
         try:
             project.packet_files.get(pk=document_id).delete()
         except PacketFile.DoesNotExist:
             pass
 
-        messages.success(self.request, _("Document has been removed"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Document has been removed"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return redirect(project)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class RemoveContractDocumentView(DelegatedViewMixin, FormView):
-    context_name = 'remove_contract_document_form'
+    context_name = "remove_contract_document_form"
     form_class = RemoveContractDocumentForm
     model = Project
 
     def dispatch(self, request, *args, **kwargs):
-        if not request.user.is_applicant:
+        if not request.user.is_applicant or request.user != self.get_object().user:
             raise PermissionDenied
         return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
         document_id = form.cleaned_data["id"]
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
 
         try:
             project.contract_packet_files.get(pk=document_id).delete()
         except ContractPacketFile.DoesNotExist:
             pass
 
-        messages.success(self.request, _("Contracting document has been removed"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Contracting document has been removed"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
 
         return redirect(project)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class SelectDocumentView(DelegatedViewMixin, CreateView):
+    # todo: (no role issue) not getting used anywhere
     form_class = SelectDocumentForm
-    context_name = 'select_document_form'
+    context_name = "select_document_form"
     model = PacketFile
 
     @property
@@ -237,7 +257,7 @@ class SelectDocumentView(DelegatedViewMixin, CreateView):
         return bool(self.files)
 
     def dispatch(self, request, *args, **kwargs):
-        self.project = get_object_or_404(Project, pk=self.kwargs['pk'])
+        self.project = get_object_or_404(Project, pk=self.kwargs["pk"])
         return super().dispatch(request, *args, **kwargs)
 
     def form_invalid(self, form):
@@ -263,19 +283,20 @@ class SelectDocumentView(DelegatedViewMixin, CreateView):
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs.pop('user')
-        kwargs.pop('instance')
-        kwargs['existing_files'] = get_files(self.get_parent_object())
+        kwargs.pop("user")
+        kwargs.pop("instance")
+        kwargs["existing_files"] = get_files(self.get_parent_object())
         return kwargs
 
 
 # GENERAL FORM VIEWS
 
-@method_decorator(staff_required, name='dispatch')
+
+@method_decorator(staff_required, name="dispatch")
 class UpdateLeadView(DelegatedViewMixin, UpdateView):
     model = Project
     form_class = UpdateProjectLeadForm
-    context_name = 'lead_form'
+    context_name = "lead_form"
 
     def form_valid(self, form):
         # Fetch the old lead from the database
@@ -289,21 +310,26 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView):
             request=self.request,
             user=self.request.user,
             source=project,
-            related=old_lead or 'Unassigned',
+            related=old_lead or "Unassigned",
         )
 
-        messages.success(self.request, _('Lead has been updated'), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Lead has been updated"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
 
 # CONTRACTS
 
+
 class ContractsMixin:
     def get_context_data(self, **kwargs):
         project = self.get_object()
         contracts = project.contracts.select_related(
-            'approver',
-        ).order_by('-created_at')
+            "approver",
+        ).order_by("-created_at")
 
         latest_contract = contracts.first()
         contract_to_approve = None
@@ -315,37 +341,40 @@ class ContractsMixin:
                 contract_to_approve = latest_contract
 
         context = super().get_context_data(**kwargs)
-        context['contract_to_approve'] = contract_to_approve
-        context['contract_to_sign'] = contract_to_sign
-        context['contracts'] = contracts.approved()
-        context['contract'] = latest_contract
+        context["contract_to_approve"] = contract_to_approve
+        context["contract_to_sign"] = contract_to_sign
+        context["contracts"] = contracts.approved()
+        context["contract"] = latest_contract
         return context
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ApproveContractView(DelegatedViewMixin, UpdateView):
     form_class = ApproveContractForm
     model = Contract
-    context_name = 'approve_contract_form'
+    context_name = "approve_contract_form"
 
     def get_object(self):
         project = self.get_parent_object()
-        latest_contract = project.contracts.order_by('-created_at').first()
+        latest_contract = project.contracts.order_by("-created_at").first()
         if latest_contract and not latest_contract.approver:
             return latest_contract
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['instance'] = self.get_object()
-        kwargs.pop('user')
+        kwargs["instance"] = self.get_object()
+        kwargs.pop("user")
         return kwargs
 
     def dispatch(self, request, *args, **kwargs):
-        self.project = get_object_or_404(Project, pk=self.kwargs['pk'])
+        self.project = get_object_or_404(Project, pk=self.kwargs["pk"])
         return super().dispatch(request, *args, **kwargs)
 
     def form_invalid(self, form):
-        messages.error(self.request, mark_safe(_('Sorry something went wrong') + form.errors.as_ul()))
+        messages.error(
+            self.request,
+            mark_safe(_("Sorry something went wrong") + form.errors.as_ul()),
+        )
         return super().form_invalid(form)
 
     def form_valid(self, form):
@@ -355,7 +384,7 @@ class ApproveContractView(DelegatedViewMixin, UpdateView):
             form.instance.project = self.project
             response = super().form_valid(form)
 
-            old_stage = self.project.get_status_display()
+            old_stage = self.project.status
 
             messenger(
                 MESSAGES.APPROVE_CONTRACT,
@@ -365,8 +394,8 @@ class ApproveContractView(DelegatedViewMixin, UpdateView):
                 related=self.object,
             )
 
-            self.project.status = IN_PROGRESS
-            self.project.save(update_fields=['status'])
+            self.project.status = INVOICING_AND_REPORTING
+            self.project.save(update_fields=["status"])
 
             messenger(
                 MESSAGES.PROJECT_TRANSITION,
@@ -376,48 +405,61 @@ class ApproveContractView(DelegatedViewMixin, UpdateView):
                 related=old_stage,
             )
 
-        messages.success(self.request, _("Contractor documents have been approved."
-                                         " You can receive invoices from applicant now."),
-                         extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _(
+                "Contractor documents have been approved."
+                " You can receive invoices from vendor now."
+            ),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
     def get_success_url(self):
         return self.project.get_absolute_url()
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class UploadContractView(DelegatedViewMixin, CreateView):
-    context_name = 'contract_form'
+    context_name = "contract_form"
     model = Project
     form_class = UploadContractForm
 
     def dispatch(self, request, *args, **kwargs):
-        project = self.kwargs['object']
-        permission, _ = has_permission('contract_upload', request.user, object=project)
+        project = self.kwargs["object"]
+        permission, _ = has_permission("contract_upload", request.user, object=project)
         if permission:
             return super().dispatch(request, *args, **kwargs)
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs.pop('instance')
-        kwargs.pop('user')
+        kwargs.pop("instance")
+        kwargs.pop("user")
         return kwargs
 
     def form_valid(self, form):
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
 
         if project.contracts.exists():
-            form.instance = project.contracts.order_by('created_at').first()
+            form.instance = project.contracts.order_by("created_at").first()
 
         form.instance.project = project
 
         if self.request.user == project.user:
             form.instance.signed_by_applicant = True
             form.instance.uploaded_by_applicant_at = timezone.now()
-            messages.success(self.request, _("Countersigned contract uploaded"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+            messages.success(
+                self.request,
+                _("Countersigned contract uploaded"),
+                extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+            )
         elif self.request.user.is_contracting:
             form.instance.uploaded_by_contractor_at = timezone.now()
-            messages.success(self.request, _("Signed contract uploaded"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+            messages.success(
+                self.request,
+                _("Signed contract uploaded"),
+                extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+            )
 
         response = super().form_valid(form)
 
@@ -433,27 +475,34 @@ class UploadContractView(DelegatedViewMixin, CreateView):
         return response
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class SubmitContractDocumentsView(DelegatedViewMixin, UpdateView):
-    context_name = 'submit_contract_documents_form'
+    context_name = "submit_contract_documents_form"
     model = Project
     form_class = SubmitContractDocumentsForm
 
     def dispatch(self, request, *args, **kwargs):
         project = self.get_object()
-        if list(project.get_missing_contract_document_categories()):
+        if ContractDocumentCategory.objects.filter(
+            ~Q(contract_packet_files__project=project)
+        ).exists():
             raise PermissionDenied
-        contract = project.contracts.order_by('-created_at').first()
-        permission, _ = has_permission('submit_contract_documents', request.user, object=project,
-                                       raise_exception=True, contract=contract)
+        contract = project.contracts.order_by("-created_at").first()
+        permission, _ = has_permission(
+            "submit_contract_documents",
+            request.user,
+            object=project,
+            raise_exception=True,
+            contract=contract,
+        )
         return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
         response = super().form_valid(form)
 
         project.submitted_contract_documents = True
-        project.save(update_fields=['submitted_contract_documents'])
+        project.save(update_fields=["submitted_contract_documents"])
 
         messenger(
             MESSAGES.SUBMIT_CONTRACT_DOCUMENTS,
@@ -462,18 +511,27 @@ class SubmitContractDocumentsView(DelegatedViewMixin, UpdateView):
             source=project,
         )
 
-        messages.success(self.request, _("Contract documents submitted"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Contract documents submitted"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class UploadContractDocumentView(DelegatedViewMixin, CreateView):
     form_class = UploadContractDocumentForm
     model = Project
-    context_name = 'contract_document_form'
+    context_name = "contract_document_form"
+
+    def dispatch(self, request, *args, **kwargs):
+        if request.user != self.get_object().user or not request.user.is_applicant:
+            raise PermissionDenied
+        return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
         form.instance.project = project
         response = super().form_valid(form)
 
@@ -484,33 +542,68 @@ class UploadContractDocumentView(DelegatedViewMixin, CreateView):
             source=project,
         )
 
-        messages.success(self.request, _("Contracting document has been uploaded"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Contracting document has been uploaded"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
 
 # PROJECT VIEW
 
-@method_decorator(login_required, name='dispatch')
+
+@method_decorator(login_required, name="dispatch")
 class ChangePAFStatusView(DelegatedViewMixin, UpdateView):
     form_class = ChangePAFStatusForm
-    context_name = 'change_paf_status'
+    context_name = "change_paf_status"
     model = Project
 
     def dispatch(self, request, *args, **kwargs):
         self.object = self.get_object()
         permission, _ = has_permission(
-            'paf_status_update', self.request.user, object=self.object, raise_exception=True, request=request
+            "paf_status_update",
+            self.request.user,
+            object=self.object,
+            raise_exception=True,
+            request=request,
         )
         return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
         response = super().form_valid(form)
-        paf_approval = self.request.user.paf_approvals.filter(project=self.object, approved=False).first()
-        paf_status = form.cleaned_data.get('paf_status')
-        comment = form.cleaned_data.get('comment', '')
+        project_settings = ProjectSettings.for_request(self.request)
+        paf_approval = self.request.user.paf_approvals.filter(
+            project=self.object, approved=False
+        ).first()
+        if not paf_approval:
+            # get paf approval form for not-assigned case
+            if project_settings.paf_approval_sequential:
+                paf_approval = self.object.paf_approvals.filter(approved=False).first()
+            else:
+                for approval in self.object.paf_approvals.filter(approved=False):
+                    if self.request.user.id in [
+                        role_user.id
+                        for role_user in get_users_for_groups(
+                            list(approval.paf_reviewer_role.user_roles.all()),
+                            exact_match=True,
+                        )
+                    ]:
+                        paf_approval = approval
+                        break
+                else:
+                    # should never be the case but still to avoid 500.
+                    raise PermissionDenied("User don't have PAF approver roles")
 
-        paf_status_update_message = _('<p>{role} has updated PAF status to {paf_status}.</p>').format(
-            role=paf_approval.paf_reviewer_role.label, paf_status=paf_status)
+        paf_status = form.cleaned_data.get("paf_status")
+        comment = form.cleaned_data.get("comment", "")
+
+        paf_status_update_message = _(
+            "<p>{role} has updated PAF status to {paf_status}.</p>"
+        ).format(
+            role=paf_approval.paf_reviewer_role.label,
+            paf_status=get_paf_status_display(paf_status).lower(),
+        )
         Activity.objects.create(
             user=self.request.user,
             type=ACTION,
@@ -522,7 +615,12 @@ class ChangePAFStatusView(DelegatedViewMixin, UpdateView):
 
         if paf_status == REQUEST_CHANGE:
             self.object.status = DRAFT
-            self.object.save(update_fields=['status'])
+            self.object.save(update_fields=["status"])
+            paf_approval.save()
+
+            if not paf_approval.user:
+                paf_approval.user = self.request.user
+                paf_approval.save(update_fields=["user"])
 
             messenger(
                 MESSAGES.REQUEST_PROJECT_CHANGE,
@@ -531,13 +629,16 @@ class ChangePAFStatusView(DelegatedViewMixin, UpdateView):
                 source=self.object,
                 comment=comment,
             )
-            messages.success(self.request, _("PAF status has been updated"),
-                             extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+            messages.success(
+                self.request,
+                _("PAF status has been updated"),
+                extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+            )
         elif paf_status == APPROVE:
             paf_approval.approved = True
             paf_approval.approved_at = timezone.now()
-            paf_approval.save(update_fields=['approved', 'approved_at'])
-            project_settings = ProjectSettings.for_request(self.request)
+            paf_approval.user = self.request.user
+            paf_approval.save(update_fields=["approved", "approved_at", "user"])
             if project_settings.paf_approval_sequential:
                 # notify next approver
                 if self.object.paf_approvals.filter(approved=False).exists():
@@ -555,12 +656,14 @@ class ChangePAFStatusView(DelegatedViewMixin, UpdateView):
                             user=self.request.user,
                             source=self.object,
                         )
-            messages.success(self.request, _("PAF has been approved"),
-                             extra_tags=PROJECT_ACTION_MESSAGE_TAG)
-
-        if form.cleaned_data['comment']:
+            messages.success(
+                self.request,
+                _("PAF has been approved"),
+                extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+            )
 
-            comment = f"<p>{form.cleaned_data['comment']}.</p>"
+        if form.cleaned_data["comment"]:
+            comment = f"<p>\"{form.cleaned_data['comment']}.\"</p>"
 
             message = paf_status_update_message + comment
 
@@ -574,10 +677,10 @@ class ChangePAFStatusView(DelegatedViewMixin, UpdateView):
             )
 
         if self.object.is_approved_by_all_paf_reviewers:
-            old_stage = self.object.get_status_display()
+            old_stage = self.object.status
             self.object.is_locked = True
             self.object.status = CONTRACTING
-            self.object.save(update_fields=['is_locked', 'status'])
+            self.object.save(update_fields=["is_locked", "status"])
 
             messenger(
                 MESSAGES.PROJECT_TRANSITION,
@@ -593,21 +696,24 @@ class ChangeProjectstatusView(DelegatedViewMixin, UpdateView):
     """
     Project status can be updated manually only in 'IN PROGRESS, CLOSING and COMPLETE' state.
     """
+
     form_class = ChangeProjectStatusForm
-    context_name = 'change_project_status'
+    context_name = "change_project_status"
     model = Project
 
     def dispatch(self, request, *args, **kwargs):
-        self.project = get_object_or_404(Project, pk=self.kwargs['pk'])
-        permission, _ = has_permission('project_status_update', request.user, self.project, raise_exception=True)
+        self.project = get_object_or_404(Project, pk=self.kwargs["pk"])
+        permission, _ = has_permission(
+            "project_status_update", request.user, self.project, raise_exception=True
+        )
         return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
-        old_stage = self.project.get_status_display()
+        old_stage = self.project.status
 
         response = super().form_valid(form)
 
-        comment = form.cleaned_data.get('comment', '')
+        comment = form.cleaned_data.get("comment", "")
 
         if comment:
             Activity.objects.create(
@@ -627,29 +733,41 @@ class ChangeProjectstatusView(DelegatedViewMixin, UpdateView):
             related=old_stage,
         )
 
-        messages.success(self.request, _("Project status has been updated"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("Project status has been updated"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class UpdateAssignApproversView(DelegatedViewMixin, UpdateView):
-    context_name = 'assign_approvers_form'
+    context_name = "assign_approvers_form"
     form_class = AssignApproversForm
     model = Project
 
     def dispatch(self, request, *args, **kwargs):
-        self.project = get_object_or_404(Project, pk=self.kwargs['pk'])
-        permission, _ = has_permission('update_paf_assigned_approvers', request.user, self.project,
-                                       raise_exception=True, request=request)
+        self.project = get_object_or_404(Project, pk=self.kwargs["pk"])
+        permission, _ = has_permission(
+            "update_paf_assigned_approvers",
+            request.user,
+            self.project,
+            raise_exception=True,
+            request=request,
+        )
         return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
         from ..forms.project import get_latest_project_paf_approval_via_roles
-        project = self.kwargs['object']
+
+        project = self.kwargs["object"]
 
         response = super().form_valid(form)
 
-        paf_approval = get_latest_project_paf_approval_via_roles(project=project, roles=self.request.user.groups.all())
+        paf_approval = get_latest_project_paf_approval_via_roles(
+            project=project, roles=self.request.user.groups.all()
+        )
 
         if paf_approval.user:
             messenger(
@@ -670,22 +788,32 @@ class UpdateAssignApproversView(DelegatedViewMixin, UpdateView):
 
 
 class UpdatePAFApproversView(DelegatedViewMixin, UpdateView):
-    context_name = 'update_approvers_form'
+    context_name = "update_approvers_form"
     form_class = ApproversForm
     model = Project
 
     def dispatch(self, request, *args, **kwargs):
-        self.project = get_object_or_404(Project, pk=self.kwargs['pk'])
-        permission, _ = has_permission('paf_approvers_update', request.user, self.project, raise_exception=True, request=request)
+        self.project = get_object_or_404(Project, pk=self.kwargs["pk"])
+        permission, _ = has_permission(
+            "paf_approvers_update",
+            request.user,
+            self.project,
+            raise_exception=True,
+            request=request,
+        )
         return super().dispatch(request, *args, **kwargs)
 
     def form_valid(self, form):
-        project = self.kwargs['object']
+        project = self.kwargs["object"]
 
         project_settings = ProjectSettings.for_request(self.request)
         old_approvers = None
         if self.object.paf_approvals.exists():
-            old_approvers = list(project.paf_approvals.filter(approved=False).values_list('user__id', flat=True))
+            old_approvers = list(
+                project.paf_approvals.filter(approved=False).values_list(
+                    "user__id", flat=True
+                )
+            )
 
         response = super().form_valid(form)
 
@@ -741,17 +869,27 @@ class UpdatePAFApproversView(DelegatedViewMixin, UpdateView):
                     source=self.object,
                 )
 
-        messages.success(self.request, _("PAF approvers have been updated"), extra_tags=PROJECT_ACTION_MESSAGE_TAG)
+        messages.success(
+            self.request,
+            _("PAF approvers have been updated"),
+            extra_tags=PROJECT_ACTION_MESSAGE_TAG,
+        )
         return response
 
 
 class BaseProjectDetailView(ReportingMixin, DetailView):
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context['statuses'] = PROJECT_STATUS_CHOICES
-        context['current_status_index'] = [status for status, _ in PROJECT_STATUS_CHOICES].index(self.object.status)
-        context['supporting_documents_configured'] = True if DocumentCategory.objects.count() else False
-        context['contracting_documents_configured'] = True if ContractDocumentCategory.objects.count() else False
+        context["statuses"] = PROJECT_STATUS_CHOICES
+        context["current_status_index"] = [
+            status for status, _ in PROJECT_STATUS_CHOICES
+        ].index(self.object.status)
+        context["supporting_documents_configured"] = (
+            True if DocumentCategory.objects.count() else False
+        )
+        context["contracting_documents_configured"] = (
+            True if ContractDocumentCategory.objects.count() else False
+        )
         return context
 
 
@@ -778,36 +916,53 @@ class AdminProjectDetailView(
         ChangeInvoiceStatusView,
     ]
     model = Project
-    template_name_suffix = '_admin_detail'
+    template_name_suffix = "_admin_detail"
 
     def dispatch(self, *args, **kwargs):
         project = self.get_object()
-        permission, _ = has_permission('project_access', self.request.user, object=project, raise_exception=True)
+        permission, _ = has_permission(
+            "project_access", self.request.user, object=project, raise_exception=True
+        )
         return super().dispatch(*args, **kwargs)
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
+        context["statuses"] = PROJECT_STATUS_CHOICES
+        context["current_status_index"] = [
+            status for status, _ in PROJECT_STATUS_CHOICES
+        ].index(self.object.status)
         project_settings = ProjectSettings.for_request(self.request)
-        context['project_settings'] = project_settings
-        context['paf_approvals'] = PAFApprovals.objects.filter(project=self.object)
-        context['all_document_categories'] = DocumentCategory.objects.all()
-        context['remaining_document_categories'] = DocumentCategory.objects.filter(~Q(packet_files__project=self.object))
-        context['all_contract_document_categories'] = ContractDocumentCategory.objects.all()
-        context['remaining_contract_document_categories'] = ContractDocumentCategory.objects.filter(~Q(contract_packet_files__project=self.object))
-
-        if self.object.is_in_progress and not self.object.report_config.disable_reporting:
+        context["project_settings"] = project_settings
+        context["paf_approvals"] = PAFApprovals.objects.filter(project=self.object)
+        context["all_document_categories"] = DocumentCategory.objects.all()
+        context["remaining_document_categories"] = DocumentCategory.objects.filter(
+            ~Q(packet_files__project=self.object)
+        )
+        context[
+            "all_contract_document_categories"
+        ] = ContractDocumentCategory.objects.all()
+        context[
+            "remaining_contract_document_categories"
+        ] = ContractDocumentCategory.objects.filter(
+            ~Q(contract_packet_files__project=self.object)
+        )
+
+        if (
+            self.object.is_in_progress
+            and not self.object.report_config.disable_reporting
+        ):
             # Current due report can be none for ONE_TIME,
             # In case of ONE_TIME, either reporting is already completed(last_report exists)
             # or there should be a current_due_report.
             if self.object.report_config.current_due_report():
-                context['report_data'] = {
-                    'startDate': self.object.report_config.current_due_report().start_date,
-                    'projectEndDate': self.object.end_date,
+                context["report_data"] = {
+                    "startDate": self.object.report_config.current_due_report().start_date,
+                    "projectEndDate": self.object.end_date,
                 }
             else:
-                context['report_data'] = {
-                    'startDate': self.object.report_config.last_report().start_date,
-                    'projectEndDate': self.object.end_date,
+                context["report_data"] = {
+                    "startDate": self.object.report_config.last_report().start_date,
+                    "projectEndDate": self.object.end_date,
                 }
         return context
 
@@ -829,17 +984,29 @@ class ApplicantProjectDetailView(
     ]
 
     model = Project
-    template_name_suffix = '_detail'
+    template_name_suffix = "_detail"
 
     def dispatch(self, request, *args, **kwargs):
         project = self.get_object()
-        permission, _ = has_permission('project_access', request.user, object=project, raise_exception=True)
+        permission, _ = has_permission(
+            "project_access", request.user, object=project, raise_exception=True
+        )
         return super().dispatch(request, *args, **kwargs)
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context['all_contract_document_categories'] = ContractDocumentCategory.objects.all()
-        context['remaining_contract_document_categories'] = ContractDocumentCategory.objects.filter(~Q(contract_packet_files__project=self.object))
+        context["statuses"] = PROJECT_PUBLIC_STATUSES
+        context["current_status_index"] = [
+            status for status, _ in PROJECT_PUBLIC_STATUSES
+        ].index(self.object.status)
+        context[
+            "all_contract_document_categories"
+        ] = ContractDocumentCategory.objects.all()
+        context[
+            "remaining_contract_document_categories"
+        ] = ContractDocumentCategory.objects.filter(
+            ~Q(contract_packet_files__project=self.object)
+        )
         return context
 
 
@@ -850,17 +1017,17 @@ class ProjectDetailView(ViewDispatcher):
     applicant_view = ApplicantProjectDetailView
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ProjectPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        project_pk = self.kwargs['pk']
+        project_pk = self.kwargs["pk"]
         self.project = get_object_or_404(Project, pk=project_pk)
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
-        document = PacketFile.objects.get(pk=kwargs['file_pk'])
+        document = PacketFile.objects.get(pk=kwargs["file_pk"])
         if document.project != self.project:
             raise Http404
         return document.document
@@ -872,28 +1039,35 @@ class ProjectPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
         if self.request.user == self.project.user:
             return True
 
-        if self.request.user.id in self.project.paf_approvals.filter(approved=False).values_list('user__id', flat=True):
+        if self.request.user.id in self.project.paf_approvals.filter(
+            approved=False
+        ).values_list("user__id", flat=True):
             return True
 
         return False
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class CategoryTemplatePrivateMediaView(PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        project_pk = self.kwargs['pk']
+        project_pk = self.kwargs["pk"]
         self.project = get_object_or_404(Project, pk=project_pk)
-        self.category_type = kwargs['type']
-        permission, _ = has_permission('project_access', self.request.user, object=self.project, raise_exception=True)
+        self.category_type = kwargs["type"]
+        permission, _ = has_permission(
+            "project_access",
+            self.request.user,
+            object=self.project,
+            raise_exception=True,
+        )
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
         if self.category_type == "project_document":
-            category = DocumentCategory.objects.get(pk=kwargs['category_pk'])
+            category = DocumentCategory.objects.get(pk=kwargs["category_pk"])
         elif self.category_type == "contract_document":
-            category = ContractDocumentCategory.objects.get(pk=kwargs['category_pk'])
+            category = ContractDocumentCategory.objects.get(pk=kwargs["category_pk"])
         else:
             raise Http404
         if not category.template:
@@ -901,17 +1075,17 @@ class CategoryTemplatePrivateMediaView(PrivateMediaView):
         return category.template
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ContractPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        project_pk = self.kwargs['pk']
+        project_pk = self.kwargs["pk"]
         self.project = get_object_or_404(Project, pk=project_pk)
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
-        document = Contract.objects.get(pk=kwargs['file_pk'])
+        document = Contract.objects.get(pk=kwargs["file_pk"])
         if document.project != self.project:
             raise Http404
         return document.file
@@ -926,17 +1100,17 @@ class ContractPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
         return False
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ContractDocumentPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        project_pk = self.kwargs['pk']
+        project_pk = self.kwargs["pk"]
         self.project = get_object_or_404(Project, pk=project_pk)
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
-        document = ContractPacketFile.objects.get(pk=kwargs['file_pk'])
+        document = ContractPacketFile.objects.get(pk=kwargs["file_pk"])
         if document.project != self.project:
             raise Http404
         return document.document
@@ -953,71 +1127,71 @@ class ContractDocumentPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
 
 # PROJECT APPROVAL FORM VIEWS
 
-@method_decorator(staff_or_finance_or_contracting_required, name='dispatch')
+
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectDetailApprovalView(DelegateableView, DetailView):
-    form_views = [
-        ChangePAFStatusView
-    ]
+    form_views = [ChangePAFStatusView]
     model = Project
-    template_name_suffix = '_approval_detail'
+    template_name_suffix = "_approval_detail"
 
 
-@method_decorator(staff_or_finance_or_contracting_required, name='dispatch')
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectSOWView(DetailView):
     model = Project
-    template_name_suffix = '_sow_detail'
+    template_name_suffix = "_sow_detail"
 
 
-@method_decorator(staff_or_finance_or_contracting_required, name='dispatch')
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectSOWDownloadView(SingleObjectMixin, View):
     model = Project
 
     def get(self, request, *args, **kwargs):
-        export_type = kwargs.get('export_type', 'pdf')
+        export_type = kwargs.get("export_type", "pdf")
         self.object = self.get_object()
         context = {}
-        context['sow_data'] = self.get_sow_data_with_field(self.object)
-        context['org_name'] = settings.ORG_LONG_NAME
-        context['title'] = self.object.title
-        context['project_link'] = self.request.build_absolute_uri(
-            reverse('apply:projects:detail', kwargs={'pk': self.object.id})
+        context["sow_data"] = self.get_sow_data_with_field(self.object)
+        context["org_name"] = settings.ORG_LONG_NAME
+        context["title"] = self.object.title
+        context["project_link"] = self.request.build_absolute_uri(
+            reverse("apply:projects:detail", kwargs={"pk": self.object.id})
         )
-        template_path = 'application_projects/sow_export.html'
+        template_path = "application_projects/sow_export.html"
 
-        if export_type == 'pdf':
+        if export_type == "pdf":
             pdf_page_settings = PDFPageSettings.for_request(request)
 
-            context['show_footer'] = True
-            context['export_date'] = datetime.date.today().strftime("%b %d, %Y")
-            context['export_user'] = request.user
-            context['pagesize'] = pdf_page_settings.download_page_size
+            context["show_footer"] = True
+            context["export_date"] = datetime.date.today().strftime("%b %d, %Y")
+            context["export_user"] = request.user
+            context["pagesize"] = pdf_page_settings.download_page_size
 
             return self.render_as_pdf(
                 context=context,
                 template=get_template(template_path),
-                filename=self.get_slugified_file_name(export_type)
+                filename=self.get_slugified_file_name(export_type),
             )
-        elif export_type == 'docx':
-            context['show_footer'] = False
+        elif export_type == "docx":
+            context["show_footer"] = False
 
             return self.render_as_docx(
                 context=context,
                 template=get_template(template_path),
-                filename=self.get_slugified_file_name(export_type)
+                filename=self.get_slugified_file_name(export_type),
             )
         else:
             raise Http404(f"{export_type} type not supported at the moment")
 
     def render_as_pdf(self, context, template, filename):
         html = template.render(context)
-        response = HttpResponse(content_type='application/pdf')
-        response['Content-Disposition'] = f'attachment; filename={filename}'
+        response = HttpResponse(content_type="application/pdf")
+        response["Content-Disposition"] = f"attachment; filename={filename}"
 
         pisa_status = pisa.CreatePDF(
-            html, dest=response, encoding='utf-8', raise_exception=True)
+            html, dest=response, encoding="utf-8", raise_exception=True
+        )
         if pisa_status.err:
             # :todo: needs to handle it in a better way
-            raise Http404('PDF type not supported at the moment')
+            raise Http404("PDF type not supported at the moment")
         return response
 
     def render_as_docx(self, context, template, filename):
@@ -1029,8 +1203,8 @@ class ProjectSOWDownloadView(SingleObjectMixin, View):
         new_parser.add_html_to_document(html, document)
         document.save(buf)
 
-        response = HttpResponse(buf.getvalue(), content_type='application/docx')
-        response['Content-Disposition'] = f'attachment; filename={filename}'
+        response = HttpResponse(buf.getvalue(), content_type="application/docx")
+        response["Content-Disposition"] = f"attachment; filename={filename}"
         return response
 
     def get_slugified_file_name(self, export_type):
@@ -1041,57 +1215,65 @@ class ProjectSOWDownloadView(SingleObjectMixin, View):
         if project.submission.page.specific.sow_forms.exists() and project.sow:
             form_data_dict = project.sow.form_data
             for field in project.sow.form_fields.raw_data:
-                if field['id'] in form_data_dict.keys():
-                    if isinstance(field['value'], dict) and 'field_label' in field['value']:
-                        data_dict[field['value']['field_label']] = form_data_dict[field['id']]
+                if field.get("type", None) in ["file", "multi_file"]:
+                    continue
+                if field["id"] in form_data_dict.keys():
+                    if (
+                        isinstance(field["value"], dict)
+                        and "field_label" in field["value"]
+                    ):
+                        data_dict[field["value"]["field_label"]] = form_data_dict[
+                            field["id"]
+                        ]
 
         return data_dict
 
 
-@method_decorator(staff_or_finance_or_contracting_required, name='dispatch')
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectDetailDownloadView(SingleObjectMixin, View):
     model = Project
 
     def get(self, request, *args, **kwargs):
-        export_type = kwargs.get('export_type', None)
+        export_type = kwargs.get("export_type", None)
         self.object = self.get_object()
         context = self.get_paf_download_context()
-        template_path = 'application_projects/paf_export.html'
+        template_path = "application_projects/paf_export.html"
 
-        if export_type == 'pdf':
+        if export_type == "pdf":
             pdf_page_settings = PDFPageSettings.for_request(request)
 
-            context['show_footer'] = True
-            context['export_date'] = datetime.date.today().strftime("%b %d, %Y")
-            context['export_user'] = request.user
-            context['pagesize'] = pdf_page_settings.download_page_size
+            context["show_footer"] = True
+            context["export_date"] = datetime.date.today().strftime("%b %d, %Y")
+            context["export_user"] = request.user
+            context["pagesize"] = pdf_page_settings.download_page_size
 
             return self.render_as_pdf(
                 context=context,
                 template=get_template(template_path),
-                filename=self.get_slugified_file_name(export_type)
+                filename=self.get_slugified_file_name(export_type),
             )
-        elif export_type == 'docx':
-            context['show_footer'] = False
+        elif export_type == "docx":
+            context["show_footer"] = False
 
             return self.render_as_docx(
                 context=context,
                 template=get_template(template_path),
-                filename=self.get_slugified_file_name(export_type)
+                filename=self.get_slugified_file_name(export_type),
             )
         else:
             raise Http404(f"{export_type} type not supported at the moment")
 
     def render_as_pdf(self, context, template, filename):
         html = template.render(context)
-        response = HttpResponse(content_type='application/pdf')
-        response['Content-Disposition'] = f'attachment; filename={filename}'
+        response = HttpResponse(content_type="application/pdf")
+        response["Content-Disposition"] = f"attachment; filename={filename}"
 
         pisa_status = pisa.CreatePDF(
-            html, dest=response, encoding='utf-8', raise_exception=True)
+            html, dest=response, encoding="utf-8", raise_exception=True
+        )
         if pisa_status.err:
             # :todo: needs to handle it in a better way
-            raise Http404('PDF type not supported at the moment')
+            raise Http404("PDF type not supported at the moment")
         return response
 
     def render_as_docx(self, context, template, filename):
@@ -1103,8 +1285,8 @@ class ProjectDetailDownloadView(SingleObjectMixin, View):
         new_parser.add_html_to_document(html, document)
         document.save(buf)
 
-        response = HttpResponse(buf.getvalue(), content_type='application/docx')
-        response['Content-Disposition'] = f'attachment; filename={filename}'
+        response = HttpResponse(buf.getvalue(), content_type="application/docx")
+        response["Content-Disposition"] = f"attachment; filename={filename}"
         return response
 
     def get_slugified_file_name(self, export_type):
@@ -1112,34 +1294,39 @@ class ProjectDetailDownloadView(SingleObjectMixin, View):
 
     def get_paf_download_context(self):
         context = {}
-        context['id'] = self.object.id
-        context['title'] = self.object.title
-        context['project_link'] = self.request.build_absolute_uri(
-            reverse('apply:projects:detail', kwargs={'pk': self.object.id})
+        context["id"] = self.object.id
+        context["title"] = self.object.title
+        context["project_link"] = self.request.build_absolute_uri(
+            reverse("apply:projects:detail", kwargs={"pk": self.object.id})
+        )
+        context["contractor_name"] = (
+            self.object.vendor.contractor_name if self.object.vendor else None
         )
-        context['proposed_start_date'] = self.object.proposed_start
-        context['proposed_end_date'] = self.object.proposed_end
-        context['contractor_name'] = self.object.vendor.contractor_name if self.object.vendor else None
-        context['total_amount'] = self.object.value
-
-        context['approvals'] = self.object.paf_approvals.all()
-        context['paf_data'] = self.get_paf_data_with_field(self.object)
-        context['sow_data'] = self.get_sow_data_with_field(self.object)
-        context['submission'] = self.object.submission
-        context['submission_link'] = self.request.build_absolute_uri(
-            reverse('apply:submissions:detail', kwargs={'pk': self.object.submission.id})
+
+        context["approvals"] = self.object.paf_approvals.all()
+        context["paf_data"] = self.get_paf_data_with_field(self.object)
+        context["sow_data"] = self.get_sow_data_with_field(self.object)
+        context["submission"] = self.object.submission
+        context["submission_link"] = self.request.build_absolute_uri(
+            reverse(
+                "apply:submissions:detail", kwargs={"pk": self.object.submission.id}
+            )
         )
-        context['supporting_documents'] = self.get_supporting_documents(self.object)
-        context['org_name'] = settings.ORG_LONG_NAME
+        context["supporting_documents"] = self.get_supporting_documents(self.object)
+        context["org_name"] = settings.ORG_LONG_NAME
         return context
 
     def get_paf_data_with_field(self, project):
         data_dict = {}
         form_data_dict = project.form_data
         for field in project.form_fields.raw_data:
-            if field['id'] in form_data_dict.keys():
-                if isinstance(field['value'], dict) and 'field_label' in field['value']:
-                    data_dict[field['value']['field_label']] = form_data_dict[field['id']]
+            if field.get("type", None) in ["file", "multi_file"]:
+                continue
+            if field["id"] in form_data_dict.keys():
+                if isinstance(field["value"], dict) and "field_label" in field["value"]:
+                    data_dict[field["value"]["field_label"]] = form_data_dict[
+                        field["id"]
+                    ]
 
         return data_dict
 
@@ -1148,9 +1335,16 @@ class ProjectDetailDownloadView(SingleObjectMixin, View):
         if project.submission.page.specific.sow_forms.exists() and project.sow:
             form_data_dict = project.sow.form_data
             for field in project.sow.form_fields.raw_data:
-                if field['id'] in form_data_dict.keys():
-                    if isinstance(field['value'], dict) and 'field_label' in field['value']:
-                        data_dict[field['value']['field_label']] = form_data_dict[field['id']]
+                if field.get("type", None) in ["file", "multi_file"]:
+                    continue
+                if field["id"] in form_data_dict.keys():
+                    if (
+                        isinstance(field["value"], dict)
+                        and "field_label" in field["value"]
+                    ):
+                        data_dict[field["value"]["field_label"]] = form_data_dict[
+                            field["id"]
+                        ]
 
         return data_dict
 
@@ -1158,45 +1352,58 @@ class ProjectDetailDownloadView(SingleObjectMixin, View):
         documents_dict = {}
         for packet_file in project.packet_files.all():
             documents_dict[packet_file.title] = self.request.build_absolute_uri(
-                reverse('apply:projects:document', kwargs={'pk': project.id, 'file_pk': packet_file.id})
+                reverse(
+                    "apply:projects:document",
+                    kwargs={"pk": project.id, "file_pk": packet_file.id},
+                )
             )
         return documents_dict
 
 
-@method_decorator(staff_or_finance_or_contracting_required, name='dispatch')
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectApprovalFormEditView(BaseStreamForm, UpdateView):
     model = Project
-    template_name = 'application_projects/project_approval_form.html'
+    template_name = "application_projects/project_approval_form.html"
     # Remember to assign paf_form first and then sow_form, else get_defined_fields method may provide unexpected results
     paf_form = None
     sow_form = None
 
     def buttons(self):
-        yield ('submit', 'primary', _('Submit'))
+        yield ("submit", "primary", _("Save"))
 
     def dispatch(self, request, *args, **kwargs):
         self.object = self.get_object()
         if not self.object.editable_by(request.user):
-            messages.info(self.request, _('You are not allowed to edit the project at this time'))
+            messages.info(
+                self.request, _("You are not allowed to edit the project at this time")
+            )
             return redirect(self.object)
         return super().dispatch(request, *args, **kwargs)
 
     @cached_property
     def approval_form(self):
         # fetching from the fund directly instead of going through round
-        approval_form = self.object.submission.page.specific.approval_forms.first()  # picking up the first one
+        approval_form = (
+            self.object.submission.page.specific.approval_forms.first()
+        )  # picking up the first one
 
         return approval_form
 
     @cached_property
     def approval_sow_form(self):
         # fetching from the fund directly instead of going through round
-        approval_sow_form = self.object.submission.page.specific.sow_forms.first()  # picking up the first one
+        approval_sow_form = (
+            self.object.submission.page.specific.sow_forms.first()
+        )  # picking up the first one
 
         return approval_sow_form
 
-    def get_form_class(self, form_class,  draft=False, form_data=None, user=None):
-        return type('WagtailStreamForm', (form_class,), self.get_form_fields(draft, form_data, user))
+    def get_form_class(self, form_class, draft=False, form_data=None, user=None):
+        return type(
+            "WagtailStreamForm",
+            (form_class,),
+            self.get_form_fields(draft, form_data, user),
+        )
 
     def get_paf_form(self, form_class=None):
         if form_class is None:
@@ -1212,6 +1419,14 @@ class ProjectApprovalFormEditView(BaseStreamForm, UpdateView):
         self.paf_form = self.get_paf_form()
         if self.approval_sow_form:
             self.sow_form = self.get_sow_form()
+
+        submission_attachments = []
+        for _field, files in self.object.submission.extract_files().items():
+            if isinstance(files, list):
+                submission_attachments.extend(files)
+            else:
+                submission_attachments.append(files)
+
         return {
             "title": self.object.title,
             "buttons": self.buttons(),
@@ -1220,7 +1435,8 @@ class ProjectApprovalFormEditView(BaseStreamForm, UpdateView):
             "paf_form": self.paf_form,
             "sow_form": self.sow_form,
             "object": self.object,
-            **kwargs
+            "submissions_attachments": submission_attachments,
+            **kwargs,
         }
 
     def get_defined_fields(self):
@@ -1239,21 +1455,44 @@ class ProjectApprovalFormEditView(BaseStreamForm, UpdateView):
         else:
             fields = {}
 
-        kwargs['extra_fields'] = fields
-        kwargs['initial'].update(self.object.raw_data)
+        kwargs["extra_fields"] = fields
+        initial = self.object.raw_data
+        for field_id in self.object.file_field_ids:
+            initial.pop(field_id + "-uploads", False)
+            initial[field_id] = self.get_placeholder_file(
+                self.object.raw_data.get(field_id)
+            )
+        kwargs["initial"].update(initial)
         return kwargs
 
+    def get_placeholder_file(self, initial_file):
+        if not isinstance(initial_file, list):
+            return PlaceholderUploadedFile(
+                initial_file.filename, size=initial_file.size, file_id=initial_file.name
+            )
+        return [
+            PlaceholderUploadedFile(f.filename, size=f.size, file_id=f.name)
+            for f in initial_file
+        ]
+
     def get_sow_form_kwargs(self):
         kwargs = super().get_form_kwargs()
         if self.approval_sow_form:
             fields = self.approval_sow_form.form.get_form_fields()
 
-            kwargs['extra_fields'] = fields
+            kwargs["extra_fields"] = fields
             try:
                 sow_instance = self.object.sow
-                kwargs['initial'].update({'project': self.object, **sow_instance.raw_data})
+                initial = sow_instance.raw_data
+                for field_id in sow_instance.file_field_ids:
+                    initial.pop(field_id + "-uploads", False)
+                    initial[field_id] = self.get_placeholder_file(
+                        sow_instance.raw_data.get(field_id)
+                    )
+                initial["project"] = self.object
+                kwargs["initial"].update(initial)
             except ObjectDoesNotExist:
-                kwargs['initial'].update({'project': self.object})
+                kwargs["initial"].update({"project": self.object})
         return kwargs
 
     def post(self, request, *args, **kwargs):
@@ -1278,6 +1517,8 @@ class ProjectApprovalFormEditView(BaseStreamForm, UpdateView):
 
                 self.paf_form.save(paf_form_fields=paf_form_fields)
                 self.sow_form.save(sow_form_fields=sow_form_fields, project=self.object)
+                self.paf_form.delete_temporary_files()
+                self.sow_form.delete_temporary_files()
                 return HttpResponseRedirect(self.get_success_url())
             else:
                 if not self.paf_form.is_valid():
@@ -1291,73 +1532,94 @@ class ProjectApprovalFormEditView(BaseStreamForm, UpdateView):
                 except AttributeError:
                     paf_form_fields = []
                 self.paf_form.save(paf_form_fields=paf_form_fields)
+                self.paf_form.delete_temporary_files()
                 return HttpResponseRedirect(self.get_success_url())
             else:
                 return self.form_invalid(self.paf_form)
 
 
-
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectListView(SingleTableMixin, FilterView):
     filterset_class = ProjectListFilter
     queryset = Project.objects.for_table()
     table_class = ProjectsListTable
-    template_name = 'application_projects/project_list.html'
+    template_name = "application_projects/project_list.html"
 
 
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_or_contracting_required, name="dispatch")
 class ProjectOverviewView(TemplateView):
-    template_name = 'application_projects/overview.html'
+    template_name = "application_projects/overview.html"
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context['projects'] = self.get_projects(self.request)
-        context['invoices'] = self.get_invoices(self.request)
-        context['reports'] = self.get_reports(self.request)
-        context['status_counts'] = self.get_status_counts()
+        context["projects"] = self.get_projects(self.request)
+        context["invoices"] = self.get_invoices(self.request)
+        context["reports"] = self.get_reports(self.request)
+        context["status_counts"] = self.get_status_counts()
         return context
 
     def get_reports(self, request):
+        if request.user.is_contracting:
+            return {
+                "filterset": None,
+                "table": None,
+                "url": None,
+            }
         reports = Report.objects.for_table().submitted()[:10]
         return {
-            'filterset': ReportListFilter(request.GET or None, request=request, queryset=reports),
-            'table': ReportListTable(reports, order_by=()),
-            'url': reverse('apply:projects:reports:all'),
+            "filterset": ReportListFilter(
+                request.GET or None, request=request, queryset=reports
+            ),
+            "table": ReportListTable(reports, order_by=()),
+            "url": reverse("apply:projects:reports:all"),
         }
 
     def get_projects(self, request):
         projects = Project.objects.for_table()[:10]
 
         return {
-            'filterset': ProjectListFilter(request.GET or None, request=request, queryset=projects),
-            'table': ProjectsListTable(projects, order_by=()),
-            'url': reverse('apply:projects:all'),
+            "filterset": ProjectListFilter(
+                request.GET or None, request=request, queryset=projects
+            ),
+            "table": ProjectsListTable(projects, order_by=()),
+            "url": reverse("apply:projects:all"),
         }
 
     def get_invoices(self, request):
-        invoices = Invoice.objects.order_by('-requested_at')[:10]
+        if request.user.is_contracting:
+            return {
+                "filterset": None,
+                "table": None,
+                "url": None,
+            }
+        invoices = Invoice.objects.order_by("-requested_at")[:10]
 
         return {
-            'filterset': InvoiceListFilter(request.GET or None, request=request, queryset=invoices),
-            'table': InvoiceListTable(invoices, order_by=()),
-            'url': reverse('apply:projects:invoices'),
+            "filterset": InvoiceListFilter(
+                request.GET or None, request=request, queryset=invoices
+            ),
+            "table": InvoiceListTable(invoices, order_by=()),
+            "url": reverse("apply:projects:invoices"),
         }
 
     def get_status_counts(self):
         status_counts = dict(
-            Project.objects.all().values('status').annotate(
-                count=Count('status'),
-            ).values_list(
-                'status',
-                'count',
+            Project.objects.all()
+            .values("status")
+            .annotate(
+                count=Count("status"),
+            )
+            .values_list(
+                "status",
+                "count",
             )
         )
 
         return {
             key: {
-                'name': display,
-                'count': status_counts.get(key, 0),
-                'url': reverse_lazy("funds:projects:all") + '?project_status=' + key,
+                "name": display,
+                "count": status_counts.get(key, 0),
+                "url": reverse_lazy("funds:projects:all") + "?project_status=" + key,
             }
             for key, display in PROJECT_STATUS_CHOICES
         }
diff --git a/hypha/apply/projects/views/project_partials.py b/hypha/apply/projects/views/project_partials.py
index 72e24dc8c72a22b0421e48e352d6beb126fb9bb8..142803b029f9b7bddaff788a633bcfc4e6b3652b 100644
--- a/hypha/apply/projects/views/project_partials.py
+++ b/hypha/apply/projects/views/project_partials.py
@@ -7,13 +7,13 @@ from hypha.apply.activity.services import (
 )
 
 from ..models.project import Project
+from ..permissions import has_permission
 
 
 @login_required
 @require_GET
 def partial_project_activities(request, pk):
     project = get_object_or_404(Project, pk=pk)
-    ctx = {
-        'actions': get_related_actions_for_user(project, request.user)
-    }
-    return render(request, 'activity/include/action_list.html', ctx)
+    has_permission("project_access", request.user, object=project, raise_exception=True)
+    ctx = {"actions": get_related_actions_for_user(project, request.user)}
+    return render(request, "activity/include/action_list.html", ctx)
diff --git a/hypha/apply/projects/views/report.py b/hypha/apply/projects/views/report.py
index b758d6312a399a2c7e0bc4089993d01eb084a342..f34341b1eedb577bdfba3b4d2f71727f2f341f3b 100644
--- a/hypha/apply/projects/views/report.py
+++ b/hypha/apply/projects/views/report.py
@@ -24,13 +24,13 @@ class ReportingMixin:
     def dispatch(self, *args, **kwargs):
         project = self.get_object()
         if project.is_in_progress:
-            if not hasattr(project, 'report_config'):
+            if not hasattr(project, "report_config"):
                 ReportConfig.objects.create(project=project)
 
         return super().dispatch(*args, **kwargs)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReportAccessMixin(UserPassesTestMixin):
     model = Report
 
@@ -47,24 +47,28 @@ class ReportAccessMixin(UserPassesTestMixin):
         return False
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReportDetailView(DetailView):
     model = Report
 
     def dispatch(self, *args, **kwargs):
         report = self.get_object()
-        permission, _ = has_permission('report_view', self.request.user, object=report, raise_exception=True)
+        permission, _ = has_permission(
+            "report_view", self.request.user, object=report, raise_exception=True
+        )
         return super().dispatch(*args, **kwargs)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReportUpdateView(UpdateView):
     form_class = ReportEditForm
     model = Report
 
     def dispatch(self, *args, **kwargs):
         report = self.get_object()
-        permission, _ = has_permission('report_update', self.request.user, object=report, raise_exception=True)
+        permission, _ = has_permission(
+            "report_update", self.request.user, object=report, raise_exception=True
+        )
         return super().dispatch(*args, **kwargs)
 
     def get_initial(self):
@@ -75,16 +79,16 @@ class ReportUpdateView(UpdateView):
 
         if current:
             return {
-                'public_content': current.public_content,
-                'private_content': current.private_content,
-                'file_list': current.files.all(),
+                "public_content": current.public_content,
+                "private_content": current.private_content,
+                "file_list": current.files.all(),
             }
 
         return {}
 
     def get_form_kwargs(self):
         return {
-            'user': self.request.user,
+            "user": self.request.user,
             **super().get_form_kwargs(),
         }
 
@@ -119,18 +123,15 @@ class ReportUpdateView(UpdateView):
 
 
 class ReportPrivateMedia(ReportAccessMixin, PrivateMediaView):
-
     def dispatch(self, *args, **kwargs):
-        report_pk = self.kwargs['pk']
+        report_pk = self.kwargs["pk"]
         self.report = get_object_or_404(Report, pk=report_pk)
-        file_pk = kwargs.get('file_pk')
+        file_pk = kwargs.get("file_pk")
         self.document = get_object_or_404(
-            ReportPrivateFiles.objects,
-            report__report=self.report,
-            pk=file_pk
+            ReportPrivateFiles.objects, report__report=self.report, pk=file_pk
         )
 
-        if not hasattr(self.document.report, 'live_for_report'):
+        if not hasattr(self.document.report, "live_for_report"):
             # this is not a document in the live report
             # send the user to the report page to see latest version
             return redirect(self.report.get_absolute_url())
@@ -141,7 +142,7 @@ class ReportPrivateMedia(ReportAccessMixin, PrivateMediaView):
         return self.document.document
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReportSkipView(SingleObjectMixin, View):
     model = Report
 
@@ -162,33 +163,33 @@ class ReportSkipView(SingleObjectMixin, View):
         return redirect(report.project.get_absolute_url())
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReportFrequencyUpdate(DelegatedViewMixin, UpdateView):
     form_class = ReportFrequencyForm
-    context_name = 'update_frequency_form'
+    context_name = "update_frequency_form"
     model = ReportConfig
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs.pop('user')
-        project = kwargs['instance']
+        kwargs.pop("user")
+        project = kwargs["instance"]
         instance = project.report_config
-        kwargs['instance'] = instance
+        kwargs["instance"] = instance
         if not instance.disable_reporting:
             # Current due report can be none for ONE_TIME(does not repeat),
             # In case of ONE_TIME, either reporting is already completed(last_report exists)
             # or there should be a current_due_report.
             if instance.current_due_report():
-                kwargs['initial'] = {
-                    'start': instance.current_due_report().end_date,
+                kwargs["initial"] = {
+                    "start": instance.current_due_report().end_date,
                 }
             else:
-                kwargs['initial'] = {
-                    'start': instance.last_report().end_date,
+                kwargs["initial"] = {
+                    "start": instance.last_report().end_date,
                 }
         else:
-            kwargs['initial'] = {
-                'start': project.start_date,
+            kwargs["initial"] = {
+                "start": project.start_date,
             }
         return kwargs
 
@@ -204,7 +205,9 @@ class ReportFrequencyUpdate(DelegatedViewMixin, UpdateView):
     def form_valid(self, form):
         config = form.instance
         # 'form-submitted-' is set as form_prefix in DelegateBase view
-        if 'disable-reporting' in self.request.POST.get(f'form-submitted-{self.context_name}'):
+        if "disable-reporting" in self.request.POST.get(
+            f"form-submitted-{self.context_name}"
+        ):
             form.instance.disable_reporting = True
             form.instance.schedule_start = None
             response = super().form_valid(form)
@@ -216,7 +219,7 @@ class ReportFrequencyUpdate(DelegatedViewMixin, UpdateView):
             )
         else:
             form.instance.disable_reporting = False
-            form.instance.schedule_start = form.cleaned_data['start']
+            form.instance.schedule_start = form.cleaned_data["start"]
             response = super().form_valid(form)
             messenger(
                 MESSAGES.REPORT_FREQUENCY_CHANGED,
@@ -229,9 +232,9 @@ class ReportFrequencyUpdate(DelegatedViewMixin, UpdateView):
         return response
 
 
-@method_decorator(staff_or_finance_required, name='dispatch')
+@method_decorator(staff_or_finance_required, name="dispatch")
 class ReportListView(SingleTableMixin, FilterView):
     queryset = Report.objects.submitted().for_table()
     filterset_class = ReportListFilter
     table_class = ReportListTable
-    template_name = 'application_projects/report_list.html'
+    template_name = "application_projects/report_list.html"
diff --git a/hypha/apply/projects/views/vendor.py b/hypha/apply/projects/views/vendor.py
index ce206bb242508ddcc5a5ff1784124d0cbfbc01b7..cb53405ce57746d78f8b6347513e13d1fda57033 100644
--- a/hypha/apply/projects/views/vendor.py
+++ b/hypha/apply/projects/views/vendor.py
@@ -37,9 +37,9 @@ from ..models import (
 
 def show_extra_info_form(wizard):
     # try to get the cleaned data of step where we ask if extra info is needed
-    cleaned_data = wizard.get_cleaned_data_for_step('extra') or {}
+    cleaned_data = wizard.get_cleaned_data_for_step("extra") or {}
     # check if the field ``extra_info`` box was checked.
-    return cleaned_data.get('need_extra_info', True)
+    return cleaned_data.get("need_extra_info", True)
 
 
 class CreateVendorAccessMixin:
@@ -77,29 +77,29 @@ class DetailVendorAccessMixin:
 class CreateVendorView(CreateVendorAccessMixin, SessionWizardView):
     file_storage = PrivateStorage()
     form_list = [
-        ('basic', CreateVendorFormStep1),
-        ('taxes', CreateVendorFormStep2),
-        ('documents', CreateVendorFormStep3),
-        ('bank', CreateVendorFormStep4),
-        ('extra', CreateVendorFormStep5),
-        ('other', CreateVendorFormStep6),
+        ("basic", CreateVendorFormStep1),
+        ("taxes", CreateVendorFormStep2),
+        ("documents", CreateVendorFormStep3),
+        ("bank", CreateVendorFormStep4),
+        ("extra", CreateVendorFormStep5),
+        ("other", CreateVendorFormStep6),
     ]
-    condition_dict = {'other': show_extra_info_form}
-    template_name = 'application_projects/vendor_form.html'
+    condition_dict = {"other": show_extra_info_form}
+    template_name = "application_projects/vendor_form.html"
 
     def get_project(self):
-        return get_object_or_404(Project, pk=self.kwargs['pk'])
+        return get_object_or_404(Project, pk=self.kwargs["pk"])
 
     def done(self, form_list, **kwargs):
         vendor_project = self.get_project()
         cleaned_data = self.get_all_cleaned_data()
         vendor = vendor_project.vendor
-        need_extra_info = cleaned_data['need_extra_info']
+        need_extra_info = cleaned_data["need_extra_info"]
         bank_info = vendor.bank_info
-        account_holder_name = cleaned_data['account_holder_name']
-        account_routing_number = cleaned_data['account_routing_number']
-        account_number = cleaned_data['account_number']
-        account_currency = cleaned_data['account_currency']
+        account_holder_name = cleaned_data["account_holder_name"]
+        account_routing_number = cleaned_data["account_routing_number"]
+        account_number = cleaned_data["account_number"]
+        account_currency = cleaned_data["account_currency"]
         if not bank_info:
             bank_info = BankInformation.objects.create(
                 account_holder_name=account_holder_name,
@@ -114,17 +114,17 @@ class CreateVendorView(CreateVendorAccessMixin, SessionWizardView):
             bank_info.account_currency = account_currency
             bank_info.need_extra_info = need_extra_info
         if need_extra_info:
-            ib_account_routing_number = cleaned_data['ib_account_routing_number']
-            ib_account_number = cleaned_data['ib_account_number']
-            ib_account_currency = cleaned_data['ib_account_currency']
-            ib_branch_address = cleaned_data['ib_branch_address']
+            ib_account_routing_number = cleaned_data["ib_account_routing_number"]
+            ib_account_number = cleaned_data["ib_account_number"]
+            ib_account_currency = cleaned_data["ib_account_currency"]
+            ib_branch_address = cleaned_data["ib_branch_address"]
             iba_info = bank_info.iba_info
             if not iba_info:
                 iba_info = BankInformation.objects.create(
                     account_routing_number=ib_account_routing_number,
                     account_number=ib_account_number,
                     account_currency=ib_account_currency,
-                    branch_address=ib_branch_address
+                    branch_address=ib_branch_address,
                 )
             else:
                 iba_info.branch_address = ib_branch_address
@@ -132,25 +132,26 @@ class CreateVendorView(CreateVendorAccessMixin, SessionWizardView):
                 iba_info.account_number = ib_account_number
                 iba_info.account_currency = ib_account_currency
             iba_info.save()
-            bank_info.branch_address = cleaned_data['branch_address']
-            bank_info.nid_type = cleaned_data['nid_type']
-            bank_info.nid_number = cleaned_data['nid_number']
+            bank_info.branch_address = cleaned_data["branch_address"]
+            bank_info.nid_type = cleaned_data["nid_type"]
+            bank_info.nid_number = cleaned_data["nid_number"]
             bank_info.iba_info = iba_info
-            vendor.other_info = cleaned_data['other_info']
+            vendor.other_info = cleaned_data["other_info"]
 
         bank_info.save()
 
         vendor.bank_info = bank_info
-        vendor.name = cleaned_data['name']
-        vendor.contractor_name = cleaned_data['contractor_name']
-        vendor.type = cleaned_data['type']
-        vendor.required_to_pay_taxes = cleaned_data['required_to_pay_taxes']
+        vendor.name = cleaned_data["name"]
+        vendor.contractor_name = cleaned_data["contractor_name"]
+        vendor.type = cleaned_data["type"]
+        vendor.required_to_pay_taxes = cleaned_data["required_to_pay_taxes"]
         vendor.updated_at = timezone.now()
         vendor.user_has_updated_details = True
         vendor.save()
 
         not_deleted_original_filenames = [
-            file['name'] for file in json.loads(cleaned_data['due_diligence_documents-uploads'])
+            file["name"]
+            for file in json.loads(cleaned_data["due_diligence_documents-uploads"])
         ]
         for f in vendor.due_diligence_documents.all():
             if f.document.name not in not_deleted_original_filenames:
@@ -163,130 +164,193 @@ class CreateVendorView(CreateVendorAccessMixin, SessionWizardView):
                     DueDiligenceDocument.objects.create(vendor=vendor, document=f)
                 finally:
                     f.close()
-        form = self.get_form('documents')
+        form = self.get_form("documents")
         form.delete_temporary_files()
 
         messenger(
             MESSAGES.UPDATED_VENDOR,
             request=self.request,
             user=vendor_project.lead,
-            source=vendor_project
+            source=vendor_project,
         )
 
-        return render(self.request, 'application_projects/vendor_success.html', {'project': vendor_project})
+        return render(
+            self.request,
+            "application_projects/vendor_success.html",
+            {"project": vendor_project},
+        )
 
     def get_form_initial(self, step):
         vendor_project = self.get_project()
         vendor = vendor_project.vendor
         initial_dict = self.initial_dict.get(step, {})
         if vendor:
-            initial_dict['basic'] = {
-                'name': vendor.name,
-                'contractor_name': vendor.contractor_name,
-                'type': vendor.type
+            initial_dict["basic"] = {
+                "name": vendor.name,
+                "contractor_name": vendor.contractor_name,
+                "type": vendor.type,
             }
-            initial_dict['taxes'] = {
-                'required_to_pay_taxes': vendor.required_to_pay_taxes
+            initial_dict["taxes"] = {
+                "required_to_pay_taxes": vendor.required_to_pay_taxes
             }
-            initial_dict['documents'] = {
-                'due_diligence_documents': [
+            initial_dict["documents"] = {
+                "due_diligence_documents": [
                     f.document for f in vendor.due_diligence_documents.all()
                 ]
             }
             bank_info = vendor.bank_info
             if bank_info:
-                initial_dict['bank'] = {
-                    'account_holder_name': bank_info.account_holder_name,
-                    'account_routing_number': bank_info.account_routing_number,
-                    'account_number': bank_info.account_number,
-                    'account_currency': bank_info.account_currency,
-                }
-                initial_dict['extra'] = {
-                    'need_extra_info': bank_info.need_extra_info
+                initial_dict["bank"] = {
+                    "account_holder_name": bank_info.account_holder_name,
+                    "account_routing_number": bank_info.account_routing_number,
+                    "account_number": bank_info.account_number,
+                    "account_currency": bank_info.account_currency,
                 }
-                initial_dict['other'] = {
-                    'branch_address': bank_info.branch_address,
-                    'nid_type': bank_info.nid_type,
-                    'nid_number': bank_info.nid_number,
-                    'other_info': vendor.other_info,
+                initial_dict["extra"] = {"need_extra_info": bank_info.need_extra_info}
+                initial_dict["other"] = {
+                    "branch_address": bank_info.branch_address,
+                    "nid_type": bank_info.nid_type,
+                    "nid_number": bank_info.nid_number,
+                    "other_info": vendor.other_info,
                 }
                 iba_info = bank_info.iba_info
                 if iba_info:
-                    initial_dict['other']['ib_account_routing_number'] = iba_info.account_routing_number
-                    initial_dict['other']['ib_account_number'] = iba_info.account_number
-                    initial_dict['other']['ib_account_currency'] = iba_info.account_currency
-                    initial_dict['other']['ib_branch_address'] = iba_info.branch_address
+                    initial_dict["other"][
+                        "ib_account_routing_number"
+                    ] = iba_info.account_routing_number
+                    initial_dict["other"]["ib_account_number"] = iba_info.account_number
+                    initial_dict["other"][
+                        "ib_account_currency"
+                    ] = iba_info.account_currency
+                    initial_dict["other"]["ib_branch_address"] = iba_info.branch_address
         return initial_dict.get(step, {})
 
     def get_form_kwargs(self, step):
         kwargs = super(CreateVendorView, self).get_form_kwargs(step)
-        kwargs['site'] = Site.find_for_request(self.request)
+        kwargs["site"] = Site.find_for_request(self.request)
         return kwargs
 
 
 class VendorDetailView(DetailVendorAccessMixin, DetailView):
     model = Vendor
-    template_name = 'application_projects/vendor_detail.html'
+    template_name = "application_projects/vendor_detail.html"
 
     def get_object(self, queryset=None):
-        return get_object_or_404(self.model, id=self.kwargs['vendor_pk'])
+        return get_object_or_404(self.model, id=self.kwargs["vendor_pk"])
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context['vendor_detailed_response'] = self.get_detailed_response()
-        context['project'] = self.get_project()
+        context["vendor_detailed_response"] = self.get_detailed_response()
+        context["project"] = self.get_project()
         vendor = self.get_object()
-        context['due_diligence_documents'] = vendor.due_diligence_documents.all()
+        context["due_diligence_documents"] = vendor.due_diligence_documents.all()
         return context
 
     def get_project(self):
-        return get_object_or_404(Project, pk=self.kwargs['pk'])
+        return get_object_or_404(Project, pk=self.kwargs["pk"])
 
     def get_detailed_response(self):
         vendor = self.get_object()
         vendor_form_settings = VendorFormSettings.for_request(self.request)
         data = {}
         group = 0
-        data.setdefault(group, {'title': str(_('Contracting Information')), 'questions': []})
-        data[group]['questions'] = [
+        data.setdefault(
+            group, {"title": str(_("Contracting Information")), "questions": []}
+        )
+        data[group]["questions"] = [
             (vendor_form_settings.name_label, vendor.name),
             (vendor_form_settings.contractor_name_label, vendor.contractor_name),
             (vendor_form_settings.type_label, vendor.type),
-            (vendor_form_settings.required_to_pay_taxes_label, vendor.required_to_pay_taxes),
-            ('Due Diligence Documents', ''),
+            (
+                vendor_form_settings.required_to_pay_taxes_label,
+                vendor.required_to_pay_taxes,
+            ),
+            ("Due Diligence Documents", ""),
         ]
         group = group + 1
-        data.setdefault(group, {'title': str(_('Bank Account Information')), 'questions': []})
+        data.setdefault(
+            group, {"title": str(_("Bank Account Information")), "questions": []}
+        )
         bank_info = vendor.bank_info
-        data[group]['questions'] = [
-            (vendor_form_settings.account_holder_name_label, bank_info.account_holder_name if bank_info else ''),
-            (vendor_form_settings.account_routing_number_label, bank_info.account_routing_number if bank_info else ''),
-            (vendor_form_settings.account_number_label, bank_info.account_number if bank_info else ''),
-            (vendor_form_settings.account_currency_label, bank_info.account_currency if bank_info else ''),
+        data[group]["questions"] = [
+            (
+                vendor_form_settings.account_holder_name_label,
+                bank_info.account_holder_name if bank_info else "",
+            ),
+            (
+                vendor_form_settings.account_routing_number_label,
+                bank_info.account_routing_number if bank_info else "",
+            ),
+            (
+                vendor_form_settings.account_number_label,
+                bank_info.account_number if bank_info else "",
+            ),
+            (
+                vendor_form_settings.account_currency_label,
+                bank_info.account_currency if bank_info else "",
+            ),
         ]
         group = group + 1
-        data.setdefault(group, {'title': str(_('(Optional) Extra Information for Accepting Payments')), 'questions': []})
-        data[group]['questions'] = [
-            (vendor_form_settings.branch_address_label, self.get_address_display(bank_info.branch_address) if bank_info else ''),
+        data.setdefault(
+            group,
+            {
+                "title": str(_("(Optional) Extra Information for Accepting Payments")),
+                "questions": [],
+            },
+        )
+        data[group]["questions"] = [
+            (
+                vendor_form_settings.branch_address_label,
+                self.get_address_display(bank_info.branch_address) if bank_info else "",
+            ),
         ]
         group = group + 1
-        data.setdefault(group, {'title': str(_('Intermediary Bank Account Information')), 'questions': []})
+        data.setdefault(
+            group,
+            {"title": str(_("Intermediary Bank Account Information")), "questions": []},
+        )
         iba_info = bank_info.iba_info if bank_info else None
-        data[group]['questions'] = [
-            (vendor_form_settings.ib_account_routing_number_label, iba_info.account_routing_number if iba_info else ''),
-            (vendor_form_settings.ib_account_number_label, iba_info.account_number if iba_info else ''),
-            (vendor_form_settings.ib_account_currency_label, iba_info.account_currency if iba_info else ''),
-            (vendor_form_settings.ib_branch_address_label, self.get_address_display(iba_info.branch_address) if iba_info else ''),
+        data[group]["questions"] = [
+            (
+                vendor_form_settings.ib_account_routing_number_label,
+                iba_info.account_routing_number if iba_info else "",
+            ),
+            (
+                vendor_form_settings.ib_account_number_label,
+                iba_info.account_number if iba_info else "",
+            ),
+            (
+                vendor_form_settings.ib_account_currency_label,
+                iba_info.account_currency if iba_info else "",
+            ),
+            (
+                vendor_form_settings.ib_branch_address_label,
+                self.get_address_display(iba_info.branch_address) if iba_info else "",
+            ),
         ]
         group = group + 1
-        data.setdefault(group, {'title': str(_('Account Holder National Identity Document Information')), 'questions': []})
-        data[group]['questions'] = [
-            (vendor_form_settings.nid_type_label, bank_info.nid_type if bank_info else ''),
-            (vendor_form_settings.nid_number_label, bank_info.nid_number if bank_info else ''),
+        data.setdefault(
+            group,
+            {
+                "title": str(
+                    _("Account Holder National Identity Document Information")
+                ),
+                "questions": [],
+            },
+        )
+        data[group]["questions"] = [
+            (
+                vendor_form_settings.nid_type_label,
+                bank_info.nid_type if bank_info else "",
+            ),
+            (
+                vendor_form_settings.nid_number_label,
+                bank_info.nid_number if bank_info else "",
+            ),
         ]
         group = group + 1
-        data.setdefault(group, {'title': None, 'questions': []})
-        data[group]['questions'] = [
+        data.setdefault(group, {"title": None, "questions": []})
+        data[group]["questions"] = [
             (vendor_form_settings.other_info_label, vendor.other_info),
         ]
         return data
@@ -295,29 +359,29 @@ class VendorDetailView(DetailVendorAccessMixin, DetailView):
         try:
             address = json.loads(address)
         except (json.JSONDecodeError, AttributeError):
-            return ''
+            return ""
         else:
-            return ', '.join(
+            return ", ".join(
                 address.get(field)
                 for field in ADDRESS_FIELDS_ORDER
                 if address.get(field)
             )
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class VendorPrivateMediaView(UserPassesTestMixin, PrivateMediaView):
     raise_exception = True
 
     def dispatch(self, *args, **kwargs):
-        pk = self.kwargs['pk']
-        vendor_pk = self.kwargs['vendor_pk']
+        pk = self.kwargs["pk"]
+        vendor_pk = self.kwargs["vendor_pk"]
         self.vendor = get_object_or_404(Vendor, pk=vendor_pk)
         self.project = get_object_or_404(Project, pk=pk)
 
         return super().dispatch(*args, **kwargs)
 
     def get_media(self, *args, **kwargs):
-        file_pk = kwargs.get('file_pk')
+        file_pk = kwargs.get("file_pk")
         document = get_object_or_404(self.vendor.due_diligence_documents, pk=file_pk)
         return document.document
 
diff --git a/hypha/apply/review/admin.py b/hypha/apply/review/admin.py
index a09cf1743b5f5df3fae1dbb4403d96143353f58b..f9281c22991b90e9400715eb7e8095c8cf618d36 100644
--- a/hypha/apply/review/admin.py
+++ b/hypha/apply/review/admin.py
@@ -17,17 +17,17 @@ class CloneView(CreateView, InstanceSpecificView):
 
 class ReviewFormAdmin(ListRelatedMixin, ModelAdmin):
     model = ReviewForm
-    menu_icon = 'form'
-    list_display = ('name', 'used_by')
+    menu_icon = "form"
+    list_display = ("name", "used_by")
     button_helper_class = ButtonsWithClone
     clone_view_class = CloneView
     create_view_class = CreateReviewFormView
     edit_view_class = EditReviewFormView
 
     related_models = [
-        ('applicationbasereviewform', 'application'),
-        ('roundbasereviewform', 'round'),
-        ('labbasereviewform', 'lab'),
+        ("applicationbasereviewform", "application"),
+        ("roundbasereviewform", "round"),
+        ("labbasereviewform", "lab"),
     ]
 
     def get_admin_urls_for_registration(self):
@@ -35,15 +35,15 @@ class ReviewFormAdmin(ListRelatedMixin, ModelAdmin):
 
         urls += (
             re_path(
-                self.url_helper.get_action_url_pattern('clone'),
+                self.url_helper.get_action_url_pattern("clone"),
                 self.clone_view,
-                name=self.url_helper.get_action_url_name('clone')
+                name=self.url_helper.get_action_url_name("clone"),
             ),
         )
 
         return urls
 
     def clone_view(self, request, **kwargs):
-        kwargs.update(**{'model_admin': self})
+        kwargs.update(**{"model_admin": self})
         view_class = self.clone_view_class
         return view_class.as_view(**kwargs)(request)
diff --git a/hypha/apply/review/admin_helpers.py b/hypha/apply/review/admin_helpers.py
index 97d27222591fd0fd0d02a641567ee6c42895571b..e36f31b6925072c52fd05b26b68eb1363ac72f1a 100644
--- a/hypha/apply/review/admin_helpers.py
+++ b/hypha/apply/review/admin_helpers.py
@@ -6,15 +6,18 @@ class ButtonsWithClone(PageButtonHelper):
         classnames = self.copy_button_classnames + classnames_add
         cn = self.finalise_classname(classnames, classnames_exclude)
         return {
-            'url': self.url_helper.get_action_url('clone', instance_pk=obj.pk),
-            'label': 'Clone',
-            'classname': cn,
-            'title': 'Clone this %s' % self.verbose_name,
+            "url": self.url_helper.get_action_url("clone", instance_pk=obj.pk),
+            "label": "Clone",
+            "classname": cn,
+            "title": "Clone this %s" % self.verbose_name,
         }
 
-    def get_buttons_for_obj(self, obj, exclude=None, classnames_add=None,
-                            classnames_exclude=None):
-        btns = super().get_buttons_for_obj(obj, exclude, classnames_add, classnames_exclude)
+    def get_buttons_for_obj(
+        self, obj, exclude=None, classnames_add=None, classnames_exclude=None
+    ):
+        btns = super().get_buttons_for_obj(
+            obj, exclude, classnames_add, classnames_exclude
+        )
 
         # Put preview before delete
         btns.insert(-1, self.clone_button(obj, classnames_add, classnames_exclude))
diff --git a/hypha/apply/review/admin_views.py b/hypha/apply/review/admin_views.py
index 56110e191d8fd00d5b763b185358a168e0d7f8b3..35553c2523b78123d022286d3ab25f87e38570b6 100644
--- a/hypha/apply/review/admin_views.py
+++ b/hypha/apply/review/admin_views.py
@@ -4,14 +4,12 @@ from hypha.apply.utils.blocks import show_admin_form_error_messages
 
 
 class CreateReviewFormView(CreateView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
 
 
 class EditReviewFormView(EditView):
-
     def form_invalid(self, form):
         show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/review/apps.py b/hypha/apply/review/apps.py
index 07017424fd64cb4f8c859bfff8aaffa2250e0c2b..11ff74ab685357026cb27a2008b3216c990e7a98 100644
--- a/hypha/apply/review/apps.py
+++ b/hypha/apply/review/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class ReviewConfig(AppConfig):
-    name = 'hypha.apply.review'
+    name = "hypha.apply.review"
diff --git a/hypha/apply/review/blocks.py b/hypha/apply/review/blocks.py
index 818def56aaf1a2ccd9ca6185355b2797f35596af..988bdfc44b45e37bee2ee735eefa5f8b7dd01c0c 100644
--- a/hypha/apply/review/blocks.py
+++ b/hypha/apply/review/blocks.py
@@ -31,25 +31,27 @@ class ScoreFieldBlock(OptionalFormFieldBlock):
     field_class = ScoredAnswerField
 
     class Meta:
-        label = _('Score')
-        icon = 'order'
-        template = 'review/render_scored_answer_field.html'
+        label = _("Score")
+        icon = "order"
+        template = "review/render_scored_answer_field.html"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['initial'] = ['', NA]
+        kwargs["initial"] = ["", NA]
         return kwargs
 
     def render(self, value, context=None):
         try:
-            comment, score = context['data']
+            comment, score = context["data"]
         except ValueError:
             # TODO: Remove json load as data moved away from JSON
-            comment, score = json.loads(context['data'])
-        context.update(**{
-            'comment': comment,
-            'score': RATE_CHOICES_DICT.get(int(score), RATE_CHOICE_NA)
-        })
+            comment, score = json.loads(context["data"])
+        context.update(
+            **{
+                "comment": comment,
+                "score": RATE_CHOICES_DICT.get(int(score), RATE_CHOICE_NA),
+            }
+        )
 
         return super().render(value, context)
 
@@ -69,21 +71,22 @@ class ScoreFieldWithoutTextBlock(OptionalFormFieldBlock):
     as default to the forms and also when this field is
     required it automatically handles validation on empty string.
     """
-    name = 'score without text'
+
+    name = "score without text"
     field_class = forms.ChoiceField
 
     class Meta:
-        icon = 'order'
+        icon = "order"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['choices'] = self.get_choices(RATE_CHOICES)
+        kwargs["choices"] = self.get_choices(RATE_CHOICES)
         return kwargs
 
     def render(self, value, context=None):
-        data = int(context['data'])
+        data = int(context["data"])
         choices = dict(self.get_choices(RATE_CHOICES))
-        context['data'] = choices[data]
+        context["data"] = choices[data]
 
         return super().render(value, context)
 
@@ -93,7 +96,7 @@ class ScoreFieldWithoutTextBlock(OptionalFormFieldBlock):
         """
         rate_choices = list(choices)
         rate_choices.pop(-1)
-        rate_choices.append(('', 'n/a - choose not to answer'))
+        rate_choices.append(("", "n/a - choose not to answer"))
         return tuple(rate_choices)
 
 
@@ -102,67 +105,72 @@ class ReviewMustIncludeFieldBlock(MustIncludeFieldBlock):
 
 
 class RecommendationBlock(ReviewMustIncludeFieldBlock):
-    name = 'recommendation'
-    description = 'Overall recommendation'
+    name = "recommendation"
+    description = "Overall recommendation"
     field_class = forms.ChoiceField
 
     class Meta:
-        icon = 'pick'
+        icon = "pick"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['choices'] = RECOMMENDATION_CHOICES
+        kwargs["choices"] = RECOMMENDATION_CHOICES
         return kwargs
 
     def render(self, value, context=None):
-        data = int(context['data'])
+        data = int(context["data"])
         choices = dict(RECOMMENDATION_CHOICES)
-        context['data'] = choices[data]
+        context["data"] = choices[data]
 
         return super().render(value, context)
 
 
 class RecommendationCommentsBlock(ReviewMustIncludeFieldBlock):
-    name = 'comments'
-    description = 'Recommendation comments'
+    name = "comments"
+    description = "Recommendation comments"
     widget = RICH_TEXT_WIDGET_SHORT
 
     class Meta:
-        icon = 'openquote'
-        template = 'stream_forms/render_unsafe_field.html'
+        icon = "openquote"
+        template = "stream_forms/render_unsafe_field.html"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['required'] = False
+        kwargs["required"] = False
         return kwargs
 
 
 class VisibilityBlock(ReviewMustIncludeFieldBlock):
-    name = 'visibility'
-    description = 'Visibility'
+    name = "visibility"
+    description = "Visibility"
     field_class = forms.ChoiceField
     widget = forms.RadioSelect()
 
     class Meta:
-        icon = 'radio-empty'
+        icon = "radio-empty"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super(VisibilityBlock, self).get_field_kwargs(struct_value)
-        kwargs['choices'] = VISIBILITY.items()
-        kwargs['initial'] = PRIVATE
-        kwargs['help_text'] = mark_safe('<br>'.join(
-            [VISIBILITY[choice] + ': ' + VISIBILILTY_HELP_TEXT[choice] for choice in VISIBILITY]
-        ))
+        kwargs["choices"] = VISIBILITY.items()
+        kwargs["initial"] = PRIVATE
+        kwargs["help_text"] = mark_safe(
+            "<br>".join(
+                [
+                    VISIBILITY[choice] + ": " + VISIBILILTY_HELP_TEXT[choice]
+                    for choice in VISIBILITY
+                ]
+            )
+        )
         return kwargs
 
 
 class ReviewCustomFormFieldsBlock(CustomFormFieldsBlock):
-    char = CharFieldBlock(group=_('Fields'))
-    text = TextFieldBlock(group=_('Fields'))
-    text_markup = RichTextBlock(group=_('Fields'), label=_('Paragraph'))
-    score = ScoreFieldBlock(group=_('Fields'))
-    score_without_text = ScoreFieldWithoutTextBlock(group=_('Fields'))
-    checkbox = CheckboxFieldBlock(group=_('Fields'))
-    dropdown = DropdownFieldBlock(group=_('Fields'))
+    char = CharFieldBlock(group=_("Fields"))
+    text = TextFieldBlock(group=_("Fields"))
+    text_markup = RichTextBlock(group=_("Fields"), label=_("Paragraph"))
+    score = ScoreFieldBlock(group=_("Fields"))
+    score_without_text = ScoreFieldWithoutTextBlock(group=_("Fields"))
+    checkbox = CheckboxFieldBlock(group=_("Fields"))
+    dropdown = DropdownFieldBlock(group=_("Fields"))
 
     required_blocks = ReviewMustIncludeFieldBlock.__subclasses__()
diff --git a/hypha/apply/review/fields.py b/hypha/apply/review/fields.py
index 8bd3b636d1a6f45fd3da861a1f2d1ac202b5f104..079e01478d353fc5c6e8665f9a3deaadfc3c076d 100644
--- a/hypha/apply/review/fields.py
+++ b/hypha/apply/review/fields.py
@@ -26,12 +26,14 @@ class ScoredAnswerWidget(forms.MultiWidget):
         rendered = []
         # We need to explicitly call the render method on the tinymce widget
         # MultiValueWidget just passes all the context into the template
-        for kwargs, widget in zip(context['widget']['subwidgets'], self.widgets, strict=False):
-            name = kwargs['name']
-            value = kwargs['value']
-            attrs = kwargs['attrs']
+        for kwargs, widget in zip(
+            context["widget"]["subwidgets"], self.widgets, strict=False
+        ):
+            name = kwargs["name"]
+            value = kwargs["value"]
+            attrs = kwargs["attrs"]
             rendered.append(widget.render(name, value, attrs, renderer))
-        return mark_safe(''.join(list(rendered)))
+        return mark_safe("".join(list(rendered)))
 
 
 class ScoredAnswerField(forms.MultiValueField):
@@ -49,4 +51,4 @@ class ScoredAnswerField(forms.MultiValueField):
         if data_list:
             return [data_list[0], int(data_list[1])]
         else:
-            return ['', NA]
+            return ["", NA]
diff --git a/hypha/apply/review/forms.py b/hypha/apply/review/forms.py
index 60bd1ec7a26710a39247c3d20fca0cd908eacf39..122be1db3c1f3c04fb7c686176cf86d63a8a38a3 100644
--- a/hypha/apply/review/forms.py
+++ b/hypha/apply/review/forms.py
@@ -18,22 +18,24 @@ class ReviewModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass)
 
     class Meta:
         model = Review
-        fields = ['recommendation', 'visibility', 'score', 'submission']
+        fields = ["recommendation", "visibility", "score", "submission"]
 
         widgets = {
-            'recommendation': forms.HiddenInput(),
-            'score': forms.HiddenInput(),
-            'submission': forms.HiddenInput(),
-            'visibility': forms.HiddenInput(),
+            "recommendation": forms.HiddenInput(),
+            "score": forms.HiddenInput(),
+            "submission": forms.HiddenInput(),
+            "visibility": forms.HiddenInput(),
         }
 
         error_messages = {
             NON_FIELD_ERRORS: {
-                'unique_together': "You have already posted a review for this submission",
+                "unique_together": "You have already posted a review for this submission",
             }
         }
 
-    def __init__(self, *args, submission, user=None, initial=None, instance=None, **kwargs):
+    def __init__(
+        self, *args, submission, user=None, initial=None, instance=None, **kwargs
+    ):
         if initial is None:
             initial = {}
 
@@ -54,7 +56,7 @@ class ReviewModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass)
 
     def clean(self):
         cleaned_data = super().clean()
-        cleaned_data['form_data'] = {
+        cleaned_data["form_data"] = {
             key: value
             for key, value in cleaned_data.items()
             if key not in self._meta.fields
@@ -64,16 +66,20 @@ class ReviewModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass)
 
     def save(self, commit=True):
         self.instance.score = self.calculate_score(self.cleaned_data)
-        self.instance.recommendation = int(self.cleaned_data[self.instance.recommendation_field.id])
+        self.instance.recommendation = int(
+            self.cleaned_data[self.instance.recommendation_field.id]
+        )
         self.instance.is_draft = self.draft_button_name in self.data
         # Old review forms do not have the requred visability field.
         # This will set visibility to PRIVATE by default.
         try:
-            self.instance.visibility = self.cleaned_data[self.instance.visibility_field.id]
+            self.instance.visibility = self.cleaned_data[
+                self.instance.visibility_field.id
+            ]
         except AttributeError:
             self.instance.visibility = PRIVATE
 
-        self.instance.form_data = self.cleaned_data['form_data']
+        self.instance.form_data = self.cleaned_data["form_data"]
 
         if not self.instance.is_draft:
             # Capture the revision against which the user was reviewing
@@ -94,7 +100,7 @@ class ReviewModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass)
         for field in self.instance.score_fields_without_text:
             score = data.get(field.id)
             # Include '' answers as 0.
-            if score == '':
+            if score == "":
                 score = 0
             scores.append(int(score))
 
@@ -106,7 +112,7 @@ class ReviewModelForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass)
 
 class SubmitButtonWidget(forms.Widget):
     def render(self, name, value, attrs=None, renderer=None):
-        disabled = 'disabled' if attrs.get('disabled') else ''
+        disabled = "disabled" if attrs.get("disabled") else ""
         return '<input type="submit" name="{name}" value="{value}" class="button button--primary button--bottom-space" {disabled}>'.format(
             disabled=disabled,
             name=escape(name),
@@ -118,7 +124,7 @@ class OpinionField(forms.IntegerField):
     def __init__(self, *args, opinion, **kwargs):
         kwargs["widget"] = SubmitButtonWidget
         self.opinion = opinion
-        kwargs['label'] = ''
+        kwargs["label"] = ""
         super().__init__(*args, **kwargs)
 
     def clean(self, value):
@@ -131,7 +137,7 @@ class ReviewOpinionForm(forms.ModelForm):
 
     class Meta:
         model = ReviewOpinion
-        fields = ('opinion',)
+        fields = ("opinion",)
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -147,8 +153,8 @@ class ReviewOpinionForm(forms.ModelForm):
         opinions = [cleaned_data.get(opinion.lower()) for _, opinion in OPINION_CHOICES]
         valid_opinions = [opinion for opinion in opinions if opinion is not None]
         if len(valid_opinions) > 1:
-            self.add_error(None, 'Cant submit both an agreement and disagreement')
-        cleaned_data = {'opinion': valid_opinions[0]}
+            self.add_error(None, "Cant submit both an agreement and disagreement")
+        cleaned_data = {"opinion": valid_opinions[0]}
         return cleaned_data
 
     def save(self, *args, **kwargs):
diff --git a/hypha/apply/review/management/commands/export_reviews_csv.py b/hypha/apply/review/management/commands/export_reviews_csv.py
index de5ab6276385bd5ec2f8bc41c63d63d726902bc5..2829674c9d3e96651d420a681fcad2000c910668 100644
--- a/hypha/apply/review/management/commands/export_reviews_csv.py
+++ b/hypha/apply/review/management/commands/export_reviews_csv.py
@@ -9,9 +9,18 @@ class Command(BaseCommand):
     help = "Export reviews stats to a csv file.."
 
     def handle(self, *args, **options):
-        with open('export_reviews.csv', 'w', newline='') as csvfile:
+        with open("export_reviews.csv", "w", newline="") as csvfile:
             writer = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
-            writer.writerow(['Review author', 'Reviewer type', 'Review date', 'Submission', 'Submission date', 'Round/Lab/Fellowship'])
+            writer.writerow(
+                [
+                    "Review author",
+                    "Reviewer type",
+                    "Review date",
+                    "Submission",
+                    "Submission date",
+                    "Round/Lab/Fellowship",
+                ]
+            )
             for review in Review.objects.submitted():
                 if review.submission.round:
                     submission_type = review.submission.round
@@ -19,12 +28,21 @@ class Command(BaseCommand):
                     submission_type = review.submission.page
 
                 if review.author.reviewer.is_apply_staff:
-                    reviewer_type = 'Staff'
+                    reviewer_type = "Staff"
                 elif review.author.reviewer.is_reviewer:
-                    reviewer_type = 'Reviewer'
+                    reviewer_type = "Reviewer"
                 elif review.author.reviewer.is_partner:
-                    reviewer_type = 'Partner'
+                    reviewer_type = "Partner"
                 elif review.author.reviewer.is_community_reviewer:
-                    reviewer_type = 'Community'
+                    reviewer_type = "Community"
 
-                writer.writerow([review.author, reviewer_type, review.created_at.strftime('%Y-%m-%d'), review.submission.title, review.submission.submit_time.strftime('%Y-%m-%d'), submission_type])
+                writer.writerow(
+                    [
+                        review.author,
+                        reviewer_type,
+                        review.created_at.strftime("%Y-%m-%d"),
+                        review.submission.title,
+                        review.submission.submit_time.strftime("%Y-%m-%d"),
+                        submission_type,
+                    ]
+                )
diff --git a/hypha/apply/review/management/commands/fix_stream_field_ids.py b/hypha/apply/review/management/commands/fix_stream_field_ids.py
index 14d35aca0d6af95c585af365b537f1a9d17a70e0..c42dc6aab7eda3a4f21943331d3436982dcfa8eb 100644
--- a/hypha/apply/review/management/commands/fix_stream_field_ids.py
+++ b/hypha/apply/review/management/commands/fix_stream_field_ids.py
@@ -11,7 +11,7 @@ class Command(BaseCommand):
     @transaction.atomic
     def handle(self, *args, **options):
         with connection.cursor() as cursor:
-            cursor.execute('SELECT id, form_fields FROM review_reviewform')
+            cursor.execute("SELECT id, form_fields FROM review_reviewform")
             form_fields = cursor.fetchall()
 
         for row in form_fields:
@@ -19,11 +19,14 @@ class Command(BaseCommand):
             form = json.loads(review_form)
             updated = False
             for field in form:
-                if field['id'] == '976386e1-3a66-490f-9e82-bfbe1f134cf2':
-                    field['id'] = str(uuid.uuid4())
+                if field["id"] == "976386e1-3a66-490f-9e82-bfbe1f134cf2":
+                    field["id"] = str(uuid.uuid4())
                     updated = True
 
             if updated:
                 updated_form = json.dumps(form)
                 with connection.cursor() as cursor:
-                    cursor.execute('UPDATE review_reviewform SET form_fields = %s WHERE id = %s', [updated_form, review_id])
+                    cursor.execute(
+                        "UPDATE review_reviewform SET form_fields = %s WHERE id = %s",
+                        [updated_form, review_id],
+                    )
diff --git a/hypha/apply/review/management/commands/migration_review_base.py b/hypha/apply/review/management/commands/migration_review_base.py
index 7ef22d250de0a0555e25aecaa5a125abf9a31ef3..712fdc9001595f2b0b3851110916b3b365f22e2c 100644
--- a/hypha/apply/review/management/commands/migration_review_base.py
+++ b/hypha/apply/review/management/commands/migration_review_base.py
@@ -78,15 +78,39 @@ class MigrateCommand(BaseCommand):
     }
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             # A user can only submitt a single review in the new system so pick the latest one.
-            blacklist = {"7574", "7413", "7412", "5270", "6468", "6436", "5511", "3490", "2840", "2837", "2737", "9362", "9203", "8958", "13313", "4868", "4867", "5863", "5770", "3962", "3747"}
+            blacklist = {
+                "7574",
+                "7413",
+                "7412",
+                "5270",
+                "6468",
+                "6436",
+                "5511",
+                "3490",
+                "2840",
+                "2837",
+                "2737",
+                "9362",
+                "9203",
+                "8958",
+                "13313",
+                "4868",
+                "4867",
+                "5863",
+                "5770",
+                "3962",
+                "3747",
+            }
 
             counter = 0
             for id in self.data:
@@ -100,9 +124,9 @@ class MigrateCommand(BaseCommand):
         node = self.data[id]
 
         try:
-            review = Review.objects.get(drupal_id=node['nid'])
+            review = Review.objects.get(drupal_id=node["nid"])
         except Review.DoesNotExist:
-            review = Review(drupal_id=node['nid'])
+            review = Review(drupal_id=node["nid"])
 
         # Disable auto_* on date fields so imported dates are used.
         for field in review._meta.local_fields:
@@ -112,9 +136,9 @@ class MigrateCommand(BaseCommand):
                 field.auto_now = False
 
         # TODO timezone?
-        review.created_at = datetime.fromtimestamp(int(node['created']), timezone.utc)
-        review.updated_at = datetime.fromtimestamp(int(node['changed']), timezone.utc)
-        review.author = self.get_user(node['uid'])
+        review.created_at = datetime.fromtimestamp(int(node["created"]), timezone.utc)
+        review.updated_at = datetime.fromtimestamp(int(node["changed"]), timezone.utc)
+        review.author = self.get_user(node["uid"])
         review.recommendation = self.get_recommendation(node)
         review.submission = self.get_submission(node)
         review.revision = review.submission.live_revision
@@ -138,7 +162,7 @@ class MigrateCommand(BaseCommand):
         for field in node:
             if field in self.STREAMFIELD_MAP:
                 try:
-                    id = self.STREAMFIELD_MAP[field]['id']
+                    id = self.STREAMFIELD_MAP[field]["id"]
                     form_data[id] = self.get_field_value(field, node)
                 except TypeError:
                     pass
@@ -150,7 +174,11 @@ class MigrateCommand(BaseCommand):
 
         review.form_data = form_data
 
-        scores = [review.data(field.id)[1] for field in review.score_fields if review.data(field.id)[1] != NA]
+        scores = [
+            review.data(field.id)[1]
+            for field in review.score_fields
+            if review.data(field.id)[1] != NA
+        ]
         try:
             review.score = sum(scores) / len(scores)
         except ZeroDivisionError:
@@ -160,7 +188,9 @@ class MigrateCommand(BaseCommand):
             review.save()
             self.stdout.write(f"Processed \"{node['title']}\" ({node['nid']})")
         except IntegrityError:
-            self.stdout.write(f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
 
     def get_user(self, uid):
         try:
@@ -179,65 +209,73 @@ class MigrateCommand(BaseCommand):
         field: [{value|target_id|tid: VALUE},]
         """
         mapping = self.STREAMFIELD_MAP[field]
-        mapping_type = mapping['type']
-        key = mapping.get('key', 'value')
+        mapping_type = mapping["type"]
+        key = mapping.get("key", "value")
         source_value = node[field]
         value = None
 
         if mapping_type == "direct":
             value = source_value
-        elif mapping_type == 'value':
+        elif mapping_type == "value":
             if key in source_value:
-                value = self.nl2br(source_value[key]) if source_value else ''
+                value = self.nl2br(source_value[key]) if source_value else ""
             else:
-                value = self.nl2br(source_value['value']) if source_value else ''
-        elif mapping_type == 'merge_value':
+                value = self.nl2br(source_value["value"]) if source_value else ""
+        elif mapping_type == "merge_value":
             values = []
             i = 0
             for item in source_value:
-                question = self.REQUEST_QUESTION_MAP[node['request_nid']]
+                question = self.REQUEST_QUESTION_MAP[node["request_nid"]]
                 if i in question:
                     values.append(f"<strong>{question[i]}</strong>{item[key]}<br>\n")
                 i += 1
-            merged_values = ''.join(values)
-            value = self.nl2br(merged_values) if source_value else ''
-        elif mapping_type == 'score':
+            merged_values = "".join(values)
+            value = self.nl2br(merged_values) if source_value else ""
+        elif mapping_type == "score":
             value_rate = int(source_value[key]) if source_value else NA
-            value_text = ''
+            value_text = ""
             if "_rate" in field:
-                field = field.replace('field_field_', 'field_')
+                field = field.replace("field_field_", "field_")
                 text_field = field[:-5]
                 if text_field in self.STREAMFIELD_MAP:
                     value_text_field = node[text_field]
-                    if 'safe_value' in value_text_field:
-                        value_text = self.nl2br(value_text_field['safe_value']) if value_text_field else ''
+                    if "safe_value" in value_text_field:
+                        value_text = (
+                            self.nl2br(value_text_field["safe_value"])
+                            if value_text_field
+                            else ""
+                        )
                     else:
-                        value_text = self.nl2br(value_text_field['value']) if value_text_field else ''
+                        value_text = (
+                            self.nl2br(value_text_field["value"])
+                            if value_text_field
+                            else ""
+                        )
             value = [value_text, value_rate]
-        elif mapping_type == 'map' and 'map' in 'mapping':
-            value = mapping['map'].get(source_value[key])
-        elif mapping_type == 'boolean':
-            value = source_value[key] == '1' if source_value else False
+        elif mapping_type == "map" and "map" in "mapping":
+            value = mapping["map"].get(source_value[key])
+        elif mapping_type == "boolean":
+            value = source_value[key] == "1" if source_value else False
 
         return value
 
     def get_recommendation(self, node):
-        mapping = self.REVIEWFIELD_MAP[node['type']]
-        field_name = mapping['recommendation']
-        rec_map = mapping.get('rec_map')
+        mapping = self.REVIEWFIELD_MAP[node["type"]]
+        field_name = mapping["recommendation"]
+        rec_map = mapping.get("rec_map")
         try:
-            return rec_map[node[field_name]['value']]
+            return rec_map[node[field_name]["value"]]
         except TypeError:
             return 0
 
     def get_submission(self, node):
-        mapping = self.REVIEWFIELD_MAP[node['type']]
-        field_name = mapping['submission']
+        mapping = self.REVIEWFIELD_MAP[node["type"]]
+        field_name = mapping["submission"]
         try:
-            nid = node[field_name]['target_id']
+            nid = node[field_name]["target_id"]
             return ApplicationSubmission.objects.get(drupal_id=nid)
         except ApplicationSubmission.DoesNotExist:
             return None
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
diff --git a/hypha/apply/review/migrations/0001_initial.py b/hypha/apply/review/migrations/0001_initial.py
index 0f1ae8337a6925257d8fdae054d72dd377748f4f..89df7f4959c714b801728ba63a8dade2c594c36c 100644
--- a/hypha/apply/review/migrations/0001_initial.py
+++ b/hypha/apply/review/migrations/0001_initial.py
@@ -6,26 +6,46 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('funds', '0028_update_on_delete_django2'),
+        ("funds", "0028_update_on_delete_django2"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Review',
+            name="Review",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('review', models.TextField()),
-                ('author', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
-                ('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='funds.ApplicationSubmission', related_name='reviews')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("review", models.TextField()),
+                (
+                    "author",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "submission",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="funds.ApplicationSubmission",
+                        related_name="reviews",
+                    ),
+                ),
             ],
         ),
         migrations.AlterUniqueTogether(
-            name='review',
-            unique_together={('author', 'submission')},
+            name="review",
+            unique_together={("author", "submission")},
         ),
     ]
diff --git a/hypha/apply/review/migrations/0002_add_common_fields.py b/hypha/apply/review/migrations/0002_add_common_fields.py
index f1c3bc8b7e0d04ff517d8ad3c2212aa019711e46..b52769287fbc30d11cf043369ff58d960f21578d 100644
--- a/hypha/apply/review/migrations/0002_add_common_fields.py
+++ b/hypha/apply/review/migrations/0002_add_common_fields.py
@@ -5,34 +5,57 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0001_initial'),
+        ("review", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ConceptReview',
+            name="ConceptReview",
             fields=[
-                ('review_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='review.Review')),
+                (
+                    "review_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="review.Review",
+                    ),
+                ),
             ],
-            bases=('review.review',),
+            bases=("review.review",),
         ),
         migrations.CreateModel(
-            name='ProposalReview',
+            name="ProposalReview",
             fields=[
-                ('review_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='review.Review')),
+                (
+                    "review_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="review.Review",
+                    ),
+                ),
             ],
-            bases=('review.review',),
+            bases=("review.review",),
         ),
         migrations.AddField(
-            model_name='review',
-            name='recommendation',
-            field=models.IntegerField(choices=[(0, 'No'), (1, 'Maybe'), (2, 'Yes')], default=0, verbose_name='Recommendation'),
+            model_name="review",
+            name="recommendation",
+            field=models.IntegerField(
+                choices=[(0, "No"), (1, "Maybe"), (2, "Yes")],
+                default=0,
+                verbose_name="Recommendation",
+            ),
         ),
         migrations.AddField(
-            model_name='review',
-            name='score',
+            model_name="review",
+            name="score",
             field=models.DecimalField(decimal_places=1, default=0, max_digits=10),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0003_review_json_field.py b/hypha/apply/review/migrations/0003_review_json_field.py
index 6318c1850dfee36fa9d9fc180ea28b5a7e2a262e..403eefdb5f56e16547c6f4338dbb05ff89281d6e 100644
--- a/hypha/apply/review/migrations/0003_review_json_field.py
+++ b/hypha/apply/review/migrations/0003_review_json_field.py
@@ -5,29 +5,28 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0002_add_common_fields'),
+        ("review", "0002_add_common_fields"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='conceptreview',
-            name='review_ptr',
+            model_name="conceptreview",
+            name="review_ptr",
         ),
         migrations.RemoveField(
-            model_name='proposalreview',
-            name='review_ptr',
+            model_name="proposalreview",
+            name="review_ptr",
         ),
         migrations.AlterField(
-            model_name='review',
-            name='review',
+            model_name="review",
+            name="review",
             field=django.contrib.postgres.fields.jsonb.JSONField(),
         ),
         migrations.DeleteModel(
-            name='ConceptReview',
+            name="ConceptReview",
         ),
         migrations.DeleteModel(
-            name='ProposalReview',
+            name="ProposalReview",
         ),
     ]
diff --git a/hypha/apply/review/migrations/0004_review_is_draft.py b/hypha/apply/review/migrations/0004_review_is_draft.py
index 4e802ee1fa008b00a0031272ca66c62daa742896..516ca2eeeae01a8272fbabe67fe8a31500f29fe8 100644
--- a/hypha/apply/review/migrations/0004_review_is_draft.py
+++ b/hypha/apply/review/migrations/0004_review_is_draft.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0003_review_json_field'),
+        ("review", "0003_review_json_field"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='review',
-            name='is_draft',
-            field=models.BooleanField(default=False, verbose_name='Draft'),
+            model_name="review",
+            name="is_draft",
+            field=models.BooleanField(default=False, verbose_name="Draft"),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0005_streamform.py b/hypha/apply/review/migrations/0005_streamform.py
index d911e2a9fa614e997e2080b435721bec0c90bba7..06098640877db469b311622e71b1aedad3100aa8 100644
--- a/hypha/apply/review/migrations/0005_streamform.py
+++ b/hypha/apply/review/migrations/0005_streamform.py
@@ -9,29 +9,386 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0004_review_is_draft'),
+        ("review", "0004_review_is_draft"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ReviewForm',
+            name="ReviewForm",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('form_fields', wagtail.fields.StreamField((('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('Recommendation', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('Comments', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required'))))),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=255)),
+                (
+                    "form_fields",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "rich_text",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "char",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "format",
+                                            wagtail.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("email", "Email"),
+                                                    ("url", "URL"),
+                                                ],
+                                                label="Format",
+                                                required=False,
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.CharBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "default_value",
+                                            wagtail.blocks.TextBlock(
+                                                label="Default value", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "text_markup",
+                                wagtail.blocks.RichTextBlock(
+                                    group="Fields", label="Paragraph"
+                                ),
+                            ),
+                            (
+                                "score",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "required",
+                                            wagtail.blocks.BooleanBlock(
+                                                label="Required", required=False
+                                            ),
+                                        ),
+                                    ),
+                                    group="Fields",
+                                ),
+                            ),
+                            (
+                                "Recommendation",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "info",
+                                            wagtail.blocks.static_block.StaticBlock(),
+                                        ),
+                                    ),
+                                    group="Required",
+                                ),
+                            ),
+                            (
+                                "Comments",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "field_label",
+                                            wagtail.blocks.CharBlock(label="Label"),
+                                        ),
+                                        (
+                                            "help_text",
+                                            wagtail.blocks.TextBlock(
+                                                label="Help text", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "info",
+                                            wagtail.blocks.static_block.StaticBlock(),
+                                        ),
+                                    ),
+                                    group="Required",
+                                ),
+                            ),
+                        )
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='review',
-            name='form_data',
-            field=django.contrib.postgres.fields.jsonb.JSONField(default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
+            model_name="review",
+            name="form_data",
+            field=django.contrib.postgres.fields.jsonb.JSONField(
+                default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder
+            ),
         ),
         migrations.AddField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('Recommendation', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('Comments', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "Recommendation",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "Comments",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/apply/review/migrations/0006_remove_review_review.py b/hypha/apply/review/migrations/0006_remove_review_review.py
index 5103383b2f84077ef2a0370584258447fe148ee9..2ddf15bad096acb0eb2cef09331c1688224ddacb 100644
--- a/hypha/apply/review/migrations/0006_remove_review_review.py
+++ b/hypha/apply/review/migrations/0006_remove_review_review.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0005_streamform'),
+        ("review", "0005_streamform"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='review',
-            name='review',
+            model_name="review",
+            name="review",
         ),
     ]
diff --git a/hypha/apply/review/migrations/0007_review_revision.py b/hypha/apply/review/migrations/0007_review_revision.py
index 7c58d56bd34589073d755de95f43caa26c7b5578..bf9e4abe1e351b2aa0c07ac2feee085b48b0010c 100644
--- a/hypha/apply/review/migrations/0007_review_revision.py
+++ b/hypha/apply/review/migrations/0007_review_revision.py
@@ -5,16 +5,20 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('funds', '0041_roundbasereviewform'),
-        ('review', '0006_remove_review_review'),
+        ("funds", "0041_roundbasereviewform"),
+        ("review", "0006_remove_review_review"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='review',
-            name='revision',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviews', to='funds.ApplicationRevision'),
+            model_name="review",
+            name="revision",
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="reviews",
+                to="funds.ApplicationRevision",
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0008_update_fields_for_tweaks.py b/hypha/apply/review/migrations/0008_update_fields_for_tweaks.py
index 08add109343fde4f3c8a10147df311fda18fbde5..1af821158a8abdaeb4ef26aa04b34ecff02be9a9 100644
--- a/hypha/apply/review/migrations/0008_update_fields_for_tweaks.py
+++ b/hypha/apply/review/migrations/0008_update_fields_for_tweaks.py
@@ -7,20 +7,353 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0007_review_revision'),
+        ("review", "0007_review_revision"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('recommendation', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('comments', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField((('rich_text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('char', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))), group='Fields')), ('text', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))), group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))), group='Fields')), ('recommendation', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')), ('comments', wagtail.blocks.StructBlock((('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())), group='Required')))),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ),
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            (
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ),
+                            group="Required",
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0009_auto_20180823_0918.py b/hypha/apply/review/migrations/0009_auto_20180823_0918.py
index fb913379eca8ab511aa8e1ff81c0ed80c8f96a48..3b5e66d3e963af0f66fcfbe9bf9f46e51ba37975 100644
--- a/hypha/apply/review/migrations/0009_auto_20180823_0918.py
+++ b/hypha/apply/review/migrations/0009_auto_20180823_0918.py
@@ -7,20 +7,457 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0008_update_fields_for_tweaks'),
+        ("review", "0008_update_fields_for_tweaks"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0010_review_drupal_id.py b/hypha/apply/review/migrations/0010_review_drupal_id.py
index 4917631402ed967ef155e450cc5236d9dcf2339f..a5b4461235df41b54384ee0ffb8c78f56e16250f 100644
--- a/hypha/apply/review/migrations/0010_review_drupal_id.py
+++ b/hypha/apply/review/migrations/0010_review_drupal_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0009_auto_20180823_0918'),
+        ("review", "0009_auto_20180823_0918"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='review',
-            name='drupal_id',
+            model_name="review",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0011_add_date_fields.py b/hypha/apply/review/migrations/0011_add_date_fields.py
index 7758db9f85dfb19515078c581019c729a1ac4890..39b1279e978624bf2c0b41f651d05bdc83da50be 100644
--- a/hypha/apply/review/migrations/0011_add_date_fields.py
+++ b/hypha/apply/review/migrations/0011_add_date_fields.py
@@ -5,21 +5,24 @@ import django.utils.timezone
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0010_review_drupal_id'),
+        ("review", "0010_review_drupal_id"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='review',
-            name='created_at',
-            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='Creation time'),
+            model_name="review",
+            name="created_at",
+            field=models.DateTimeField(
+                auto_now_add=True,
+                default=django.utils.timezone.now,
+                verbose_name="Creation time",
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='review',
-            name='updated_at',
-            field=models.DateTimeField(auto_now=True, verbose_name='Update time'),
+            model_name="review",
+            name="updated_at",
+            field=models.DateTimeField(auto_now=True, verbose_name="Update time"),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0012_auto_20180926_0948.py b/hypha/apply/review/migrations/0012_auto_20180926_0948.py
index a5da5235d7e6392ee4f15736308c3a6fd2239b3f..3d172e7bd1ead51c160f4c0e7e042b94b567231a 100644
--- a/hypha/apply/review/migrations/0012_auto_20180926_0948.py
+++ b/hypha/apply/review/migrations/0012_auto_20180926_0948.py
@@ -7,20 +7,469 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0011_add_date_fields'),
+        ("review", "0011_add_date_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group='Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group="Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0013_rename_fields.py b/hypha/apply/review/migrations/0013_rename_fields.py
index 9e18d0489a23adca391cdd8cd6689ddf3510ffb4..e1eed3a2eeb7845e02847133330edc7162541a04 100644
--- a/hypha/apply/review/migrations/0013_rename_fields.py
+++ b/hypha/apply/review/migrations/0013_rename_fields.py
@@ -7,20 +7,469 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0012_auto_20180926_0948'),
+        ("review", "0012_auto_20180926_0948"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0014_add_markdown.py b/hypha/apply/review/migrations/0014_add_markdown.py
index 914d4e429a1304d67782e44d8ea6633fc631f7a8..311e5b1559c43a5e36389ddd8085d278d7d9647e 100644
--- a/hypha/apply/review/migrations/0014_add_markdown.py
+++ b/hypha/apply/review/migrations/0014_add_markdown.py
@@ -7,20 +7,529 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0013_rename_fields'),
+        ("review", "0013_rename_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0015_review_opinion.py b/hypha/apply/review/migrations/0015_review_opinion.py
index d96d7c561190ae58bcc49d06a69afbd1de38f4f2..ea69c86a9e0eb7f5e736cd04aa2e98f8475b5346 100644
--- a/hypha/apply/review/migrations/0015_review_opinion.py
+++ b/hypha/apply/review/migrations/0015_review_opinion.py
@@ -6,24 +6,47 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('review', '0014_add_markdown'),
+        ("review", "0014_add_markdown"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ReviewOpinion',
+            name="ReviewOpinion",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('opinion', models.IntegerField(choices=[(1, 'Agree'), (0, 'Disagree')])),
-                ('author', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
-                ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='opinions', to='review.Review')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "opinion",
+                    models.IntegerField(choices=[(1, "Agree"), (0, "Disagree")]),
+                ),
+                (
+                    "author",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to=settings.AUTH_USER_MODEL,
+                    ),
+                ),
+                (
+                    "review",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="opinions",
+                        to="review.Review",
+                    ),
+                ),
             ],
         ),
         migrations.AlterUniqueTogether(
-            name='reviewopinion',
-            unique_together={('author', 'review')},
+            name="reviewopinion",
+            unique_together={("author", "review")},
         ),
     ]
diff --git a/hypha/apply/review/migrations/0016_review_visibility.py b/hypha/apply/review/migrations/0016_review_visibility.py
index ab408d94185ab408fcbf279ab7846925ab071829..26e4436a908716128a822464c3be2b0681eb6795 100644
--- a/hypha/apply/review/migrations/0016_review_visibility.py
+++ b/hypha/apply/review/migrations/0016_review_visibility.py
@@ -7,25 +7,577 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0015_review_opinion'),
+        ("review", "0015_review_opinion"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='review',
-            name='visibility',
-            field=models.CharField(choices=[('private', 'Private'), ('reviewers', 'Reviewers and Staff')], default='private', max_length=10, verbose_name='Visibility'),
+            model_name="review",
+            name="visibility",
+            field=models.CharField(
+                choices=[("private", "Private"), ("reviewers", "Reviewers and Staff")],
+                default="private",
+                max_length=10,
+                verbose_name="Visibility",
+            ),
         ),
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0017_add_temp_author_field.py b/hypha/apply/review/migrations/0017_add_temp_author_field.py
index 7a5e44a4a21586842ed31bf1b084817298aca6d5..748ba78fd41664957d184411e7c4438f45106084 100644
--- a/hypha/apply/review/migrations/0017_add_temp_author_field.py
+++ b/hypha/apply/review/migrations/0017_add_temp_author_field.py
@@ -5,21 +5,29 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0016_review_visibility'),
+        ("review", "0016_review_visibility"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='review',
-            name='author_temp',
-            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='review', to='funds.AssignedReviewers', null=True),
+            model_name="review",
+            name="author_temp",
+            field=models.OneToOneField(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="review",
+                to="funds.AssignedReviewers",
+                null=True,
+            ),
         ),
         migrations.AddField(
-            model_name='reviewopinion',
-            name='author_temp',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='opinions', to='funds.AssignedReviewers', null=True),
+            model_name="reviewopinion",
+            name="author_temp",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="opinions",
+                to="funds.AssignedReviewers",
+                null=True,
+            ),
         ),
-
     ]
diff --git a/hypha/apply/review/migrations/0018_migrate_author_data.py b/hypha/apply/review/migrations/0018_migrate_author_data.py
index 8d541dabf451591cdd1c445ba736c56cbb20b452..fa6a94893379c0eba338bc0b23c49fb0681b68b5 100644
--- a/hypha/apply/review/migrations/0018_migrate_author_data.py
+++ b/hypha/apply/review/migrations/0018_migrate_author_data.py
@@ -7,25 +7,32 @@ from django.core.exceptions import ObjectDoesNotExist
 # importing and creating a future dependency. Changes to Group names should
 # be handled in another migration
 
-STAFF_GROUP_NAME = 'Staff'
-REVIEWER_GROUP_NAME = 'Reviewer'
-PARTNER_GROUP_NAME = 'Partner'
-COMMUNITY_REVIEWER_GROUP_NAME = 'Community reviewer'
+STAFF_GROUP_NAME = "Staff"
+REVIEWER_GROUP_NAME = "Reviewer"
+PARTNER_GROUP_NAME = "Partner"
+COMMUNITY_REVIEWER_GROUP_NAME = "Community reviewer"
 
-REVIEWER_GROUPS = {STAFF_GROUP_NAME,
+REVIEWER_GROUPS = {
+    STAFF_GROUP_NAME,
     REVIEWER_GROUP_NAME,
     COMMUNITY_REVIEWER_GROUP_NAME,
-    PARTNER_GROUP_NAME,}
+    PARTNER_GROUP_NAME,
+}
 
 
 def add_to_assigned_reviewers(apps, schema_editor):
-    Review = apps.get_model('review', 'Review')
-    AssignedReviewer = apps.get_model('funds', 'AssignedReviewers')
-    Group = apps.get_model('auth', 'Group')
-    for review in Review.objects.select_related('author'):
-        groups = set(review.author.groups.values_list('name', flat=True)) & REVIEWER_GROUPS
+    Review = apps.get_model("review", "Review")
+    AssignedReviewer = apps.get_model("funds", "AssignedReviewers")
+    Group = apps.get_model("auth", "Group")
+    for review in Review.objects.select_related("author"):
+        groups = (
+            set(review.author.groups.values_list("name", flat=True)) & REVIEWER_GROUPS
+        )
         if len(groups) > 1:
-            if PARTNER_GROUP_NAME in groups and review.author in review.submission.partners.all():
+            if (
+                PARTNER_GROUP_NAME in groups
+                and review.author in review.submission.partners.all()
+            ):
                 groups = {PARTNER_GROUP_NAME}
             elif COMMUNITY_REVIEWER_GROUP_NAME in groups:
                 groups = {COMMUNITY_REVIEWER_GROUP_NAME}
@@ -44,22 +51,22 @@ def add_to_assigned_reviewers(apps, schema_editor):
         assignment, _ = AssignedReviewer.objects.update_or_create(
             submission=review.submission,
             reviewer=review.author,
-            defaults={'type': group},
+            defaults={"type": group},
         )
         review.author_temp = assignment
         review.save()
-        for opinion in review.opinions.select_related('author'):
+        for opinion in review.opinions.select_related("author"):
             opinion_assignment, _ = AssignedReviewer.objects.update_or_create(
                 submission=review.submission,
                 reviewer=opinion.author,
-                defaults={'type': Group.objects.get(name=STAFF_GROUP_NAME)},
+                defaults={"type": Group.objects.get(name=STAFF_GROUP_NAME)},
             )
             opinion.author_temp = opinion_assignment
             opinion.save()
 
 
 def add_to_review_and_opinion(apps, schema_editor):
-    AssignedReviewer = apps.get_model('funds', 'AssignedReviewers')
+    AssignedReviewer = apps.get_model("funds", "AssignedReviewers")
     for assigned in AssignedReviewer.objects.all():
         try:
             assigned.review.author = assigned.reviewer
@@ -73,11 +80,10 @@ def add_to_review_and_opinion(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0017_add_temp_author_field'),
-        ('funds', '0063_make_reviewer_type_required'),
-        ('users', '0010_add_community_reviewer_group'),
+        ("review", "0017_add_temp_author_field"),
+        ("funds", "0063_make_reviewer_type_required"),
+        ("users", "0010_add_community_reviewer_group"),
     ]
 
     operations = [
diff --git a/hypha/apply/review/migrations/0019_replace_existing_author_field.py b/hypha/apply/review/migrations/0019_replace_existing_author_field.py
index a5de51876c95f40b2c9854838c8603c315166307..a0a56ed2f69d4e2791155f2f9706080f67cb64d4 100644
--- a/hypha/apply/review/migrations/0019_replace_existing_author_field.py
+++ b/hypha/apply/review/migrations/0019_replace_existing_author_field.py
@@ -5,38 +5,45 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0018_migrate_author_data'),
+        ("review", "0018_migrate_author_data"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='review',
-            name='author',
+            model_name="review",
+            name="author",
         ),
         migrations.RenameField(
-            model_name='review',
-            old_name='author_temp',
-            new_name='author',
+            model_name="review",
+            old_name="author_temp",
+            new_name="author",
         ),
         migrations.AlterField(
-            model_name='review',
-            name='author',
-            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='review', to='funds.AssignedReviewers'),
+            model_name="review",
+            name="author",
+            field=models.OneToOneField(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="review",
+                to="funds.AssignedReviewers",
+            ),
         ),
         migrations.RemoveField(
-            model_name='reviewopinion',
-            name='author',
+            model_name="reviewopinion",
+            name="author",
         ),
         migrations.RenameField(
-            model_name='reviewopinion',
-            old_name='author_temp',
-            new_name='author',
+            model_name="reviewopinion",
+            old_name="author_temp",
+            new_name="author",
         ),
         migrations.AlterField(
-            model_name='reviewopinion',
-            name='author',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='opinions', to='funds.AssignedReviewers'),
+            model_name="reviewopinion",
+            name="author",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="opinions",
+                to="funds.AssignedReviewers",
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0020_review_score_calc_update.py b/hypha/apply/review/migrations/0020_review_score_calc_update.py
index f31dd48245008764f26d5cf2c0499e0fb9d1ea66..922026c41c782229d4d532fd3ff4d9125ccd95ac 100644
--- a/hypha/apply/review/migrations/0020_review_score_calc_update.py
+++ b/hypha/apply/review/migrations/0020_review_score_calc_update.py
@@ -10,7 +10,7 @@ def review_score_update(apps, schema_editor):
     for review in Review.objects.all():
         # Disable auto_now on "updated_at" field so date is not changed.
         for field in review._meta.local_fields:
-            if field.name == 'updated_at':
+            if field.name == "updated_at":
                 field.auto_now = False
         # Update the score and save.
         scores = []
@@ -33,7 +33,7 @@ def review_score_revert(apps, schema_editor):
     for review in Review.objects.all():
         # Disable auto_now on "updated_at" field so date is not changed.
         for field in review._meta.local_fields:
-            if field.name == 'updated_at':
+            if field.name == "updated_at":
                 field.auto_now = False
         # Update the score and save.
         scores = []
@@ -52,9 +52,8 @@ def review_score_revert(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0019_replace_existing_author_field'),
+        ("review", "0019_replace_existing_author_field"),
     ]
 
     operations = [
diff --git a/hypha/apply/review/migrations/0021_add_help_link_field.py b/hypha/apply/review/migrations/0021_add_help_link_field.py
index 3e89675f4363870eb7f7af6428a223a748e41110..e6ead2f0834f9bddfb89eebb7761c1f698ce2880 100644
--- a/hypha/apply/review/migrations/0021_add_help_link_field.py
+++ b/hypha/apply/review/migrations/0021_add_help_link_field.py
@@ -7,20 +7,687 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0020_review_score_calc_update'),
+        ("review", "0020_review_score_calc_update"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0022_add_word_limit_to_text_blocks.py b/hypha/apply/review/migrations/0022_add_word_limit_to_text_blocks.py
index 7c2e3d67f7736c494409833f54c2cd8c2048215a..f8fade9c7b431e851d732b7e2c54110ca278c7e4 100644
--- a/hypha/apply/review/migrations/0022_add_word_limit_to_text_blocks.py
+++ b/hypha/apply/review/migrations/0022_add_word_limit_to_text_blocks.py
@@ -7,20 +7,723 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0021_add_help_link_field'),
+        ("review", "0021_add_help_link_field"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0023_add_score_without_text_block.py b/hypha/apply/review/migrations/0023_add_score_without_text_block.py
index 0a7873d5abc941dfd76f0e9f5606f8a83b416d66..645652641f87528ac7a0b5ce1fed0f7d65106694 100644
--- a/hypha/apply/review/migrations/0023_add_score_without_text_block.py
+++ b/hypha/apply/review/migrations/0023_add_score_without_text_block.py
@@ -7,20 +7,783 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0022_add_word_limit_to_text_blocks'),
+        ("review", "0022_add_word_limit_to_text_blocks"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('score_without_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "score_without_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('score_without_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))]),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "score_without_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0024_auto_20220111_1314.py b/hypha/apply/review/migrations/0024_auto_20220111_1314.py
index f42ea70e5e095befa28b54f29f16a8b8136f5bc3..4a8d64a065e5a22ccdf733f9cc0a7de6593febe8 100644
--- a/hypha/apply/review/migrations/0024_auto_20220111_1314.py
+++ b/hypha/apply/review/migrations/0024_auto_20220111_1314.py
@@ -5,15 +5,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0023_add_score_without_text_block'),
+        ("review", "0023_add_score_without_text_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_data',
-            field=models.JSONField(default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder),
+            model_name="review",
+            name="form_data",
+            field=models.JSONField(
+                default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder
+            ),
         ),
     ]
diff --git a/hypha/apply/review/migrations/0025_auto_20220722_0844.py b/hypha/apply/review/migrations/0025_auto_20220722_0844.py
index 0b1ddaf48c0f1104cce6c085ada248569c27ef7b..d8ca94b73e5ff1c66298befeb99ea36a0edb7b4e 100644
--- a/hypha/apply/review/migrations/0025_auto_20220722_0844.py
+++ b/hypha/apply/review/migrations/0025_auto_20220722_0844.py
@@ -7,20 +7,785 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('review', '0024_auto_20220111_1314'),
+        ("review", "0024_auto_20220111_1314"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='review',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('score_without_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], use_json_field=True),
+            model_name="review",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "score_without_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='reviewform',
-            name='form_fields',
-            field=wagtail.fields.StreamField([('rich_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('markdown_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('char', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('format', wagtail.blocks.ChoiceBlock(choices=[('email', 'Email'), ('url', 'URL')], label='Format', required=False)), ('default_value', wagtail.blocks.CharBlock(label='Default value', required=False))], group='Fields')), ('text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.TextBlock(label='Default value', required=False)), ('word_limit', wagtail.blocks.IntegerBlock(default=1000, label='Word limit'))], group='Fields')), ('text_markup', wagtail.blocks.RichTextBlock(group='Fields', label='Paragraph')), ('score', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('score_without_text', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False))], group='Fields')), ('checkbox', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('default_value', wagtail.blocks.BooleanBlock(required=False))], group='Fields')), ('dropdown', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('required', wagtail.blocks.BooleanBlock(label='Required', required=False)), ('choices', wagtail.blocks.ListBlock(wagtail.blocks.CharBlock(label='Choice')))], group='Fields')), ('recommendation', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('comments', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required')), ('visibility', wagtail.blocks.StructBlock([('field_label', wagtail.blocks.CharBlock(label='Label')), ('help_text', wagtail.blocks.TextBlock(label='Help text', required=False)), ('help_link', wagtail.blocks.URLBlock(label='Help link', required=False)), ('info', wagtail.blocks.static_block.StaticBlock())], group=' Required'))], use_json_field=True),
+            model_name="reviewform",
+            name="form_fields",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "rich_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "markdown_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "char",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "format",
+                                    wagtail.blocks.ChoiceBlock(
+                                        choices=[("email", "Email"), ("url", "URL")],
+                                        label="Format",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.CharBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.TextBlock(
+                                        label="Default value", required=False
+                                    ),
+                                ),
+                                (
+                                    "word_limit",
+                                    wagtail.blocks.IntegerBlock(
+                                        default=1000, label="Word limit"
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "text_markup",
+                        wagtail.blocks.RichTextBlock(group="Fields", label="Paragraph"),
+                    ),
+                    (
+                        "score",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "score_without_text",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "checkbox",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "default_value",
+                                    wagtail.blocks.BooleanBlock(required=False),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "dropdown",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                (
+                                    "required",
+                                    wagtail.blocks.BooleanBlock(
+                                        label="Required", required=False
+                                    ),
+                                ),
+                                (
+                                    "choices",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.CharBlock(label="Choice")
+                                    ),
+                                ),
+                            ],
+                            group="Fields",
+                        ),
+                    ),
+                    (
+                        "recommendation",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "comments",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                    (
+                        "visibility",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "field_label",
+                                    wagtail.blocks.CharBlock(label="Label"),
+                                ),
+                                (
+                                    "help_text",
+                                    wagtail.blocks.TextBlock(
+                                        label="Help text", required=False
+                                    ),
+                                ),
+                                (
+                                    "help_link",
+                                    wagtail.blocks.URLBlock(
+                                        label="Help link", required=False
+                                    ),
+                                ),
+                                ("info", wagtail.blocks.static_block.StaticBlock()),
+                            ],
+                            group=" Required",
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/apply/review/models.py b/hypha/apply/review/models.py
index 1afbdaa2f60e3989c1807e54e37706c72870162d..19dc4ff3aea5e8d8e77d00b4d36fc20463e6d885 100644
--- a/hypha/apply/review/models.py
+++ b/hypha/apply/review/models.py
@@ -37,7 +37,6 @@ from .options import (
 
 
 class ReviewFormFieldsMixin(models.Model):
-
     wagtail_reference_index_ignore = True
 
     class Meta:
@@ -84,8 +83,8 @@ class ReviewForm(ReviewFormFieldsMixin, models.Model):
     name = models.CharField(max_length=255)
 
     panels = [
-        FieldPanel('name'),
-        FieldPanel('form_fields'),
+        FieldPanel("name"),
+        FieldPanel("form_fields"),
     ]
 
     def __str__(self):
@@ -97,7 +96,7 @@ class ReviewQuerySet(models.QuerySet):
         return self.filter(is_draft=False)
 
     def _by_group(self, group):
-        return self.select_related('author__type').filter(author__type__name=group)
+        return self.select_related("author__type").filter(author__type__name=group)
 
     def by_staff(self):
         return self.submitted()._by_group(STAFF_GROUP_NAME)
@@ -109,7 +108,7 @@ class ReviewQuerySet(models.QuerySet):
         return self.submitted()._by_group(PARTNER_GROUP_NAME)
 
     def by_user(self, user):
-        return self.submitted().filter(author__reviewer=user).order_by('-created_at')
+        return self.submitted().filter(author__reviewer=user).order_by("-created_at")
 
     def staff_score(self):
         return self.by_staff().score()
@@ -124,15 +123,15 @@ class ReviewQuerySet(models.QuerySet):
         return self.by_reviewers().recommendation()
 
     def score(self):
-        return self.exclude(score=NA).aggregate(models.Avg('score'))['score__avg']
+        return self.exclude(score=NA).aggregate(models.Avg("score"))["score__avg"]
 
     def recommendation(self):
-        opinions = self.values_list('opinions__opinion', flat=True)
+        opinions = self.values_list("opinions__opinion", flat=True)
 
         if any(opinion == DISAGREE for opinion in opinions):
             return MAYBE
 
-        recommendations = self.values_list('recommendation', flat=True)
+        recommendations = self.values_list("recommendation", flat=True)
         try:
             recommendation = sum(recommendations) / len(recommendations)
         except ZeroDivisionError:
@@ -145,26 +144,42 @@ class ReviewQuerySet(models.QuerySet):
             return MAYBE
 
     def opinions(self):
-        return ReviewOpinion.objects.filter(review__id__in=self.values_list('id'))
+        return ReviewOpinion.objects.filter(review__id__in=self.values_list("id"))
 
 
 class Review(ReviewFormFieldsMixin, BaseStreamForm, AccessFormData, models.Model):
-    submission = models.ForeignKey('funds.ApplicationSubmission', on_delete=models.CASCADE, related_name='reviews')
-    revision = models.ForeignKey('funds.ApplicationRevision', on_delete=models.SET_NULL, related_name='reviews', null=True)
+    submission = models.ForeignKey(
+        "funds.ApplicationSubmission", on_delete=models.CASCADE, related_name="reviews"
+    )
+    revision = models.ForeignKey(
+        "funds.ApplicationRevision",
+        on_delete=models.SET_NULL,
+        related_name="reviews",
+        null=True,
+    )
     author = models.OneToOneField(
-        'funds.AssignedReviewers',
-        related_name='review',
+        "funds.AssignedReviewers",
+        related_name="review",
         on_delete=models.CASCADE,
     )
 
     form_data = models.JSONField(default=dict, encoder=DjangoJSONEncoder)
 
-    recommendation = models.IntegerField(verbose_name=_("Recommendation"), choices=RECOMMENDATION_CHOICES, default=0)
+    recommendation = models.IntegerField(
+        verbose_name=_("Recommendation"), choices=RECOMMENDATION_CHOICES, default=0
+    )
     score = models.DecimalField(max_digits=10, decimal_places=1, default=0)
     is_draft = models.BooleanField(default=False, verbose_name=_("Draft"))
-    created_at = models.DateTimeField(verbose_name=_("Creation time"), auto_now_add=True)
+    created_at = models.DateTimeField(
+        verbose_name=_("Creation time"), auto_now_add=True
+    )
     updated_at = models.DateTimeField(verbose_name=_("Update time"), auto_now=True)
-    visibility = models.CharField(verbose_name=_("Visibility"), choices=VISIBILITY.items(), default=PRIVATE, max_length=10)
+    visibility = models.CharField(
+        verbose_name=_("Visibility"),
+        choices=VISIBILITY.items(),
+        default=PRIVATE,
+        max_length=10,
+    )
 
     # Meta: used for migration purposes only
     drupal_id = models.IntegerField(null=True, blank=True, editable=False)
@@ -172,27 +187,35 @@ class Review(ReviewFormFieldsMixin, BaseStreamForm, AccessFormData, models.Model
     objects = ReviewQuerySet.as_manager()
 
     class Meta:
-        unique_together = ('author', 'submission')
+        unique_together = ("author", "submission")
 
     @property
     def outcome(self):
         return self.get_recommendation_display()
 
     def get_comments_display(self, include_question=True):
-        return self.render_answer(self.comment_field.id, include_question=include_question)
+        return self.render_answer(
+            self.comment_field.id, include_question=include_question
+        )
 
     @property
     def get_score_display(self):
-        return '{:.1f}'.format(self.score) if self.score != NA else 'NA'
+        return "{:.1f}".format(self.score) if self.score != NA else "-"
 
     def get_absolute_url(self):
-        return reverse('apply:submissions:reviews:review', args=(self.submission.pk, self.id,))
+        return reverse(
+            "apply:submissions:reviews:review",
+            args=(
+                self.submission.pk,
+                self.id,
+            ),
+        )
 
     def __str__(self):
-        return f'Review for {self.submission.title} by {self.author!s}'
+        return f"Review for {self.submission.title} by {self.author!s}"
 
     def __repr__(self):
-        return f'<{self.__class__.__name__}: {str(self.form_data)}>'
+        return f"<{self.__class__.__name__}: {str(self.form_data)}>"
 
     @property
     def for_latest(self):
@@ -212,16 +235,18 @@ class Review(ReviewFormFieldsMixin, BaseStreamForm, AccessFormData, models.Model
 
 
 class ReviewOpinion(models.Model):
-    review = models.ForeignKey(Review, on_delete=models.CASCADE, related_name='opinions')
+    review = models.ForeignKey(
+        Review, on_delete=models.CASCADE, related_name="opinions"
+    )
     author = models.ForeignKey(
-        'funds.AssignedReviewers',
-        related_name='opinions',
+        "funds.AssignedReviewers",
+        related_name="opinions",
         on_delete=models.CASCADE,
     )
     opinion = models.IntegerField(choices=OPINION_CHOICES)
 
     class Meta:
-        unique_together = ('author', 'review')
+        unique_together = ("author", "review")
 
     @property
     def opinion_display(self):
diff --git a/hypha/apply/review/options.py b/hypha/apply/review/options.py
index ebf99ae28e7225c8be50f5767640d4636a38fc79..aad50ced306ef67f6f6dafb90b97c2f973e6b441 100644
--- a/hypha/apply/review/options.py
+++ b/hypha/apply/review/options.py
@@ -3,13 +3,13 @@ from django.utils.translation import gettext as _
 NA = 99
 
 RATE_CHOICES = (
-    (0, _('0. Need more info')),
-    (1, _('1. Poor')),
-    (2, _('2. Not so good')),
-    (3, _('3. Is o.k.')),
-    (4, _('4. Good')),
-    (5, _('5. Excellent')),
-    (NA, _('n/a - choose not to answer')),
+    (0, _("0. Need more info")),
+    (1, _("1. Poor")),
+    (2, _("2. Not so good")),
+    (3, _("3. Is o.k.")),
+    (4, _("4. Good")),
+    (5, _("5. Excellent")),
+    (NA, _("n/a - choose not to answer")),
 )
 
 RATE_CHOICES_DICT = dict(RATE_CHOICES)
@@ -20,28 +20,28 @@ MAYBE = 1
 YES = 2
 
 RECOMMENDATION_CHOICES = (
-    (NO, _('No')),
-    (MAYBE, _('Maybe')),
-    (YES, _('Yes')),
+    (NO, _("No")),
+    (MAYBE, _("Maybe")),
+    (YES, _("Yes")),
 )
 
 DISAGREE = 0
 AGREE = 1
 
 OPINION_CHOICES = (
-    (AGREE, _('Agree')),
-    (DISAGREE, _('Disagree')),
+    (AGREE, _("Agree")),
+    (DISAGREE, _("Disagree")),
 )
 
-PRIVATE = 'private'
-REVIEWER = 'reviewers'
+PRIVATE = "private"
+REVIEWER = "reviewers"
 
 VISIBILILTY_HELP_TEXT = {
-    PRIVATE: _('Visible only to staff.'),
-    REVIEWER: _('Visible to other reviewers and staff.'),
+    PRIVATE: _("Visible only to staff."),
+    REVIEWER: _("Visible to other reviewers and staff."),
 }
 
 VISIBILITY = {
-    PRIVATE: _('Private'),
-    REVIEWER: _('Reviewers and Staff'),
+    PRIVATE: _("Private"),
+    REVIEWER: _("Reviewers and Staff"),
 }
diff --git a/hypha/apply/review/templates/review/includes/review_opinions_list.html b/hypha/apply/review/templates/review/includes/review_opinions_list.html
index 0cc942d17bf8bd1c4536731dbeeed1e69a967e37..e186ced5b3e337344aa4aea33ea22e7f17d62066 100644
--- a/hypha/apply/review/templates/review/includes/review_opinions_list.html
+++ b/hypha/apply/review/templates/review/includes/review_opinions_list.html
@@ -1,13 +1,13 @@
 {% load wagtailimages_tags %}
 
 {% if opinions %}
-	<ul>
-	{% for opinion in opinions %}
-	    <li>
-	        {{ opinion.author }}
-	        {% if opinion.get_author_assignment %}{% image opinion.get_author_assignment.icon max-12x12 %}{% endif %}
-	        {{ opinion.get_opinion_display }}s
-	    </li>
-	{% endfor %}
-	</ul>
+    <ul>
+        {% for opinion in opinions %}
+            <li>
+                {{ opinion.author }}
+                {% if opinion.get_author_assignment %}{% image opinion.get_author_assignment.icon max-12x12 %}{% endif %}
+                {{ opinion.get_opinion_display }}s
+            </li>
+        {% endfor %}
+    </ul>
 {% endif %}
\ No newline at end of file
diff --git a/hypha/apply/review/templates/review/render_scored_answer_field.html b/hypha/apply/review/templates/review/render_scored_answer_field.html
index 7a7665c0fa3b06faf31b4f7ecaa8c1e9e8e99bc4..a3ac5718d0616c3b8d8d3dd110ddfa9db5d0e42a 100644
--- a/hypha/apply/review/templates/review/render_scored_answer_field.html
+++ b/hypha/apply/review/templates/review/render_scored_answer_field.html
@@ -1,8 +1,8 @@
 {% load bleach_tags %}
 {% block data_display %}
-<div>
-    <h5>{{ value.field_label }}</h5>
-    <div>{{ score }}</div>
-    <div>{{ comment|bleach }}</div>
-</div>
+    <div>
+        <h5>{{ value.field_label }}</h5>
+        <div>{{ score }}</div>
+        <div>{{ comment|bleach }}</div>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/review/templates/review/review_confirm_delete.html b/hypha/apply/review/templates/review/review_confirm_delete.html
index b1f803d5d436a7ee52e8543ba8cb7d08f2e7fcb2..21238b428002c3a7369f43027bbbb54dae56fe34 100644
--- a/hypha/apply/review/templates/review/review_confirm_delete.html
+++ b/hypha/apply/review/templates/review/review_confirm_delete.html
@@ -4,19 +4,19 @@
 {% block title %}{% trans "Deleting" %}: {{ object }}{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h2 class="heading heading--no-margin">{% trans "Deleting" %}: {{ object }}</h2>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h2 class="heading heading--no-margin">{% trans "Deleting" %}: {{ object }}</h2>
+        </div>
     </div>
-</div>
 
-<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        <form class="form" action="" method="post">
-            {% csrf_token %}
-            <p><strong>{% trans "Are you sure you want to delete" %} "{{ object }}"?</strong></p>
-            <button class="button button--warning button--submit button--top-space" type="submit">{% trans "Confirm" %}</button>
-        </form>
+    <div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            <form class="form" action="" method="post">
+                {% csrf_token %}
+                <p><strong>{% trans "Are you sure you want to delete" %} "{{ object }}"?</strong></p>
+                <button class="button button--warning button--submit button--top-space" type="submit">{% trans "Confirm" %}</button>
+            </form>
+        </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/review/templates/review/review_detail.html b/hypha/apply/review/templates/review/review_detail.html
index 9ea9627c212dadfbed193f5a98bf4a33646afee6..0378a705845cf1834a6ee587f41b0df832602ea1 100644
--- a/hypha/apply/review/templates/review/review_detail.html
+++ b/hypha/apply/review/templates/review/review_detail.html
@@ -2,71 +2,71 @@
 {% load i18n bleach_tags submission_tags %}
 {% block title %}{% trans "Review for" %} {{ review.submission.title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <a class="simplified__submissions-link" href="{{ review.submission.get_absolute_url }}">
-            {% trans "Back to submission" %}
-        </a>
-        <h1 class="beta heading heading--no-margin heading--bold">{% trans "Review" %}</h1>
-        <h5>{% trans "For" %}: {{ review.submission.title }} {% trans "by" %} {{ review.author }} {% trans "at" %} {{ review.created_at|date:"SHORT_DATE_FORMAT" }} {% if review.is_updated %}<small>({% trans "Last updated" %}: {{ review.updated_at|date:"SHORT_DATE_FORMAT" }})</small>{% endif %}</h5>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <a class="simplified__submissions-link" href="{{ review.submission.get_absolute_url }}">
+                {% trans "Back to submission" %}
+            </a>
+            <h1 class="beta heading heading--no-margin heading--bold">{% trans "Review" %}</h1>
+            <h5>{% trans "For" %}: {{ review.submission.title }} {% trans "by" %} {{ review.author }} {% trans "at" %} {{ review.created_at|date:"SHORT_DATE_FORMAT" }} {% if review.is_updated %}<small>({% trans "Last updated" %}: {{ review.updated_at|date:"SHORT_DATE_FORMAT" }})</small>{% endif %}</h5>
 
-        {% include 'review/includes/review_opinions_list.html' with opinions=review.opinions.all %}
+            {% include 'review/includes/review_opinions_list.html' with opinions=review.opinions.all %}
+        </div>
     </div>
-</div>
 
-<div style="display: flex; gap: 2rem; padding-top: 2rem;">
-    <div>
-        <h5>{% trans "Recommendation" %}</h5>
-        <p>{{ review.get_recommendation_display }}</p>
-    </div>
-    <div>
-        <h5>{% trans "Score" %}</h5>
-        <p>{{ review.get_score_display }}</p>
-    </div>
-    <div style="flex-grow: 1"></div>
-    <div>
-        <svg class="icon icon--eye"><use xlink:href="#eye"></use></svg>
-        {{ review.get_visibility_display }}
-    </div>
-    {% if perms.funds.delete_review or request.user == review.author.reviewer %}
+    <div style="display: flex; gap: 2rem; padding-top: 2rem;">
         <div>
-            <a class="link link--delete-review is-active" href="{% url 'apply:submissions:reviews:delete' submission_pk=object.submission.id pk=object.id %}">
-                {% trans "Delete" %}
-                <svg class="icon icon--delete"><use xlink:href="#delete"></use></svg>
-            </a>
+            <h5>{% trans "Recommendation" %}</h5>
+            <p>{{ review.get_recommendation_display }}</p>
         </div>
-    {% endif %}
-    {% if perms.funds.change_review or request.user == review.author.reviewer %}
         <div>
-            <a class="link link--edit-review is-active" href="{% url 'apply:submissions:reviews:edit' submission_pk=object.submission.id pk=object.id %}">
-                {% trans "Edit" %}
-                <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
-            </a>
+            <h5>{% trans "Score" %}</h5>
+            <p>{{ review.get_score_display }}</p>
         </div>
-    {% endif %}
-    {% if not review.for_latest %}
+        <div style="flex-grow: 1"></div>
         <div>
-            <h5>{% trans "Review was not against the latest version" %}:</h5>
-            <p>
-                <a class="button button--primary" href="{{ review.get_compare_url }}">{% trans "Compare" %}</a>
-            </p>
+            <svg class="icon icon--eye"><use xlink:href="#eye"></use></svg>
+            {{ review.get_visibility_display }}
         </div>
-    {% endif %}
-</div>
+        {% if perms.funds.delete_review or request.user == review.author.reviewer %}
+            <div>
+                <a class="link link--delete-review is-active" href="{% url 'apply:submissions:reviews:delete' submission_pk=object.submission.id pk=object.id %}">
+                    {% trans "Delete" %}
+                    <svg class="icon icon--delete"><use xlink:href="#delete"></use></svg>
+                </a>
+            </div>
+        {% endif %}
+        {% if perms.funds.change_review or request.user == review.author.reviewer %}
+            <div>
+                <a class="link link--edit-review is-active" href="{% url 'apply:submissions:reviews:edit' submission_pk=object.submission.id pk=object.id %}">
+                    {% trans "Edit" %}
+                    <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg>
+                </a>
+            </div>
+        {% endif %}
+        {% if not review.for_latest %}
+            <div>
+                <h5>{% trans "Review was not against the latest version" %}:</h5>
+                <p>
+                    <a class="button button--primary" href="{{ review.get_compare_url }}">{% trans "Compare" %}</a>
+                </p>
+            </div>
+        {% endif %}
+    </div>
 
-<div class="rich-text rich-text--answers">
-    {{ object.get_comments_display|submission_links }}
+    <div class="rich-text rich-text--answers">
+        {{ object.get_comments_display|submission_links }}
 
-    {{ object.output_answers|submission_links }}
-</div>
+        {{ object.output_answers|submission_links }}
+    </div>
 
-{% if form %}
-    <form method="post">
-        {% csrf_token %}
-        {{ form }}
-    </form>
+    {% if form %}
+        <form method="post">
+            {% csrf_token %}
+            {{ form }}
+        </form>
 
-    <P>{% trans "An opinion is a replacement for a review. You will no longer be able to submit a review for this application." %}</P>
-{% endif %}
+        <P>{% trans "An opinion is a replacement for a review. You will no longer be able to submit a review for this application." %}</P>
+    {% endif %}
 
 {% endblock %}
diff --git a/hypha/apply/review/templates/review/review_edit_form.html b/hypha/apply/review/templates/review/review_edit_form.html
index 4760bc0e3c9711e1c32f1ed08b27f1910e8a34e4..2be1c85cb34741be38413c6b4120650ef7beebfa 100644
--- a/hypha/apply/review/templates/review/review_edit_form.html
+++ b/hypha/apply/review/templates/review/review_edit_form.html
@@ -2,47 +2,47 @@
 {% load i18n static %}
 {% block title %}{{ title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h1 class="beta heading heading--no-margin heading--bold">{{ title }}</h1>
-        <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h1 class="beta heading heading--no-margin heading--bold">{{ title }}</h1>
+            <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
+        </div>
     </div>
-</div>
 
-{% include "forms/includes/form_errors.html" with form=form %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-<div class="wrapper wrapper--medium wrapper--inner-space-medium wrapper--flex">
-<form class="form form--with-p-tags form--scoreable form--width" action="" method="post" novalidate>
-    {{ form.media }}
-    {% csrf_token %}
+    <div class="wrapper wrapper--medium wrapper--inner-space-medium wrapper--flex">
+        <form class="form form--with-p-tags form--scoreable form--width" action="" method="post" novalidate>
+            {{ form.media }}
+            {% csrf_token %}
 
-    {% for hidden in form.hidden_fields %}
-        {{ hidden }}
-    {% endfor %}
+            {% for hidden in form.hidden_fields %}
+                {{ hidden }}
+            {% endfor %}
 
-    {% for field in form.visible_fields %}
+            {% for field in form.visible_fields %}
         {# to be replaced with better logic when we use stream form #}
-        {% ifchanged field.field.group %}
-            {% for key, value in form.titles.items %}
-                {% if key == field.field.group %}
-                    <h2>{{ value }}</h2>
+                {% ifchanged field.field.group %}
+                    {% for key, value in form.titles.items %}
+                        {% if key == field.field.group %}
+                            <h2>{{ value }}</h2>
+                        {% endif %}
+                    {% endfor %}
+                {% endifchanged %}
+
+                {% if field.field %}
+                    {% include "forms/includes/field.html" %}
+                {% else %}
+                    {{ field }}
                 {% endif %}
             {% endfor %}
-        {% endifchanged %}
-
-        {% if field.field %}
-            {% include "forms/includes/field.html" %}
-        {% else %}
-            {{ field }}
-        {% endif %}
-    {% endfor %}
-    {% if not object.id or object.is_draft %}
-        <button class="button button--submit button--top-space button--white" type="submit" name="{{ form.draft_button_name }}">{% trans "Save draft" %}</button>
-    {% endif %}
-    <button class="button button--submit button--top-space button--primary" type="submit" name="submit">{% trans "Submit" %}</button>
-</form>
-<div class="form--score-box">Score:0</div>
-</div>
+            {% if not object.id or object.is_draft %}
+                <button class="button button--submit button--top-space button--white" type="submit" name="{{ form.draft_button_name }}">{% trans "Save draft" %}</button>
+            {% endif %}
+            <button class="button button--submit button--top-space button--primary" type="submit" name="submit">{% trans "Submit" %}</button>
+        </form>
+        <div class="form--score-box">Score:0</div>
+    </div>
 {% endblock %}
 
 {% block extra_js %}
diff --git a/hypha/apply/review/templates/review/review_form.html b/hypha/apply/review/templates/review/review_form.html
index 22d64f82d4be0ce4e5ba93f2daa6a9d93d9ff952..eedc173f20673c6a2622013c33914c5e5fccd862 100644
--- a/hypha/apply/review/templates/review/review_form.html
+++ b/hypha/apply/review/templates/review/review_form.html
@@ -2,51 +2,51 @@
 {% load i18n static %}
 {% block title %}{{ title }}{% endblock %}
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner">
-        <h1 class="beta heading heading--no-margin heading--bold">{{ title }}</h1>
-        <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
+    <div class="admin-bar">
+        <div class="admin-bar__inner">
+            <h1 class="beta heading heading--no-margin heading--bold">{{ title }}</h1>
+            <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
+        </div>
     </div>
-</div>
 
-{% include "forms/includes/form_errors.html" with form=form %}
-<div class="wrapper wrapper--medium wrapper--inner-space-medium wrapper--flex">
-{% if not has_submitted_review %}
-    <form class="form form--with-p-tags form--scoreable form--width" action="" method="post">
-        {{ form.media }}
-        {% csrf_token %}
+    {% include "forms/includes/form_errors.html" with form=form %}
 
-        {% for hidden in form.hidden_fields %}
-            {{ hidden }}
-        {% endfor %}
+    <div class="wrapper wrapper--medium wrapper--inner-space-medium wrapper-flex">
+        {% if not has_submitted_review %}
+            <form class="form form--with-p-tags form--scoreable form--width" action="" method="post">
+                {{ form.media }}
+                {% csrf_token %}
 
-        {% for field in form.visible_fields %}
+                {% for hidden in form.hidden_fields %}
+                    {{ hidden }}
+                {% endfor %}
+
+                {% for field in form.visible_fields %}
             {# to be replaced with better logic when we use stream form #}
-            {% ifchanged field.field.group %}
-                {% for key, value in form.titles.items %}
-                    {% if key == field.field.group %}
-                        <h2>{{ value }}</h2>
+                    {% ifchanged field.field.group %}
+                        {% for key, value in form.titles.items %}
+                            {% if key == field.field.group %}
+                                <h2>{{ value }}</h2>
+                            {% endif %}
+                        {% endfor %}
+                    {% endifchanged %}
+
+                    {% if field.field %}
+                        {% include "forms/includes/field.html" %}
+                    {% else %}
+                        {{ field.block }}
                     {% endif %}
                 {% endfor %}
-            {% endifchanged %}
-
-            {% if field.field %}
-                {% include "forms/includes/field.html" %}
-            {% else %}
-                {{ field.block }}
-            {% endif %}
-        {% endfor %}
-        {% if not object.id or object.is_draft %}
-            <button class="button button--submit button--top-space button--white" type="submit" name="{{ form.draft_button_name }}" formnovalidate>{% trans "Save draft" %}</button>
+                {% if not object.id or object.is_draft %}
+                    <button class="button button--submit button--top-space button--white" type="submit" name="{{ form.draft_button_name }}" formnovalidate>{% trans "Save draft" %}</button>
+                {% endif %}
+                <button class="button button--submit button--top-space button--primary" type="submit" name="submit">{% trans "Submit" %}</button>
+            </form>
+        {% else %}
+            <p>{% trans "You have already posted a review for this submission" %}</p>
         {% endif %}
-        <button class="button button--submit button--top-space button--primary" type="submit" name="submit">{% trans "Submit" %}</button>
-    </form>
-{% else %}
-    <p>{% trans "You have already posted a review for this submission" %}</p>
-{% endif %}
-<div class="form--score-box">Score:0</div>
-</div>
-
+        <div class="form--score-box">Score:0</div>
+    </div>
 {% endblock %}
 {% block extra_js %}
     <script src="{% static 'js/apply/review-form-score.js' %}"></script>
diff --git a/hypha/apply/review/templates/review/review_list.html b/hypha/apply/review/templates/review/review_list.html
index 1cf8cac3e272c619e5363f13c1c178e1aa27ba7b..3cfdd3298db1beb7a8b7f82ce29d8d86fde41c59 100644
--- a/hypha/apply/review/templates/review/review_list.html
+++ b/hypha/apply/review/templates/review/review_list.html
@@ -3,38 +3,36 @@
 
 {% block title %}{% trans "Reviews" %}{% endblock %}
 
-{% block body_class %}light-grey-bg reviews-list__body{% endblock %}
+{% block body_class %}reviews-list__body{% endblock %}
 
 {% block content %}
-<div class="admin-bar">
-    <div class="admin-bar__inner admin-bar__inner--with-button">
-        <div>
-            <h1 class="beta heading heading--no-margin heading--bold">{% trans "Reviews" %}</h1>
-            <h5>{% trans "For" %} <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5>
-        </div>
+    {% adminbar %}
+        {% slot header %}{% trans "Reviews" %}{% endslot %}
+        {% slot sub_heading %}{% trans "For" %} <a class="text-blue-200" href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a>{% endslot %}
+
         {% if request.user|has_review_perm:submission %}
             {% if request.user|has_draft:submission or request.user|can_review:submission %}
                 {% include 'review/includes/review_button.html' with submission=submission %}
             {% endif %}
         {% endif %}
-    </div>
-</div>
-<div class="wrapper wrapper--reviews-table js-reviews-table">
-    <table class="reviews-list">
-    {% for answers in review_data.values %}
-        <tr class="reviews-list__tr">
-            <th class="reviews-list__th">{{ answers.question }}</th>
-            {% for answer in answers.answers %}
-                {% if forloop.parentloop.first %}
-                    <th class="reviews-list__th reviews-list__th--author">{{ answer|safe }}</th>
-                {% elif answers.question == "Opinions"%}
-                    <td class="reviews-list__td">{{ answer }}</td>
-                {% else %}
-                    <td class="reviews-list__td">{{ answer|bleach }}</td>
-                {% endif %}
+    {% endadminbar %}
+
+    <div class="wrapper wrapper--reviews-table js-reviews-table">
+        <table class="reviews-list">
+            {% for answers in review_data.values %}
+                <tr class="reviews-list__tr">
+                    <th class="reviews-list__th">{{ answers.question }}</th>
+                    {% for answer in answers.answers %}
+                        {% if forloop.parentloop.first %}
+                            <th class="reviews-list__th reviews-list__th--author">{{ answer|safe }}</th>
+                        {% elif answers.question == "Opinions"%}
+                            <td class="reviews-list__td">{{ answer }}</td>
+                        {% else %}
+                            <td class="reviews-list__td">{{ answer|bleach }}</td>
+                        {% endif %}
+                    {% endfor %}
+                </tr>
             {% endfor %}
-        </tr>
-    {% endfor %}
-    </table>
-</div>
+        </table>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/review/templatetags/review_tags.py b/hypha/apply/review/templatetags/review_tags.py
index 7c0aac1b65d5dcb918b9bb747adb5b1a648b00cc..9c8a4cc7dda401c4d49d9a49c9b62af70e3fbe49 100644
--- a/hypha/apply/review/templatetags/review_tags.py
+++ b/hypha/apply/review/templatetags/review_tags.py
@@ -1,5 +1,6 @@
 from django import template
 from django.utils.safestring import mark_safe
+from django.utils.translation import gettext_lazy as _
 
 from ..models import MAYBE, NO, YES
 from ..options import NA
@@ -9,17 +10,14 @@ register = template.Library()
 
 TRAFFIC_LIGHT_COLORS = {
     YES: {
-        'color': 'green',
-        'value': 'Y',
+        "color": "green",
+        "value": "Y",
     },
     MAYBE: {
-        'color': 'amber',
-        'value': 'M',
+        "color": "amber",
+        "value": "M",
     },
-    NO: {
-        'color': 'red',
-        'value': 'N'
-    }
+    NO: {"color": "red", "value": "N"},
 }
 
 TRAFFIC_LIGHT_TEMPLATE = '<span class="traffic-light traffic-light--{color}"></span>'
@@ -30,7 +28,7 @@ def traffic_light(value):
     try:
         return mark_safe(TRAFFIC_LIGHT_TEMPLATE.format(**TRAFFIC_LIGHT_COLORS[value]))
     except KeyError:
-        return ''
+        return ""
 
 
 @register.filter
@@ -40,7 +38,10 @@ def can_review(user, submission):
 
 @register.filter
 def has_draft(user, submission):
-    return submission.can_review(user) and submission.assigned.draft_reviewed().filter(reviewer=user).exists()
+    return (
+        submission.can_review(user)
+        and submission.assigned.draft_reviewed().filter(reviewer=user).exists()
+    )
 
 
 @register.filter
@@ -49,11 +50,12 @@ def average_review_score(reviewers):
         scores = [
             reviewer.review.score
             for reviewer in reviewers
-            if not reviewer.has_review and not reviewer.review.is_draft and not reviewer.review.score == NA
+            if not reviewer.has_review
+            and not reviewer.review.is_draft
+            and not reviewer.review.score == NA
         ]
         if len(scores) > 0:
-            return sum(scores) / len(scores)
-        else:
-            return 0
-    else:
-        return reviewers
+            return _("Avg. score: {average}").format(
+                average=round(sum(scores) / len(scores), 1)
+            )
+    return ""
diff --git a/hypha/apply/review/tests/factories/blocks.py b/hypha/apply/review/tests/factories/blocks.py
index 4a462581dec15ab6f182e880e6a7a944a08aa176..de3557dc8c3e2b5c972b7d8656d7be5ff19e472f 100644
--- a/hypha/apply/review/tests/factories/blocks.py
+++ b/hypha/apply/review/tests/factories/blocks.py
@@ -12,7 +12,11 @@ from hypha.apply.stream_forms.testing.factories import (
 )
 from hypha.apply.utils.testing.factories import RichTextFieldBlockFactory
 
-__all__ = ['ReviewFormFieldsFactory', 'RecommendationBlockFactory', 'ScoreFieldBlockFactory']
+__all__ = [
+    "ReviewFormFieldsFactory",
+    "RecommendationBlockFactory",
+    "ScoreFieldBlockFactory",
+]
 
 
 class RecommendationBlockFactory(FormFieldBlockFactory):
@@ -55,26 +59,37 @@ class ScoreFieldBlockFactory(FormFieldBlockFactory):
     def make_answer(cls, params=None):
         if params is None:
             params = {}
-        return json.dumps([factory.Faker('paragraph').evaluate(None, None, dict(params, locale=None)), random.randint(1, 5)])
+        return json.dumps(
+            [
+                factory.Faker("paragraph").evaluate(
+                    None, None, dict(params, locale=None)
+                ),
+                random.randint(1, 5),
+            ]
+        )
 
     @classmethod
     def make_form_answer(cls, params=None):
         if params is None:
             params = {}
         defaults = {
-            'description': factory.Faker('paragraph').evaluate(None, None, {'locale': None}),
-            'score': random.randint(1, 5),
+            "description": factory.Faker("paragraph").evaluate(
+                None, None, {"locale": None}
+            ),
+            "score": random.randint(1, 5),
         }
         defaults.update(params)
         return defaults
 
 
-ReviewFormFieldsFactory = StreamFieldUUIDFactory({
-    'char': CharFieldBlockFactory,
-    'text': RichTextFieldBlockFactory,
-    'score': ScoreFieldBlockFactory,
-    'score_without_text': ScoreFieldWithoutTextBlockFactory,
-    'recommendation': RecommendationBlockFactory,
-    'comments': RecommendationCommentsBlockFactory,
-    'visibility': VisibilityBlockFactory,
-})
+ReviewFormFieldsFactory = StreamFieldUUIDFactory(
+    {
+        "char": CharFieldBlockFactory,
+        "text": RichTextFieldBlockFactory,
+        "score": ScoreFieldBlockFactory,
+        "score_without_text": ScoreFieldWithoutTextBlockFactory,
+        "recommendation": RecommendationBlockFactory,
+        "comments": RecommendationCommentsBlockFactory,
+        "visibility": VisibilityBlockFactory,
+    }
+)
diff --git a/hypha/apply/review/tests/factories/models.py b/hypha/apply/review/tests/factories/models.py
index 07bfc59bab4b7a6c023d6e1180877ba293fc1e6c..a56a9991182d239015d7c8d2d1016dba4e36a7a9 100644
--- a/hypha/apply/review/tests/factories/models.py
+++ b/hypha/apply/review/tests/factories/models.py
@@ -10,7 +10,7 @@ from ...models import Review, ReviewForm, ReviewOpinion
 from ...options import AGREE, DISAGREE, MAYBE, NO, PRIVATE, REVIEWER, YES
 from . import blocks
 
-__all__ = ['ReviewFactory', 'ReviewFormFactory', 'ReviewOpinionFactory']
+__all__ = ["ReviewFactory", "ReviewFormFactory", "ReviewOpinionFactory"]
 
 
 class ReviewFormDataFactory(FormDataFactory):
@@ -29,12 +29,16 @@ class ReviewFactory(factory.django.DjangoModelFactory):
         visibility_reviewer = factory.Trait(visibility=REVIEWER)
 
     submission = factory.SubFactory(ApplicationSubmissionFactory)
-    revision = factory.SelfAttribute('submission.live_revision')
-    author = factory.SubFactory(AssignedReviewersFactory, submission=factory.SelfAttribute('..submission'))
-    form_fields = factory.LazyAttribute(lambda o: o.submission.round.review_forms.first().fields)
+    revision = factory.SelfAttribute("submission.live_revision")
+    author = factory.SubFactory(
+        AssignedReviewersFactory, submission=factory.SelfAttribute("..submission")
+    )
+    form_fields = factory.LazyAttribute(
+        lambda o: o.submission.round.review_forms.first().fields
+    )
     form_data = factory.SubFactory(
         ReviewFormDataFactory,
-        form_fields=factory.SelfAttribute('..form_fields'),
+        form_fields=factory.SelfAttribute("..form_fields"),
     )
     is_draft = False
     recommendation = NO
@@ -50,7 +54,11 @@ class ReviewOpinionFactory(factory.django.DjangoModelFactory):
         opinion_disagree = factory.Trait(opinion=DISAGREE)
 
     review = factory.SubFactory(ReviewFactory)
-    author = factory.SubFactory(AssignedReviewersFactory, staff=True, submission=factory.SelfAttribute('..review.submission'))
+    author = factory.SubFactory(
+        AssignedReviewersFactory,
+        staff=True,
+        submission=factory.SelfAttribute("..review.submission"),
+    )
     opinion = DISAGREE
 
 
@@ -58,5 +66,5 @@ class ReviewFormFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ReviewForm
 
-    name = factory.Faker('word')
+    name = factory.Faker("word")
     form_fields = blocks.ReviewFormFieldsFactory
diff --git a/hypha/apply/review/tests/test_admin.py b/hypha/apply/review/tests/test_admin.py
index 247987d6a9233ec75c592ba178a768fdde813a3e..d78671871162714333a7077c4655352f26c8bce1 100644
--- a/hypha/apply/review/tests/test_admin.py
+++ b/hypha/apply/review/tests/test_admin.py
@@ -6,7 +6,6 @@ from .factories import ReviewFormFactory
 
 
 class TestReviewFormAdminForm(TestCase):
-
     def test_can_create_review_form(self):
         review_form = ReviewFormFactory()
         self.assertEqual(ReviewForm.objects.last(), review_form)
diff --git a/hypha/apply/review/tests/test_admin_views.py b/hypha/apply/review/tests/test_admin_views.py
index d61316fca9e2cf5866bf17205da1b036d8eb2d74..03c8d28e11f44b2a47898f191258ba697de82644 100644
--- a/hypha/apply/review/tests/test_admin_views.py
+++ b/hypha/apply/review/tests/test_admin_views.py
@@ -14,112 +14,122 @@ class TestCreateReviewFormView(TestCase):
         ReviewForm.objects.all().delete()
         cls.user = SuperUserFactory()
         cls.label_help_text_data = {
-            'field_label': factory.Faker('sentence').evaluate(None, None, {'locale': None}),
-            'help_text': factory.Faker('sentence').evaluate(None, None, {'locale': None})
+            "field_label": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
+            "help_text": factory.Faker("sentence").evaluate(
+                None, None, {"locale": None}
+            ),
         }
-        cls.name = factory.Faker('name').evaluate(None, None, {'locale': None})
+        cls.name = factory.Faker("name").evaluate(None, None, {"locale": None})
 
     def create_page(self, data):
         self.client.force_login(self.user)
-        url = reverse('review_reviewform_modeladmin_create')
+        url = reverse("review_reviewform_modeladmin_create")
         response = self.client.post(url, data=data, secure=True, follow=True)
         return response
 
     def test_name_field_required(self):
-        data = {'name': ['']}
+        data = {"name": [""]}
         form_field_data = create_form_fields_data(
             {
-                'recommendation': self.label_help_text_data,
-                'comments': self.label_help_text_data,
-                'visibility': self.label_help_text_data,
+                "recommendation": self.label_help_text_data,
+                "comments": self.label_help_text_data,
+                "visibility": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'This field is required.'
-        for message in get_messages(response.context['request']):
+        expected_message = "This field is required."
+        for message in get_messages(response.context["request"]):
             self.assertEqual(expected_message, str(message.message).strip())
         self.assertEqual(ReviewForm.objects.count(), 0)
 
     def test_recommendation_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'comments': self.label_help_text_data,
-                'visibility': self.label_help_text_data,
+                "comments": self.label_help_text_data,
+                "visibility": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Recommendation'
-        messages = list(response.context['messages'])
+        expected_message = (
+            "You are missing the following required fields: Recommendation"
+        )
+        messages = list(response.context["messages"])
         self.assertEqual(len(messages), 1)
         self.assertEqual(expected_message, str(messages[0]).strip())
         self.assertEqual(ReviewForm.objects.count(), 0)
 
     def test_comments_block_required(self):
         ReviewForm.objects.all().delete()
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'recommendation': self.label_help_text_data,
-                'visibility': self.label_help_text_data,
+                "recommendation": self.label_help_text_data,
+                "visibility": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Comments'
-        messages = list(response.context['messages'])
+        expected_message = "You are missing the following required fields: Comments"
+        messages = list(response.context["messages"])
         self.assertEqual(len(messages), 1)
         self.assertEqual(expected_message, str(messages[0]).strip())
         self.assertEqual(ReviewForm.objects.count(), 0)
 
     def test_visibility_block_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'recommendation': self.label_help_text_data,
-                'comments': self.label_help_text_data,
+                "recommendation": self.label_help_text_data,
+                "comments": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_message = 'You are missing the following required fields: Visibility'
-        messages = list(response.context['messages'])
+        expected_message = "You are missing the following required fields: Visibility"
+        messages = list(response.context["messages"])
         self.assertEqual(len(messages), 1)
         self.assertEqual(expected_message, str(messages[0]).strip())
         self.assertEqual(ReviewForm.objects.count(), 0)
 
     def test_field_label_required(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'recommendation': {},
-                'comments': {},
-                'visibility': {},
+                "recommendation": {},
+                "comments": {},
+                "visibility": {},
             }
         )
         data.update(form_field_data)
         response = self.create_page(data=data)
 
-        expected_messages_list = ['Label cannot be empty for Recommendation', 'Label cannot be empty for Comments', 'Label cannot be empty for Visibility']
-        messages = list(response.context['messages'])
+        expected_messages_list = [
+            "Label cannot be empty for Recommendation",
+            "Label cannot be empty for Comments",
+            "Label cannot be empty for Visibility",
+        ]
+        messages = list(response.context["messages"])
         self.assertEqual(len(messages), 3)
         for message in messages:
             self.assertIn(str(message).strip(), expected_messages_list)
         self.assertEqual(ReviewForm.objects.count(), 0)
 
     def test_form_creation(self):
-        data = {'name': [self.name]}
+        data = {"name": [self.name]}
         form_field_data = create_form_fields_data(
             {
-                'recommendation': self.label_help_text_data,
-                'comments': self.label_help_text_data,
-                'visibility': self.label_help_text_data,
+                "recommendation": self.label_help_text_data,
+                "comments": self.label_help_text_data,
+                "visibility": self.label_help_text_data,
             }
         )
         data.update(form_field_data)
diff --git a/hypha/apply/review/tests/test_views.py b/hypha/apply/review/tests/test_views.py
index a8c1fe40a82f1c98597033f005d01846335e1d7a..da476e32ec3bb5eec9f54d329666313c5edf5027 100644
--- a/hypha/apply/review/tests/test_views.py
+++ b/hypha/apply/review/tests/test_views.py
@@ -23,18 +23,21 @@ from .factories import (
 
 class StaffReviewsTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id, 'submission_pk': instance.submission.id}
+        return {"pk": instance.id, "submission_pk": instance.submission.id}
 
     def test_can_access_review(self):
         review = ReviewFactory(author__reviewer=self.user, author__staff=True)
         response = self.get_page(review)
         self.assertContains(response, review.submission.title)
         self.assertContains(response, self.user.full_name)
-        self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': review.submission.id}))
+        self.assertContains(
+            response,
+            reverse("funds:submissions:detail", kwargs={"pk": review.submission.id}),
+        )
 
     def test_can_access_other_review(self):
         submission = ApplicationSubmissionFactory()
@@ -45,71 +48,85 @@ class StaffReviewsTestCase(BaseViewTestCase):
 
 class StaffReviewListingTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def test_can_access_review_listing(self):
         submission = ApplicationSubmissionFactory()
         reviews = ReviewFactory.create_batch(3, submission=submission)
-        response = self.get_page(submission, 'list')
+        response = self.get_page(submission, "list")
         self.assertContains(response, submission.title)
-        self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': submission.id}))
+        self.assertContains(
+            response, reverse("funds:submissions:detail", kwargs={"pk": submission.id})
+        )
         for review in reviews:
             self.assertContains(response, review.author.reviewer.full_name)
 
     def test_draft_reviews_dont_appear(self):
         submission = ApplicationSubmissionFactory()
         review = ReviewFactory.create(submission=submission, is_draft=True)
-        response = self.get_page(submission, 'list')
+        response = self.get_page(submission, "list")
         self.assertContains(response, submission.title)
-        self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': submission.id}))
+        self.assertContains(
+            response, reverse("funds:submissions:detail", kwargs={"pk": submission.id})
+        )
         self.assertNotContains(response, review.author.reviewer.full_name)
 
 
 class StaffReviewFormTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
     submission = None
 
     def setUp(self):
-        self.submission = ApplicationSubmissionFactory(status='internal_review')
+        self.submission = ApplicationSubmissionFactory(status="internal_review")
         super().setUp()
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def test_can_access_form(self):
-        response = self.get_page(self.submission, 'form')
+        response = self.get_page(self.submission, "form")
         self.assertContains(response, self.submission.title)
-        self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': self.submission.id}))
+        self.assertContains(
+            response,
+            reverse("funds:submissions:detail", kwargs={"pk": self.submission.id}),
+        )
 
     def test_cant_access_wrong_status(self):
         submission = ApplicationSubmissionFactory(rejected=True)
-        response = self.get_page(submission, 'form')
+        response = self.get_page(submission, "form")
         self.assertEqual(response.status_code, 403)
 
     def test_cant_resubmit_review(self):
-        ReviewFactory(submission=self.submission, author__reviewer=self.user, author__staff=True)
-        response = self.post_page(self.submission, {'data': 'value'}, 'form')
-        self.assertEqual(response.context['has_submitted_review'], True)
-        self.assertEqual(response.context['title'], 'Update Review draft')
+        ReviewFactory(
+            submission=self.submission, author__reviewer=self.user, author__staff=True
+        )
+        response = self.post_page(self.submission, {"data": "value"}, "form")
+        self.assertEqual(response.context["has_submitted_review"], True)
+        self.assertEqual(response.context["title"], "Update Review draft")
 
     def test_can_edit_draft_review(self):
-        ReviewFactory(submission=self.submission, author__reviewer=self.user, author__staff=True, is_draft=True)
-        response = self.get_page(self.submission, 'form')
-        self.assertEqual(response.context['has_submitted_review'], False)
-        self.assertEqual(response.context['title'], 'Update Review draft')
+        ReviewFactory(
+            submission=self.submission,
+            author__reviewer=self.user,
+            author__staff=True,
+            is_draft=True,
+        )
+        response = self.get_page(self.submission, "form")
+        self.assertEqual(response.context["has_submitted_review"], False)
+        self.assertEqual(response.context["title"], "Update Review draft")
 
     def test_revision_captured_on_review(self):
         form = self.submission.round.review_forms.first()
 
         data = ReviewFormFieldsFactory.form_response(form.fields)
 
-        self.post_page(self.submission, data, 'form')
+        self.post_page(self.submission, data, "form")
         review = self.submission.reviews.first()
         self.assertEqual(review.revision, self.submission.live_revision)
 
@@ -117,8 +134,8 @@ class StaffReviewFormTestCase(BaseViewTestCase):
         form = self.submission.round.review_forms.first()
 
         data = ReviewFormFieldsFactory.form_response(form.fields)
-        data['save_draft'] = True
-        self.post_page(self.submission, data, 'form')
+        data["save_draft"] = True
+        self.post_page(self.submission, data, "form")
         review = self.submission.reviews.first()
         self.assertTrue(review.is_draft)
         self.assertIsNone(review.revision)
@@ -126,53 +143,52 @@ class StaffReviewFormTestCase(BaseViewTestCase):
 
 class TestReviewScore(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
     submission = None
 
     def setUp(self):
         super().setUp()
-        self.submission = ApplicationSubmissionFactory(status='internal_review')
+        self.submission = ApplicationSubmissionFactory(status="internal_review")
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def submit_review_scores(self, scores=(), scores_without_text=()):
         if scores:
             form = ReviewFormFactory(
                 form_fields__multiple__score=len(scores),
-                form_fields__multiple__score_without_text=len(scores_without_text)
+                form_fields__multiple__score_without_text=len(scores_without_text),
             )
         else:
             form = ReviewFormFactory(
                 form_fields__exclude__score=True,
-                form_fields__exclude__score_without_text=True
+                form_fields__exclude__score_without_text=True,
             )
         review_form = self.submission.round.review_forms.first()
         review_form.form = form
         review_form.save()
         score_fields = {
-            field.id: {'score': score}
+            field.id: {"score": score}
             for field, score in zip(form.score_fields, scores, strict=False)
         }
         score_fields_without_text = {
             field.id: score
-            for field, score in zip(form.score_fields_without_text, scores_without_text, strict=False)
+            for field, score in zip(
+                form.score_fields_without_text, scores_without_text, strict=False
+            )
         }
         score_fields.update(score_fields_without_text)
-        data = ReviewFormFieldsFactory.form_response(
-            form.form_fields,
-            score_fields
-        )
+        data = ReviewFormFieldsFactory.form_response(form.form_fields, score_fields)
 
         # Make a new person for every review
         self.client.force_login(self.user_factory())
-        response = self.post_page(self.submission, data, 'form')
+        response = self.post_page(self.submission, data, "form")
         # import ipdb; ipdb.set_trace()
         self.assertIn(
-            'funds/applicationsubmission_admin_detail.html',
+            "funds/applicationsubmission_admin_detail.html",
             response.template_name,
-            msg='Failed to post the form correctly'
+            msg="Failed to post the form correctly",
         )
         self.client.force_login(self.user)
         return self.submission.reviews.first()
@@ -207,72 +223,90 @@ class TestReviewScore(BaseViewTestCase):
 
 class UserReviewFormTestCase(BaseViewTestCase):
     user_factory = UserFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def test_cant_access_form(self):
-        submission = ApplicationSubmissionFactory(status='internal_review')
-        response = self.get_page(submission, 'form')
+        submission = ApplicationSubmissionFactory(status="internal_review")
+        response = self.get_page(submission, "form")
         self.assertEqual(response.status_code, 403)
 
 
 class ReviewDetailTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id, 'submission_pk': instance.submission.id}
+        return {"pk": instance.id, "submission_pk": instance.submission.id}
 
     def test_review_detail_recommendation(self):
-        submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2)
-        review = ReviewFactory(submission=submission, author__reviewer=self.user, recommendation_yes=True)
+        submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2
+        )
+        review = ReviewFactory(
+            submission=submission, author__reviewer=self.user, recommendation_yes=True
+        )
         response = self.get_page(review)
         self.assertContains(response, submission.title)
         self.assertContains(response, "<p>Yes</p>")
 
     def test_review_detail_opinion(self):
         staff = StaffFactory()
-        submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2)
-        review = ReviewFactory(submission=submission, author__reviewer=self.user, recommendation_yes=True)
-        ReviewOpinionFactory(review=review, author__reviewer=staff, opinion_disagree=True)
+        submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2
+        )
+        review = ReviewFactory(
+            submission=submission, author__reviewer=self.user, recommendation_yes=True
+        )
+        ReviewOpinionFactory(
+            review=review, author__reviewer=staff, opinion_disagree=True
+        )
         response = self.get_page(review)
         self.assertContains(response, "Disagrees")
 
 
 class ReviewListTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'list'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "list"
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.submission.id}
+        return {"submission_pk": instance.submission.id}
 
     def test_review_list_opinion(self):
         staff = StaffFactory()
-        submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2)
-        review = ReviewFactory(submission=submission, author__reviewer=self.user, recommendation_yes=True)
-        ReviewOpinionFactory(review=review, author__reviewer=staff, opinion_disagree=True)
+        submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2
+        )
+        review = ReviewFactory(
+            submission=submission, author__reviewer=self.user, recommendation_yes=True
+        )
+        ReviewOpinionFactory(
+            review=review, author__reviewer=staff, opinion_disagree=True
+        )
         response = self.get_page(review)
-        response_opinion = response.context['review_data']['opinions']['answers'][0]
+        response_opinion = response.context["review_data"]["opinions"]["answers"][0]
         self.assertIn("Disagrees", response_opinion)
         self.assertIn(str(staff), response_opinion)
 
 
 class StaffReviewOpinionCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     def setUp(self):
         super().setUp()
-        self.submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2)
+        self.submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2
+        )
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id, 'submission_pk': instance.submission.id}
+        return {"pk": instance.id, "submission_pk": instance.submission.id}
 
     def test_can_see_opinion_buttons_on_others_review(self):
         staff = StaffFactory()
@@ -286,7 +320,11 @@ class StaffReviewOpinionCase(BaseViewTestCase):
         self.assertContains(response, 'name="agree"')
 
     def test_cant_see_opinion_buttons_on_self_review(self):
-        review = ReviewFactory(submission=self.submission, author__reviewer=self.user, recommendation_yes=True)
+        review = ReviewFactory(
+            submission=self.submission,
+            author__reviewer=self.user,
+            recommendation_yes=True,
+        )
         response = self.get_page(review)
         self.assertNotContains(response, 'name="agree"')
 
@@ -298,11 +336,16 @@ class StaffReviewOpinionCase(BaseViewTestCase):
             author__staff=True,
             recommendation_yes=True,
         )
-        response = self.post_page(review, {'agree': AGREE})
-        self.assertTrue(review.opinions.first().opinion_display in Activity.objects.first().message)
+        response = self.post_page(review, {"agree": AGREE})
+        self.assertTrue(
+            review.opinions.first().opinion_display in Activity.objects.first().message
+        )
         self.assertEqual(ReviewOpinion.objects.all().count(), 1)
         self.assertEqual(ReviewOpinion.objects.first().opinion, AGREE)
-        url = self.url_from_pattern('apply:submissions:reviews:review', kwargs={'submission_pk': self.submission.pk, 'pk': review.id})
+        url = self.url_from_pattern(
+            "apply:submissions:reviews:review",
+            kwargs={"submission_pk": self.submission.pk, "pk": review.id},
+        )
         self.assertRedirects(response, url)
 
     def test_disagree_opinion_redirects_to_review_form(self):
@@ -313,49 +356,67 @@ class StaffReviewOpinionCase(BaseViewTestCase):
             author__staff=True,
             recommendation_yes=True,
         )
-        response = self.post_page(review, {'disagree': DISAGREE})
-        url = self.url_from_pattern('funds:submissions:reviews:form', kwargs={'submission_pk': self.submission.id})
+        response = self.post_page(review, {"disagree": DISAGREE})
+        url = self.url_from_pattern(
+            "funds:submissions:reviews:form",
+            kwargs={"submission_pk": self.submission.id},
+        )
         self.assertRedirects(response, url)
 
 
 class NonStaffReviewOpinionCase(BaseViewTestCase):
     user_factory = UserFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
     submission = None
 
     def setUp(self):
         super().setUp()
-        self.submission = ApplicationSubmissionFactory(status='draft_proposal', workflow_stages=2)
+        self.submission = ApplicationSubmissionFactory(
+            status="draft_proposal", workflow_stages=2
+        )
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id, 'submission_pk': instance.submission.id}
+        return {"pk": instance.id, "submission_pk": instance.submission.id}
 
     def test_nonstaff_cant_post_opinion_to_review(self):
         staff = StaffFactory()
-        review = ReviewFactory(submission=self.submission, author__reviewer=staff, author__staff=True, recommendation_yes=True)
-        response = self.post_page(review, {'agree': AGREE})
+        review = ReviewFactory(
+            submission=self.submission,
+            author__reviewer=staff,
+            author__staff=True,
+            recommendation_yes=True,
+        )
+        response = self.post_page(review, {"agree": AGREE})
         self.assertEqual(response.status_code, 403)
 
 
 class ReviewDetailVisibilityTestCase(BaseViewTestCase):
     user_factory = ReviewerFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     def get_kwargs(self, instance):
-        return {'pk': instance.id, 'submission_pk': instance.submission.id}
+        return {"pk": instance.id, "submission_pk": instance.submission.id}
 
     def test_review_detail_visibility_private(self):
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2)
-        review = ReviewFactory(submission=submission, author__reviewer=self.user, visibility_private=True)
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2
+        )
+        review = ReviewFactory(
+            submission=submission, author__reviewer=self.user, visibility_private=True
+        )
         self.client.force_login(self.user_factory())
         response = self.get_page(review)
         self.assertEqual(response.status_code, 403)
 
     def test_review_detail_visibility_reviewer(self):
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2)
-        review = ReviewFactory(submission=submission, author__reviewer=self.user, visibility_reviewer=True)
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2
+        )
+        review = ReviewFactory(
+            submission=submission, author__reviewer=self.user, visibility_reviewer=True
+        )
         self.client.force_login(self.user_factory())
         response = self.get_page(review)
         self.assertEqual(response.status_code, 200)
@@ -363,15 +424,15 @@ class ReviewDetailVisibilityTestCase(BaseViewTestCase):
 
 class ReviewWorkFlowActionTestCase(BaseViewTestCase):
     user_factory = StaffFactory
-    url_name = 'funds:submissions:reviews:{}'
-    base_view_name = 'review'
+    url_name = "funds:submissions:reviews:{}"
+    base_view_name = "review"
 
     @classmethod
     def setUpTestData(cls):
         super().setUpTestData()
 
     def get_kwargs(self, instance):
-        return {'submission_pk': instance.id}
+        return {"submission_pk": instance.id}
 
     def test_initial_state_transition_to_internal_review(self):
         submission = ApplicationSubmissionFactory(status=INITIAL_STATE)
@@ -380,104 +441,107 @@ class ReviewWorkFlowActionTestCase(BaseViewTestCase):
 
         data = ReviewFormFieldsFactory.form_response(form.fields)
 
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
 
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            submission_stepped_phases[2][0].name
-        )
+        self.assertEqual(submission.status, submission_stepped_phases[2][0].name)
 
     def test_proposal_discussion_to_proposal_internal_review(self):
-        submission = ApplicationSubmissionFactory(status='proposal_discussion', workflow_stages=2)
+        submission = ApplicationSubmissionFactory(
+            status="proposal_discussion", workflow_stages=2
+        )
         self.client.force_login(self.user_factory())
         fields = get_fields_for_stage(submission)
         data = ReviewFormFieldsFactory.form_response(fields)
 
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            'proposal_internal_review'
-        )
+        self.assertEqual(submission.status, "proposal_internal_review")
 
     def test_internal_review_to_ready_for_discussion(self):
-        submission = ApplicationSubmissionFactory(status='internal_review')
+        submission = ApplicationSubmissionFactory(status="internal_review")
         submission_stepped_phases = submission.workflow.stepped_phases
-        ReviewFactory(submission=submission, author__reviewer=self.user, visibility_private=True)
+        ReviewFactory(
+            submission=submission, author__reviewer=self.user, visibility_private=True
+        )
 
         self.client.force_login(self.user_factory())
         fields = get_fields_for_stage(submission)
         data = ReviewFormFieldsFactory.form_response(fields)
 
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            submission_stepped_phases[3][0].name
-        )
+        self.assertEqual(submission.status, submission_stepped_phases[3][0].name)
 
     def test_ext_external_review_to_ready_for_discussion(self):
-        submission = ApplicationSubmissionFactory(status='ext_external_review', with_external_review=True)
+        submission = ApplicationSubmissionFactory(
+            status="ext_external_review", with_external_review=True
+        )
         reviewers = ReviewerFactory.create_batch(2)
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[0])
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[1])
-        ReviewFactory(submission=submission, author__reviewer=reviewers[0], visibility_private=True)
+        ReviewFactory(
+            submission=submission,
+            author__reviewer=reviewers[0],
+            visibility_private=True,
+        )
 
         self.client.force_login(reviewers[1])
         fields = get_fields_for_stage(submission)
         data = ReviewFormFieldsFactory.form_response(fields)
 
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            'ext_post_external_review_discussion'
-        )
+        self.assertEqual(submission.status, "ext_post_external_review_discussion")
 
     def test_com_external_review_to_ready_for_discussion(self):
-        submission = ApplicationSubmissionFactory(status='com_external_review', workflow_name='single_com')
+        submission = ApplicationSubmissionFactory(
+            status="com_external_review", workflow_name="single_com"
+        )
         reviewers = ReviewerFactory.create_batch(2)
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[0])
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[1])
-        ReviewFactory(submission=submission, author__reviewer=reviewers[0], visibility_private=True)
+        ReviewFactory(
+            submission=submission,
+            author__reviewer=reviewers[0],
+            visibility_private=True,
+        )
         form = submission.round.review_forms.first()
         self.client.force_login(reviewers[1])
         data = ReviewFormFieldsFactory.form_response(form.fields)
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            'com_post_external_review_discussion'
-        )
+        self.assertEqual(submission.status, "com_post_external_review_discussion")
 
     def test_external_review_to_ready_for_discussion(self):
-        submission = ApplicationSubmissionFactory(status='external_review', workflow_stages=2)
+        submission = ApplicationSubmissionFactory(
+            status="external_review", workflow_stages=2
+        )
         reviewers = ReviewerFactory.create_batch(2)
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[0])
         AssignedReviewersFactory(submission=submission, reviewer=reviewers[1])
-        ReviewFactory(submission=submission, author__reviewer=reviewers[0], visibility_private=True)
+        ReviewFactory(
+            submission=submission,
+            author__reviewer=reviewers[0],
+            visibility_private=True,
+        )
 
         self.client.force_login(reviewers[1])
         fields = get_fields_for_stage(submission)
         data = ReviewFormFieldsFactory.form_response(fields)
 
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            'post_external_review_discussion'
-        )
+        self.assertEqual(submission.status, "post_external_review_discussion")
 
     def test_submission_did_not_transition(self):
-        submission = ApplicationSubmissionFactory(status='proposal_internal_review', workflow_stages=2)
+        submission = ApplicationSubmissionFactory(
+            status="proposal_internal_review", workflow_stages=2
+        )
         self.client.force_login(self.user_factory())
         fields = get_fields_for_stage(submission)
         data = ReviewFormFieldsFactory.form_response(fields)
 
-        self.post_page(submission, data, 'form')
+        self.post_page(submission, data, "form")
         submission = ApplicationSubmission.objects.get(id=submission.id)
-        self.assertEqual(
-            submission.status,
-            'proposal_internal_review'
-        )
+        self.assertEqual(submission.status, "proposal_internal_review")
diff --git a/hypha/apply/review/urls.py b/hypha/apply/review/urls.py
index 0d389652ec6325d4e9103c8338e7d1779f817192..9c0dc1e41e84d18513018085a289e5780a4a88a2 100644
--- a/hypha/apply/review/urls.py
+++ b/hypha/apply/review/urls.py
@@ -8,12 +8,12 @@ from .views import (
     ReviewListView,
 )
 
-app_name = 'reviews'
+app_name = "reviews"
 
 urlpatterns = [
-    path('reviews/', ReviewListView.as_view(), name='list'),
-    path('reviews/<int:pk>/', ReviewDetailView.as_view(), name="review"),
-    path('reviews/<int:pk>/delete/', ReviewDeleteView.as_view(), name="delete"),
-    path('reviews/<int:pk>/edit/', ReviewEditView.as_view(), name="edit"),
-    path('review/', ReviewCreateOrUpdateView.as_view(), name='form'),
+    path("reviews/", ReviewListView.as_view(), name="list"),
+    path("reviews/<int:pk>/", ReviewDetailView.as_view(), name="review"),
+    path("reviews/<int:pk>/delete/", ReviewDeleteView.as_view(), name="delete"),
+    path("reviews/<int:pk>/edit/", ReviewEditView.as_view(), name="edit"),
+    path("review/", ReviewCreateOrUpdateView.as_view(), name="form"),
 ]
diff --git a/hypha/apply/review/views.py b/hypha/apply/review/views.py
index 6f777b38baa384c5a9b63bfc04378fe51d1f25f7..fe10489a992d8f375fac82f2ce380fd41ae153b1 100644
--- a/hypha/apply/review/views.py
+++ b/hypha/apply/review/views.py
@@ -32,8 +32,8 @@ from .options import DISAGREE
 
 
 def get_fields_for_stage(submission, user=None):
-    forms = submission.get_from_parent('review_forms').all()
-    external_review_forms = submission.get_from_parent('external_review_forms').all()
+    forms = submission.get_from_parent("review_forms").all()
+    external_review_forms = submission.get_from_parent("external_review_forms").all()
 
     # Use ExternalReviewForm if submission's stage has external review and external review form is attached to fund.
     # ExternalReviewForm is only for non-staff reviewers(external reviewers)
@@ -48,23 +48,24 @@ def get_fields_for_stage(submission, user=None):
         return forms[0].form.form_fields
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReviewEditView(UserPassesTestMixin, BaseStreamForm, UpdateView):
     submission_form_class = ReviewModelForm
     model = Review
-    template_name = 'review/review_edit_form.html'
+    template_name = "review/review_edit_form.html"
     raise_exception = True
 
     def test_func(self):
         review = self.get_object()
-        return self.request.user.has_perm('review.change_review') or self.request.user == review.author.reviewer
+        return (
+            self.request.user.has_perm("review.change_review")
+            or self.request.user == review.author.reviewer
+        )
 
     def get_context_data(self, **kwargs):
         review = self.get_object()
         return super().get_context_data(
-            submission=review.submission,
-            title=_('Edit Review'),
-            **kwargs
+            submission=review.submission, title=_("Edit Review"), **kwargs
         )
 
     def get_defined_fields(self):
@@ -74,16 +75,18 @@ class ReviewEditView(UserPassesTestMixin, BaseStreamForm, UpdateView):
         This ensures editing of submitted review is not affected by the changes to the original review forms.
         """
         review = self.get_object()
-        return review.form_fields or get_fields_for_stage(review.submission, user=self.request.user)
+        return review.form_fields or get_fields_for_stage(
+            review.submission, user=self.request.user
+        )
 
     def get_form_kwargs(self):
         review = self.get_object()
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
-        kwargs['submission'] = review.submission
+        kwargs["user"] = self.request.user
+        kwargs["submission"] = review.submission
 
         if self.object:
-            kwargs['initial'] = self.object.form_data
+            kwargs["initial"] = self.object.form_data
 
         return kwargs
 
@@ -105,22 +108,28 @@ class ReviewEditView(UserPassesTestMixin, BaseStreamForm, UpdateView):
 
     def get_success_url(self):
         review = self.get_object()
-        return reverse_lazy('funds:submissions:detail', args=(review.submission.id,))
+        return reverse_lazy("funds:submissions:detail", args=(review.submission.id,))
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReviewCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
     submission_form_class = ReviewModelForm
     model = Review
-    template_name = 'review/review_form.html'
+    template_name = "review/review_form.html"
 
     def get_object(self, queryset=None):
-        return self.model.objects.get(submission=self.submission, author__reviewer=self.request.user)
+        return self.model.objects.get(
+            submission=self.submission, author__reviewer=self.request.user
+        )
 
     def dispatch(self, request, *args, **kwargs):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
 
-        if not self.submission.phase.permissions.can_review(request.user) or not self.submission.has_permission_to_review(request.user):
+        if not self.submission.phase.permissions.can_review(
+            request.user
+        ) or not self.submission.has_permission_to_review(request.user):
             raise PermissionDenied()
 
         if self.request.POST and self.submission.reviewed_by(request.user):
@@ -133,8 +142,8 @@ class ReviewCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
         return super().get_context_data(
             submission=self.submission,
             has_submitted_review=has_submitted_review,
-            title=_('Update Review draft') if self.object else _('Create Review'),
-            **kwargs
+            title=_("Update Review draft") if self.object else _("Create Review"),
+            **kwargs,
         )
 
     def get_defined_fields(self):
@@ -142,11 +151,11 @@ class ReviewCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
-        kwargs['submission'] = self.submission
+        kwargs["user"] = self.request.user
+        kwargs["submission"] = self.submission
 
         if self.object:
-            kwargs['initial'] = self.object.form_data
+            kwargs["initial"] = self.object.form_data
 
         return kwargs
 
@@ -184,21 +193,37 @@ def review_workflow_actions(request, submission):
     if transition_after and submission.status == INITIAL_STATE:
         # Automatically transition the application to "Internal review".
         action = submission_stepped_phases[2][0].name
-    elif transition_after and submission.status == 'proposal_discussion':
+    elif transition_after and submission.status == "proposal_discussion":
         # Automatically transition the proposal to "Internal review".
-        action = 'proposal_internal_review'
-    elif transition_after and submission.status == submission_stepped_phases[2][0].name and submission.reviews.count() >= transition_after:
+        action = "proposal_internal_review"
+    elif (
+        transition_after
+        and submission.status == submission_stepped_phases[2][0].name
+        and submission.reviews.count() >= transition_after
+    ):
         # Automatically transition the application to "Ready for discussion".
         action = submission_stepped_phases[3][0].name
-    elif transition_after and submission.status == 'ext_external_review' and submission.reviews.by_reviewers().count() >= transition_after:
+    elif (
+        transition_after
+        and submission.status == "ext_external_review"
+        and submission.reviews.by_reviewers().count() >= transition_after
+    ):
         # Automatically transition the application to "Ready for discussion".
-        action = 'ext_post_external_review_discussion'
-    elif transition_after and submission.status == 'com_external_review' and submission.reviews.by_reviewers().count() >= transition_after:
+        action = "ext_post_external_review_discussion"
+    elif (
+        transition_after
+        and submission.status == "com_external_review"
+        and submission.reviews.by_reviewers().count() >= transition_after
+    ):
         # Automatically transition the application to "Ready for discussion".
-        action = 'com_post_external_review_discussion'
-    elif transition_after and submission.status == 'external_review' and submission.reviews.by_reviewers().count() >= transition_after:
+        action = "com_post_external_review_discussion"
+    elif (
+        transition_after
+        and submission.status == "external_review"
+        and submission.reviews.by_reviewers().count() >= transition_after
+    ):
         # Automatically transition the proposal to "Ready for discussion".
-        action = 'post_external_review_discussion'
+        action = "post_external_review_discussion"
 
     # If action is set run perform_transition().
     if action:
@@ -221,7 +246,9 @@ class ReviewDisplay(UserPassesTestMixin, DetailView):
         review = self.get_object()
         if review.author.reviewer != self.request.user:
             consensus_form = ReviewOpinionForm(
-                instance=review.opinions.filter(author__reviewer=self.request.user).first(),
+                instance=review.opinions.filter(
+                    author__reviewer=self.request.user
+                ).first(),
             )
         else:
             consensus_form = None
@@ -245,7 +272,12 @@ class ReviewDisplay(UserPassesTestMixin, DetailView):
         if user.is_reviewer and review.reviewer_visibility:
             return True
 
-        if user.is_community_reviewer and submission.community_review and review.reviewer_visibility and submission.user != user:
+        if (
+            user.is_community_reviewer
+            and submission.community_review
+            and review.reviewer_visibility
+            and submission.user != user
+        ):
             return True
 
         return False
@@ -254,13 +286,17 @@ class ReviewDisplay(UserPassesTestMixin, DetailView):
         review = self.get_object()
 
         if review.is_draft:
-            return HttpResponseRedirect(reverse_lazy('apply:submissions:reviews:form', args=(review.submission.id,)))
+            return HttpResponseRedirect(
+                reverse_lazy(
+                    "apply:submissions:reviews:form", args=(review.submission.id,)
+                )
+            )
 
         return super().dispatch(request, *args, **kwargs)
 
 
 class ReviewOpinionFormView(UserPassesTestMixin, CreateView):
-    template_name = 'review/review_detail.html'
+    template_name = "review/review_detail.html"
     form_class = ReviewOpinionForm
     model = Review
     raise_exception = True
@@ -268,8 +304,10 @@ class ReviewOpinionFormView(UserPassesTestMixin, CreateView):
     def get_form_kwargs(self):
         self.object = self.get_object()
         kwargs = super().get_form_kwargs()
-        instance = kwargs['instance']
-        kwargs['instance'] = instance.opinions.filter(author__reviewer=self.request.user).first()
+        instance = kwargs["instance"]
+        kwargs["instance"] = instance.opinions.filter(
+            author__reviewer=self.request.user
+        ).first()
         return kwargs
 
     def test_func(self):
@@ -287,7 +325,12 @@ class ReviewOpinionFormView(UserPassesTestMixin, CreateView):
         if user.is_reviewer and review.reviewer_visibility:
             return True
 
-        if user.is_community_reviewer and submission.community_review and review.reviewer_visibility and submission.user != user:
+        if (
+            user.is_community_reviewer
+            and submission.community_review
+            and review.reviewer_visibility
+            and submission.user != user
+        ):
             return True
 
         return False
@@ -312,7 +355,11 @@ class ReviewOpinionFormView(UserPassesTestMixin, CreateView):
         )
 
         if opinion.opinion == DISAGREE:
-            return HttpResponseRedirect(reverse_lazy('apply:submissions:reviews:form', args=(self.review.submission.pk,)))
+            return HttpResponseRedirect(
+                reverse_lazy(
+                    "apply:submissions:reviews:form", args=(self.review.submission.pk,)
+                )
+            )
         else:
             return response
 
@@ -320,7 +367,7 @@ class ReviewOpinionFormView(UserPassesTestMixin, CreateView):
         return self.review.get_absolute_url()
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReviewDetailView(DetailView):
     def get(self, request, *args, **kwargs):
         view = ReviewDisplay.as_view()
@@ -331,76 +378,102 @@ class ReviewDetailView(DetailView):
         return view(request, *args, **kwargs)
 
 
-@method_decorator(staff_required, name='dispatch')
+@method_decorator(staff_required, name="dispatch")
 class ReviewListView(ListView):
     model = Review
 
     def get_queryset(self):
-        self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk'])
-        self.queryset = self.model.objects.filter(submission=self.submission, is_draft=False)
+        self.submission = get_object_or_404(
+            ApplicationSubmission, id=self.kwargs["submission_pk"]
+        )
+        self.queryset = self.model.objects.filter(
+            submission=self.submission, is_draft=False
+        )
         return super().get_queryset()
 
     def should_display(self, field):
-        return not isinstance(field.block, (RecommendationBlock, RecommendationCommentsBlock, RichTextBlock))
+        return not isinstance(
+            field.block,
+            (RecommendationBlock, RecommendationCommentsBlock, RichTextBlock),
+        )
 
     def get_context_data(self, **kwargs):
         review_data = {}
 
         # Add the header rows
-        review_data['title'] = {'question': '', 'answers': []}
-        review_data['opinions'] = {'question': 'Opinions', 'answers': []}
-        review_data['score'] = {'question': 'Overall Score', 'answers': []}
-        review_data['recommendation'] = {'question': 'Recommendation', 'answers': []}
-        review_data['revision'] = {'question': 'Revision', 'answers': []}
-        review_data['comments'] = {'question': 'Comments', 'answers': []}
+        review_data["title"] = {"question": "", "answers": []}
+        review_data["opinions"] = {"question": "Opinions", "answers": []}
+        review_data["score"] = {"question": "Overall Score", "answers": []}
+        review_data["recommendation"] = {"question": "Recommendation", "answers": []}
+        review_data["revision"] = {"question": "Revision", "answers": []}
+        review_data["comments"] = {"question": "Comments", "answers": []}
 
         responses = self.object_list.count()
-        ordered_reviewers = AssignedReviewers.objects.filter(submission=self.submission).reviewed().review_order()
+        ordered_reviewers = (
+            AssignedReviewers.objects.filter(submission=self.submission)
+            .reviewed()
+            .review_order()
+        )
 
         reviews = {review.author: review for review in self.object_list}
         for i, reviewer in enumerate(ordered_reviewers):
             review = reviews[reviewer]
-            author = '<a href="{}"><span>{}</span></a>'.format(review.get_absolute_url(), review.author)
+            author = '<a href="{}"><span>{}</span></a>'.format(
+                review.get_absolute_url(), review.author
+            )
             if review.author.role:
-                author += generate_image_tag(review.author.role.icon, '12x12')
-            author = f'<div>{author}</div>'
-
-            review_data['title']['answers'].append(author)
-            opinions_template = get_template('review/includes/review_opinions_list.html')
-            opinions_html = opinions_template.render({'opinions': review.opinions.select_related('author').all()})
-            review_data['opinions']['answers'].append(opinions_html)
-            review_data['score']['answers'].append(review.get_score_display)
-            review_data['recommendation']['answers'].append(review.get_recommendation_display())
-            review_data['comments']['answers'].append(review.get_comments_display(include_question=False))
+                author += generate_image_tag(review.author.role.icon, "12x12")
+            author = f"<div>{author}</div>"
+
+            review_data["title"]["answers"].append(author)
+            opinions_template = get_template(
+                "review/includes/review_opinions_list.html"
+            )
+            opinions_html = opinions_template.render(
+                {"opinions": review.opinions.select_related("author").all()}
+            )
+            review_data["opinions"]["answers"].append(opinions_html)
+            review_data["score"]["answers"].append(review.get_score_display)
+            review_data["recommendation"]["answers"].append(
+                review.get_recommendation_display()
+            )
+            review_data["comments"]["answers"].append(
+                review.get_comments_display(include_question=False)
+            )
             if review.for_latest:
-                revision = 'Current'
+                revision = "Current"
             else:
                 revision = '<a href="{}">Compare</a>'.format(review.get_compare_url())
-            review_data['revision']['answers'].append(revision)
+            review_data["revision"]["answers"].append(revision)
 
             for field_id in review.fields:
                 field = review.field(field_id)
                 data = review.data(field_id)
                 if self.should_display(field):
-                    question = field.value['field_label']
-                    review_data.setdefault(field.id, {'question': question, 'answers': [''] * responses})
-                    review_data[field.id]['answers'][i] = field.block.render(None, {'data': data})
+                    question = field.value["field_label"]
+                    review_data.setdefault(
+                        field.id, {"question": question, "answers": [""] * responses}
+                    )
+                    review_data[field.id]["answers"][i] = field.block.render(
+                        None, {"data": data}
+                    )
 
         return super().get_context_data(
-            submission=self.submission,
-            review_data=review_data,
-            **kwargs
+            submission=self.submission, review_data=review_data, **kwargs
         )
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ReviewDeleteView(UserPassesTestMixin, DeleteView):
     model = Review
     raise_exception = True
 
     def test_func(self):
         review = self.get_object()
-        return self.request.user.has_perm('review.delete_review') or self.request.user == review.author.reviewer
+        return (
+            self.request.user.has_perm("review.delete_review")
+            or self.request.user == review.author.reviewer
+        )
 
     def delete(self, request, *args, **kwargs):
         review = self.get_object()
@@ -416,4 +489,4 @@ class ReviewDeleteView(UserPassesTestMixin, DeleteView):
 
     def get_success_url(self):
         review = self.get_object()
-        return reverse_lazy('funds:submissions:detail', args=(review.submission.id,))
+        return reverse_lazy("funds:submissions:detail", args=(review.submission.id,))
diff --git a/hypha/apply/review/wagtail_hooks.py b/hypha/apply/review/wagtail_hooks.py
index c36567dc5033ffefe3159d6bbab8b6d229206434..04ef831790b70260bf817850d3d7eface4146bd0 100644
--- a/hypha/apply/review/wagtail_hooks.py
+++ b/hypha/apply/review/wagtail_hooks.py
@@ -2,9 +2,9 @@ from django.contrib.auth.models import Permission
 from wagtail import hooks
 
 
-@hooks.register('register_permissions')
+@hooks.register("register_permissions")
 def register_permissions():
     return Permission.objects.filter(
-        content_type__app_label='review',
-        codename__in=['add_review', 'change_review', 'delete_review']
+        content_type__app_label="review",
+        codename__in=["add_review", "change_review", "delete_review"],
     )
diff --git a/hypha/apply/search/filters.py b/hypha/apply/search/filters.py
index cb451a413ed723df74d557353ee9f7046d94634d..f345011762022650677fadecce8b9fbedfc7ca50 100644
--- a/hypha/apply/search/filters.py
+++ b/hypha/apply/search/filters.py
@@ -18,7 +18,7 @@ def apply_date_filter(qs, field, values):
     return qs.filter(q_obj)
 
 
-def date_filter_tokens_to_q_obj(tokens: list, field: str)-> Q:
+def date_filter_tokens_to_q_obj(tokens: list, field: str) -> Q:
     """Convert a date tokens parsed using `tokenize_date_filter_value` into a
     Q object that can be used to filter a queryset.
 
diff --git a/hypha/apply/search/query_parser.py b/hypha/apply/search/query_parser.py
index 3f2d27ba722c37c01511edc64a6e848b7a9cd462..edec8925e22a307149d2e822c7b3400b9c6cb43d 100644
--- a/hypha/apply/search/query_parser.py
+++ b/hypha/apply/search/query_parser.py
@@ -44,7 +44,7 @@ class QueryTransformer(Transformer):
 
 # Define the grammar
 parser = Lark(
-    r'''
+    r"""
     ?start: expression
 
     expression: (filter_expression | search_term)*
@@ -63,10 +63,10 @@ parser = Lark(
     %import common.NUMBER
     %import common.ESCAPED_STRING
     %ignore /\s+/
-''',
-    start='start',
-    parser='lalr',
-    transformer=QueryTransformer()
+""",
+    start="start",
+    parser="lalr",
+    transformer=QueryTransformer(),
 )
 
 
diff --git a/hypha/apply/search/tests/test_filters.py b/hypha/apply/search/tests/test_filters.py
index 10fb6c8664fb11b8acd00b954c9b200c1a8df2e4..299ebba446ea51599f377e3c017452e8af4de740 100644
--- a/hypha/apply/search/tests/test_filters.py
+++ b/hypha/apply/search/tests/test_filters.py
@@ -6,19 +6,42 @@ from django.db.models import Q
 from ..filters import date_filter_tokens_to_q_obj
 
 
-@pytest.mark.parametrize("tokens, field, expected", [
-    (['>', 2023, 12, 2], 'date_field', Q(date_field__date__gt=dt.date(2023, 12, 2))),
-    (['>=', 2023, 12, 2], 'date_field', Q(date_field__date__gte=dt.date(2023, 12, 2))),
-    (['<=', 2023, 12, 2], 'date_field', Q(date_field__date__lte=dt.date(2023, 12, 2))),
-    ([None, 2023, 12, 2], 'date_field', Q(date_field__date=dt.date(2023, 12, 2))),
-    ([None, 2023, 12], 'date_field', Q(date_field__month=12) & Q(date_field__year=2023)),
-    (['>', 2023, 12], 'date_field', Q(date_field__month__gt=12) & Q(date_field__year__gt=2023)),
-    (['>', 2023], 'date_field', Q(date_field__year__gt=2023)),
-    (['<', 2023], 'date_field', Q(date_field__year__lt=2023)),
-    ([None, 2023], 'date_field', Q(date_field__year=2023)),
-    ([None, 2023], 'date_field', Q(date_field__year=2023)),
-    ([], 'date_field', Q(None)),
-    ([], 'date_field', Q(None)),
-])
+@pytest.mark.parametrize(
+    "tokens, field, expected",
+    [
+        (
+            [">", 2023, 12, 2],
+            "date_field",
+            Q(date_field__date__gt=dt.date(2023, 12, 2)),
+        ),
+        (
+            [">=", 2023, 12, 2],
+            "date_field",
+            Q(date_field__date__gte=dt.date(2023, 12, 2)),
+        ),
+        (
+            ["<=", 2023, 12, 2],
+            "date_field",
+            Q(date_field__date__lte=dt.date(2023, 12, 2)),
+        ),
+        ([None, 2023, 12, 2], "date_field", Q(date_field__date=dt.date(2023, 12, 2))),
+        (
+            [None, 2023, 12],
+            "date_field",
+            Q(date_field__month=12) & Q(date_field__year=2023),
+        ),
+        (
+            [">", 2023, 12],
+            "date_field",
+            Q(date_field__month__gt=12) & Q(date_field__year__gt=2023),
+        ),
+        ([">", 2023], "date_field", Q(date_field__year__gt=2023)),
+        (["<", 2023], "date_field", Q(date_field__year__lt=2023)),
+        ([None, 2023], "date_field", Q(date_field__year=2023)),
+        ([None, 2023], "date_field", Q(date_field__year=2023)),
+        ([], "date_field", Q(None)),
+        ([], "date_field", Q(None)),
+    ],
+)
 def test_date_filter_tokens_to_q_obj(tokens, field, expected):
     assert date_filter_tokens_to_q_obj(tokens=tokens, field=field) == expected
diff --git a/hypha/apply/search/tests/test_query_parser.py b/hypha/apply/search/tests/test_query_parser.py
index 6dcb10e918223b2eac80a67a04e1e1048fe70f42..95969eef8307de6ef1ff475a4d4becf9389bc700 100644
--- a/hypha/apply/search/tests/test_query_parser.py
+++ b/hypha/apply/search/tests/test_query_parser.py
@@ -5,32 +5,47 @@ import pytest
 from ..query_parser import parse_search_query, tokenize_date_filter_value
 
 
-@pytest.mark.parametrize("query, expected", [
-    ('', {"filters": {}, "text": ""}),
-    ('#12 #13', {"filters": {"id": [12, 13]}, "text": ""}),
-    ('text before #12', {"filters": {"id": [12]}, "text": "text before"}),
-    ('#12 text after', {"filters": {"id": [12]}, "text": "text after"}),
-    ('hello', {"filters": {}, "text": "hello"}),
-    ('submitted:2023-12-02 hello', {"filters": {'submitted': ['2023-12-02']}, "text": "hello"}),
-    ('submitted:>2023-12-02 submitted:<2023-12-01 hello', {"filters": {'submitted': ['>2023-12-02', '<2023-12-01']}, "text": "hello"}),
-    ('submitted:"hello world"', {"filters": {'submitted': ['hello world']}, "text": ""}),
-    ('"hello world"', {"filters": {}, "text": '"hello world"'}),
-])
+@pytest.mark.parametrize(
+    "query, expected",
+    [
+        ("", {"filters": {}, "text": ""}),
+        ("#12 #13", {"filters": {"id": [12, 13]}, "text": ""}),
+        ("text before #12", {"filters": {"id": [12]}, "text": "text before"}),
+        ("#12 text after", {"filters": {"id": [12]}, "text": "text after"}),
+        ("hello", {"filters": {}, "text": "hello"}),
+        (
+            "submitted:2023-12-02 hello",
+            {"filters": {"submitted": ["2023-12-02"]}, "text": "hello"},
+        ),
+        (
+            "submitted:>2023-12-02 submitted:<2023-12-01 hello",
+            {"filters": {"submitted": [">2023-12-02", "<2023-12-01"]}, "text": "hello"},
+        ),
+        (
+            'submitted:"hello world"',
+            {"filters": {"submitted": ["hello world"]}, "text": ""},
+        ),
+        ('"hello world"', {"filters": {}, "text": '"hello world"'}),
+    ],
+)
 def test_parse_search_query(query, expected):
     assert parse_search_query(query) == expected
 
 
-@pytest.mark.parametrize("date_str, expected", [
-    ('>2023-12-02', ['>', 2023, 12, 2]),
-    ('<2023-12-01', ['<', 2023, 12, 1]),
-    ('<=2023-12-01', ['<=', 2023, 12, 1]),
-    ('>=2023-12-01', ['>=', 2023, 12, 1]),
-    ('>=2023-12', ['>=', 2023, 12]),
-    ('2023-12', [None, 2023, 12]),
-    ('2023-24', []),
-    ('1111-12-89', []),
-    ('2023', [None, 2023]),
-    ('>2023', ['>', 2023]),
-])
+@pytest.mark.parametrize(
+    "date_str, expected",
+    [
+        (">2023-12-02", [">", 2023, 12, 2]),
+        ("<2023-12-01", ["<", 2023, 12, 1]),
+        ("<=2023-12-01", ["<=", 2023, 12, 1]),
+        (">=2023-12-01", [">=", 2023, 12, 1]),
+        (">=2023-12", [">=", 2023, 12]),
+        ("2023-12", [None, 2023, 12]),
+        ("2023-24", []),
+        ("1111-12-89", []),
+        ("2023", [None, 2023]),
+        (">2023", [">", 2023]),
+    ],
+)
 def test_tokenize_date_filter_value(date_str, expected):
     assert tokenize_date_filter_value(date_str=date_str) == expected
diff --git a/hypha/apply/stream_forms/apps.py b/hypha/apply/stream_forms/apps.py
index 7521c6a31206b9e2c6752f4133b493218f7afb1a..8cdd109ffc624c3a55ddf4b76595571a32f9c355 100644
--- a/hypha/apply/stream_forms/apps.py
+++ b/hypha/apply/stream_forms/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class StreamFormsConfig(AppConfig):
-    name = 'hypha.apply.stream_forms'
+    name = "hypha.apply.stream_forms"
diff --git a/hypha/apply/stream_forms/blocks.py b/hypha/apply/stream_forms/blocks.py
index 90ed8754a3bdd4d4bc37e83fc611735074d65225..6059e66eed537e17cbd6c7bdb40e405ca7c47158 100644
--- a/hypha/apply/stream_forms/blocks.py
+++ b/hypha/apply/stream_forms/blocks.py
@@ -33,18 +33,18 @@ from .fields import MultiFileField, SingleFileField
 
 
 class FormFieldBlock(StructBlock):
-    field_label = CharBlock(label=_('Label'))
-    help_text = TextBlock(required=False, label=_('Help text'))
-    help_link = URLBlock(required=False, label=_('Help link'))
+    field_label = CharBlock(label=_("Label"))
+    help_text = TextBlock(required=False, label=_("Help text"))
+    help_link = URLBlock(required=False, label=_("Help link"))
 
     field_class = forms.CharField
     widget = None
 
     class Meta:
-        template = 'stream_forms/render_field.html'
+        template = "stream_forms/render_field.html"
 
     def get_slug(self, struct_value):
-        return force_str(slugify(anyascii(struct_value['field_label'])))
+        return force_str(slugify(anyascii(struct_value["field_label"])))
 
     def get_field_class(self, struct_value):
         return self.field_class
@@ -54,15 +54,15 @@ class FormFieldBlock(StructBlock):
 
     def get_field_kwargs(self, struct_value):
         kwargs = {
-            'label': struct_value['field_label'],
-            'help_text': conditional_escape(struct_value['help_text']),
-            'required': struct_value.get('required', False)
+            "label": struct_value["field_label"],
+            "help_text": conditional_escape(struct_value["help_text"]),
+            "required": struct_value.get("required", False),
         }
-        if 'default_value' in struct_value:
-            kwargs['initial'] = struct_value['default_value']
+        if "default_value" in struct_value:
+            kwargs["initial"] = struct_value["default_value"]
         form_widget = self.get_widget(struct_value)
         if form_widget is not None:
-            kwargs['widget'] = form_widget
+            kwargs["widget"] = form_widget
         return kwargs
 
     def get_field(self, struct_value):
@@ -76,28 +76,28 @@ class FormFieldBlock(StructBlock):
     def serialize(self, value, context):
         field_kwargs = self.get_field_kwargs(value)
         return {
-            'question': field_kwargs['label'],
-            'answer': context.get('data'),
-            'type': self.name,
+            "question": field_kwargs["label"],
+            "answer": context.get("data"),
+            "type": self.name,
         }
 
     def serialize_no_response(self, value, context):
         return {
-            'question': value['field_label'],
-            'answer': '-',
-            'type': 'no_response',
+            "question": value["field_label"],
+            "answer": "-",
+            "type": "no_response",
         }
 
     def prepare_data(self, value, data, serialize=False):
         return bleach_value(str(data))
 
     def render(self, value, context):
-        data = context.get('data')
-        data = self.prepare_data(value, data, context.get('serialize', False))
+        data = context.get("data")
+        data = self.prepare_data(value, data, context.get("serialize", False))
 
         context.update(data=data or self.no_response())
 
-        if context.get('serialize'):
+        if context.get("serialize"):
             if not data:
                 return self.serialize_no_response(value, context)
             return self.serialize(value, context)
@@ -112,66 +112,66 @@ class FormFieldBlock(StructBlock):
 
 
 class OptionalFormFieldBlock(FormFieldBlock):
-    required = BooleanBlock(label=_('Required'), required=False)
+    required = BooleanBlock(label=_("Required"), required=False)
 
 
 CHARFIELD_FORMATS = [
-    ('email', _('Email')),
-    ('url', _('URL')),
+    ("email", _("Email")),
+    ("url", _("URL")),
 ]
 
 
 class CharFieldBlock(OptionalFormFieldBlock):
-    format = ChoiceBlock(choices=CHARFIELD_FORMATS, required=False, label=_('Format'))
-    default_value = CharBlock(required=False, label=_('Default value'))
+    format = ChoiceBlock(choices=CHARFIELD_FORMATS, required=False, label=_("Format"))
+    default_value = CharBlock(required=False, label=_("Default value"))
 
     class Meta:
-        label = _('Text field (single line)')
-        template = 'stream_forms/render_unsafe_field.html'
+        label = _("Text field (single line)")
+        template = "stream_forms/render_unsafe_field.html"
 
     def get_field_class(self, struct_value):
-        text_format = struct_value['format']
-        if text_format == 'url':
+        text_format = struct_value["format"]
+        if text_format == "url":
             return forms.URLField
-        if text_format == 'email':
+        if text_format == "email":
             return forms.EmailField
         return super().get_field_class(struct_value)
 
     def get_searchable_content(self, value, data):
         # CharField acts as a fallback. Force data to string
         data = str(data)
-        return bleach.clean(data or '', tags=[], strip=True)
+        return bleach.clean(data or "", tags=[], strip=True)
 
 
 class MultiInputCharFieldBlock(CharFieldBlock):
-    number_of_inputs = IntegerBlock(default=2, label=_('Max number of inputs'))
-    add_button_text = CharBlock(required=False, default=_('Add new item'))
+    number_of_inputs = IntegerBlock(default=2, label=_("Max number of inputs"))
+    add_button_text = CharBlock(required=False, default=_("Add new item"))
 
     class Meta:
-        label = _('Text field (single line) (multiple inputs)')
+        label = _("Text field (single line) (multiple inputs)")
 
 
 class TextFieldBlock(OptionalFormFieldBlock):
-    default_value = TextBlock(required=False, label=_('Default value'))
-    word_limit = IntegerBlock(default=1000, label=_('Word limit'))
+    default_value = TextBlock(required=False, label=_("Default value"))
+    word_limit = IntegerBlock(default=1000, label=_("Word limit"))
 
-    widget = forms.Textarea(attrs={'rows': 5})
+    widget = forms.Textarea(attrs={"rows": 5})
 
     class Meta:
-        label = _('Text field (multi line)')
-        template = 'stream_forms/render_unsafe_field.html'
+        label = _("Text field (multi line)")
+        template = "stream_forms/render_unsafe_field.html"
 
     def get_searchable_content(self, value, data):
-        return bleach.clean(data or '', tags=[], strip=True)
+        return bleach.clean(data or "", tags=[], strip=True)
 
 
 class NumberFieldBlock(OptionalFormFieldBlock):
-    default_value = CharBlock(required=False, label=_('Default value'))
+    default_value = CharBlock(required=False, label=_("Default value"))
 
     widget = forms.NumberInput
 
     class Meta:
-        label = _('Number field')
+        label = _("Number field")
 
     def get_searchable_content(self, value, data):
         return None
@@ -183,8 +183,8 @@ class CheckboxFieldBlock(OptionalFormFieldBlock):
     field_class = forms.BooleanField
 
     class Meta:
-        label = _('Checkbox field')
-        icon = 'tick-inverse'
+        label = _("Checkbox field")
+        icon = "tick-inverse"
 
     def get_searchable_content(self, value, data):
         return None
@@ -194,99 +194,90 @@ class CheckboxFieldBlock(OptionalFormFieldBlock):
 
 
 class RadioButtonsFieldBlock(OptionalFormFieldBlock):
-    choices = ListBlock(CharBlock(label=_('Choice')))
+    choices = ListBlock(CharBlock(label=_("Choice")))
 
     field_class = forms.ChoiceField
     widget = forms.RadioSelect
 
     class Meta:
-        label = _('Radio buttons')
-        icon = 'radio-empty'
+        label = _("Radio buttons")
+        icon = "radio-empty"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['choices'] = [
-            (choice, choice)
-            for choice in struct_value['choices']
-        ]
+        kwargs["choices"] = [(choice, choice) for choice in struct_value["choices"]]
         return kwargs
 
 
 class GroupToggleBlock(FormFieldBlock):
-    required = BooleanBlock(label=_('Required'), default=True, required=False)
+    required = BooleanBlock(label=_("Required"), default=True, required=False)
     choices = ListBlock(
-        CharBlock(label=_('Choice')),
+        CharBlock(label=_("Choice")),
         help_text=(
-            'Please create only two choices for toggle. '
-            'First choice will revel the group and the second hide it. '
-            'Additional choices will be ignored.'
-        )
+            "Please create only two choices for toggle. "
+            "First choice will revel the group and the second hide it. "
+            "Additional choices will be ignored."
+        ),
     )
 
     field_class = forms.ChoiceField
     widget = forms.RadioSelect
 
     class Meta:
-        label = _('Group fields')
-        icon = 'group'
-        help_text = 'Remember to end group using Group fields end block.'
+        label = _("Group fields")
+        icon = "group"
+        help_text = "Remember to end group using Group fields end block."
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        field_choices = [
-            (choice, choice)
-            for choice in struct_value['choices']
-        ]
+        field_choices = [(choice, choice) for choice in struct_value["choices"]]
         total_choices = len(field_choices)
         if total_choices > 2:
             # For toggle we need only two choices
             field_choices = field_choices[:2]
         elif total_choices < 2:
             field_choices = [
-                ('yes', 'Yes'),
-                ('no', 'No'),
+                ("yes", "Yes"),
+                ("no", "No"),
             ]
-        kwargs['choices'] = field_choices
+        kwargs["choices"] = field_choices
         return kwargs
 
 
 class GroupToggleEndBlock(StaticBlock):
     class Meta:
-        label = 'Group fields end'
-        icon = 'group'
-        admin_text = 'End of Group fields Block'
+        label = "Group fields end"
+        icon = "group"
+        admin_text = "End of Group fields Block"
 
 
 class DropdownFieldBlock(RadioButtonsFieldBlock):
     widget = forms.Select
 
     class Meta:
-        label = _('Dropdown field')
-        icon = 'arrow-down-big'
+        label = _("Dropdown field")
+        icon = "arrow-down-big"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['choices'].insert(0, BLANK_CHOICE_DASH[0])
+        kwargs["choices"].insert(0, BLANK_CHOICE_DASH[0])
         return kwargs
 
 
 class CheckboxesFieldBlock(OptionalFormFieldBlock):
-    checkboxes = ListBlock(CharBlock(label=_('Checkbox')))
+    checkboxes = ListBlock(CharBlock(label=_("Checkbox")))
 
     field_class = forms.MultipleChoiceField
     widget = forms.CheckboxSelectMultiple
 
     class Meta:
-        label = _('Multiple checkboxes field')
-        icon = 'list-ul'
-        template = 'stream_forms/render_list_field.html'
+        label = _("Multiple checkboxes field")
+        icon = "list-ul"
+        template = "stream_forms/render_list_field.html"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['choices'] = [
-            (choice, choice)
-            for choice in struct_value['checkboxes']
-        ]
+        kwargs["choices"] = [(choice, choice) for choice in struct_value["checkboxes"]]
         return kwargs
 
     def prepare_data(self, value, data, serialize=False):
@@ -299,14 +290,16 @@ class CheckboxesFieldBlock(OptionalFormFieldBlock):
 
 class DatePickerInput(forms.DateInput):
     def __init__(self, *args, **kwargs):
-        attrs = kwargs.get('attrs')
+        attrs = kwargs.get("attrs")
         if attrs is None:
             attrs = {}
-        attrs.update({
-            'data-provide': 'datepicker',
-            'data-date-format': 'yyyy-mm-dd',
-        })
-        kwargs['attrs'] = attrs
+        attrs.update(
+            {
+                "data-provide": "datepicker",
+                "data-date-format": "yyyy-mm-dd",
+            }
+        )
+        kwargs["attrs"] = attrs
         super().__init__(*args, **kwargs)
 
 
@@ -317,8 +310,8 @@ class DateFieldBlock(OptionalFormFieldBlock):
     widget = DatePickerInput
 
     class Meta:
-        label = _('Date field')
-        icon = 'date'
+        label = _("Date field")
+        icon = "date"
 
     def get_searchable_content(self, value, data):
         return None
@@ -329,7 +322,7 @@ class DateFieldBlock(OptionalFormFieldBlock):
 
 
 class HTML5TimeInput(forms.TimeInput):
-    input_type = 'time'
+    input_type = "time"
 
 
 class TimeFieldBlock(OptionalFormFieldBlock):
@@ -339,8 +332,8 @@ class TimeFieldBlock(OptionalFormFieldBlock):
     widget = HTML5TimeInput
 
     class Meta:
-        label = _('Time field')
-        icon = 'time'
+        label = _("Time field")
+        icon = "time"
 
     def get_searchable_content(self, value, data):
         return None
@@ -352,8 +345,7 @@ class TimeFieldBlock(OptionalFormFieldBlock):
 
 class DateTimePickerInput(forms.SplitDateTimeWidget):
     def __init__(self, attrs=None, date_format=None, time_format=None):
-        super().__init__(attrs=attrs,
-                         date_format=date_format, time_format=time_format)
+        super().__init__(attrs=attrs, date_format=date_format, time_format=time_format)
         self.widgets = (
             DatePickerInput(attrs=attrs, format=date_format),
             HTML5TimeInput(attrs=attrs, format=time_format),
@@ -372,8 +364,8 @@ class DateTimeFieldBlock(OptionalFormFieldBlock):
     widget = DateTimePickerInput
 
     class Meta:
-        label = _('Date+time field')
-        icon = 'date'
+        label = _("Date+time field")
+        icon = "date"
 
     def get_searchable_content(self, value, data):
         return None
@@ -385,7 +377,7 @@ class DateTimeFieldBlock(OptionalFormFieldBlock):
 
 class UploadableMediaBlock(OptionalFormFieldBlock):
     class Meta:
-        template = 'stream_forms/render_file_field.html'
+        template = "stream_forms/render_file_field.html"
 
     def get_searchable_content(self, value, data):
         return None
@@ -404,8 +396,8 @@ class ImageFieldBlock(UploadableMediaBlock):
     widget = ClearableFileInput
 
     class Meta:
-        label = _('Image field')
-        icon = 'image'
+        label = _("Image field")
+        icon = "image"
 
 
 class FileFieldBlock(UploadableMediaBlock):
@@ -413,15 +405,19 @@ class FileFieldBlock(UploadableMediaBlock):
 
     You must implement this if you want to reuse it.
     """
+
     field_class = SingleFileField
 
     class Meta:
-        label = _('Single File field')
-        icon = 'download'
+        label = _("Single File field")
+        icon = "download"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['help_text'] = kwargs['help_text'] + f" Accepted file types are {settings.FILE_ACCEPT_ATTR_VALUE}"
+        kwargs["help_text"] = (
+            kwargs["help_text"]
+            + f" Accepted file types are {settings.FILE_ACCEPT_ATTR_VALUE}"
+        )
         return kwargs
 
 
@@ -429,13 +425,16 @@ class MultiFileFieldBlock(UploadableMediaBlock):
     field_class = MultiFileField
 
     class Meta:
-        icon = 'download'
-        label = _('Multiple File field')
-        template = 'stream_forms/render_multi_file_field.html'
+        icon = "download"
+        label = _("Multiple File field")
+        template = "stream_forms/render_multi_file_field.html"
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['help_text'] = kwargs['help_text'] + f" Accepted file types are {settings.FILE_ACCEPT_ATTR_VALUE}"
+        kwargs["help_text"] = (
+            kwargs["help_text"]
+            + f" Accepted file types are {settings.FILE_ACCEPT_ATTR_VALUE}"
+        )
         return kwargs
 
     def prepare_data(self, value, data, serialize):
@@ -448,14 +447,10 @@ class MultiFileFieldBlock(UploadableMediaBlock):
 
 
 class HeadingBlock(StructBlock):
-    HEADER_SIZE = [
-        ('h2', 'H2'),
-        ('h3', 'H3'),
-        ('h4', 'H4')
-    ]
+    HEADER_SIZE = [("h2", "H2"), ("h3", "H3"), ("h4", "H4")]
 
     heading_text = CharBlock(classname="title", required=True)
-    size = ChoiceBlock(choices=HEADER_SIZE, default='h2')
+    size = ChoiceBlock(choices=HEADER_SIZE, default="h2")
 
     class Meta:
         icon = "title"
@@ -463,24 +458,24 @@ class HeadingBlock(StructBlock):
 
 
 class FormFieldsBlock(StreamBlock):
-    text_markup = RichTextBlock(group=_('Custom'), label=_('Paragraph'))
-    header_markup = HeadingBlock(group=_('Custom'), label=_('Section header'))
-    char = CharFieldBlock(group=_('Fields'))
-    multi_inputs_char = MultiInputCharFieldBlock(group=_('Fields'))
-    text = TextFieldBlock(group=_('Fields'))
-    number = NumberFieldBlock(group=_('Fields'))
-    checkbox = CheckboxFieldBlock(group=_('Fields'))
-    radios = RadioButtonsFieldBlock(group=_('Fields'))
-    dropdown = DropdownFieldBlock(group=_('Fields'))
-    checkboxes = CheckboxesFieldBlock(group=_('Fields'))
-    date = DateFieldBlock(group=_('Fields'))
-    time = TimeFieldBlock(group=_('Fields'))
-    datetime = DateTimeFieldBlock(group=_('Fields'))
-    image = ImageFieldBlock(group=_('Fields'))
-    file = FileFieldBlock(group=_('Fields'))
-    multi_file = MultiFileFieldBlock(group=_('Fields'))
+    text_markup = RichTextBlock(group=_("Custom"), label=_("Paragraph"))
+    header_markup = HeadingBlock(group=_("Custom"), label=_("Section header"))
+    char = CharFieldBlock(group=_("Fields"))
+    multi_inputs_char = MultiInputCharFieldBlock(group=_("Fields"))
+    text = TextFieldBlock(group=_("Fields"))
+    number = NumberFieldBlock(group=_("Fields"))
+    checkbox = CheckboxFieldBlock(group=_("Fields"))
+    radios = RadioButtonsFieldBlock(group=_("Fields"))
+    dropdown = DropdownFieldBlock(group=_("Fields"))
+    checkboxes = CheckboxesFieldBlock(group=_("Fields"))
+    date = DateFieldBlock(group=_("Fields"))
+    time = TimeFieldBlock(group=_("Fields"))
+    datetime = DateTimeFieldBlock(group=_("Fields"))
+    image = ImageFieldBlock(group=_("Fields"))
+    file = FileFieldBlock(group=_("Fields"))
+    multi_file = MultiFileFieldBlock(group=_("Fields"))
     group_toggle = GroupToggleBlock(group=_("Custom"))
     group_toggle_end = GroupToggleEndBlock(group=_("Custom"))
 
     class Meta:
-        label = _('Form fields')
+        label = _("Form fields")
diff --git a/hypha/apply/stream_forms/fields.py b/hypha/apply/stream_forms/fields.py
index ede6baefe3638f3b4d8c272c3fbc45e2d6ae7699..cef673915cec5931ae25047b0188bd5b951b9b66 100644
--- a/hypha/apply/stream_forms/fields.py
+++ b/hypha/apply/stream_forms/fields.py
@@ -8,19 +8,20 @@ from django_file_form.widgets import UploadMultipleWidget, UploadWidget
 
 
 class FileFieldWidgetMixin:
-
     # This file seems to be imported even during collectstatic,
     # at which point `static()` won't be able to find these files yet
     # using production settings, so we delay calling `static()` until it's needed.
     @cached_property
     def media(self):
         return Media(
-            css={'all': [
-                static('file_form/file_form.css'),
-            ]},
+            css={
+                "all": [
+                    static("file_form/file_form.css"),
+                ]
+            },
             js=[
-                static('file_form/file_form.js'),
-                static('js/apply/file-uploads.js'),
+                static("file_form/file_form.js"),
+                static("js/apply/file-uploads.js"),
             ],
         )
 
@@ -36,28 +37,35 @@ class MultiFileField(MultipleUploadedFileField):
         if not value:
             return []
         old_files = [
-            file for file in value
-            if hasattr(file, 'is_placeholder') and file.is_placeholder
+            file
+            for file in value
+            if hasattr(file, "is_placeholder") and file.is_placeholder
         ]
         new_files = [
-            file for file in value
-            if hasattr(file, 'is_placeholder') and not file.is_placeholder
+            file
+            for file in value
+            if hasattr(file, "is_placeholder") and not file.is_placeholder
         ]
         if not new_files and initial and len(old_files) == len(initial):
             return initial
 
         files = [
-            FileField(validators=[
-                FileExtensionValidator(allowed_extensions=settings.FILE_ALLOWED_EXTENSIONS)
-            ]).clean(file, initial) for file in value
+            FileField(
+                validators=[
+                    FileExtensionValidator(
+                        allowed_extensions=settings.FILE_ALLOWED_EXTENSIONS
+                    )
+                ]
+            ).clean(file, initial)
+            for file in value
         ]
 
         return files
 
     def widget_attrs(self, widget):
         attrs = super().widget_attrs(widget)
-        if isinstance(widget, MultiFileFieldWidget) and 'accept' not in widget.attrs:
-            attrs.setdefault('accept', settings.FILE_ACCEPT_ATTR_VALUE)
+        if isinstance(widget, MultiFileFieldWidget) and "accept" not in widget.attrs:
+            attrs.setdefault("accept", settings.FILE_ACCEPT_ATTR_VALUE)
         return attrs
 
 
@@ -71,14 +79,16 @@ class SingleFileField(UploadedFileField):
     def clean(self, value, initial):
         if not value:
             return
-        if hasattr(value, 'is_placeholder') and value.is_placeholder and initial:
+        if hasattr(value, "is_placeholder") and value.is_placeholder and initial:
             return initial
-        validator = FileExtensionValidator(allowed_extensions=settings.FILE_ALLOWED_EXTENSIONS)
+        validator = FileExtensionValidator(
+            allowed_extensions=settings.FILE_ALLOWED_EXTENSIONS
+        )
         file = FileField(validators=[validator]).clean(value, initial)
         return file
 
     def widget_attrs(self, widget):
         attrs = super().widget_attrs(widget)
-        if isinstance(widget, SingleFileFieldWidget) and 'accept' not in widget.attrs:
-            attrs.setdefault('accept', settings.FILE_ACCEPT_ATTR_VALUE)
+        if isinstance(widget, SingleFileFieldWidget) and "accept" not in widget.attrs:
+            attrs.setdefault("accept", settings.FILE_ACCEPT_ATTR_VALUE)
         return attrs
diff --git a/hypha/apply/stream_forms/files.py b/hypha/apply/stream_forms/files.py
index 00442348b848dd50adb8e1e24bc73146169319f9..4cc42f4471a32b3c57b8e39ade894ce77493e1d1 100644
--- a/hypha/apply/stream_forms/files.py
+++ b/hypha/apply/stream_forms/files.py
@@ -9,8 +9,8 @@ class StreamFieldDataEncoder(DjangoJSONEncoder):
     def default(self, o):
         if isinstance(o, StreamFieldFile):
             return {
-                'name': o.name,
-                'filename': o.filename,
+                "name": o.name,
+                "filename": o.filename,
             }
         return super().default(o)
 
@@ -21,7 +21,10 @@ class StreamFieldFile(File):
 
     see django.db.models.fields.files for the inspiration
     """
-    def __init__(self, instance, field, *args, filename=None, storage=default_storage, **kwargs):
+
+    def __init__(
+        self, instance, field, *args, filename=None, storage=default_storage, **kwargs
+    ):
         super().__init__(*args, **kwargs)
         # Field is the wagtail field that the file was uploaded to
         self.field = field
@@ -46,8 +49,8 @@ class StreamFieldFile(File):
         return other.__eq__(self)
 
     def _get_file(self):
-        if getattr(self, '_file', None) is None:
-            self._file = self.storage.open(self.name, 'rb')
+        if getattr(self, "_file", None) is None:
+            self._file = self.storage.open(self.name, "rb")
         return self._file
 
     def _set_file(self, file):
@@ -85,18 +88,18 @@ class StreamFieldFile(File):
         try:
             modified_time = self.storage.get_modified_time(self.name).date()
         except FileNotFoundError:
-            modified_time = '–'
+            modified_time = "–"
 
         return modified_time
 
     def serialize(self):
         return {
-            'url': self.url,
-            'filename': self.filename,
+            "url": self.url,
+            "filename": self.filename,
         }
 
-    def open(self, mode='rb'):
-        if getattr(self, '_file', None) is None:
+    def open(self, mode="rb"):
+        if getattr(self, "_file", None) is None:
             self.file = self.storage.open(self.name, mode)
         else:
             self.file.open(mode)
@@ -117,7 +120,7 @@ class StreamFieldFile(File):
             return
         # Only close the file if it's already open, which we know by the
         # presence of self._file
-        if hasattr(self, '_file'):
+        if hasattr(self, "_file"):
             self.close()
             del self.file
 
@@ -128,11 +131,11 @@ class StreamFieldFile(File):
 
     @property
     def closed(self):
-        file = getattr(self, '_file', None)
+        file = getattr(self, "_file", None)
         return file is None or file.closed
 
     def close(self):
-        file = getattr(self, '_file', None)
+        file = getattr(self, "_file", None)
         if file is not None:
             file.close()
 
diff --git a/hypha/apply/stream_forms/forms.py b/hypha/apply/stream_forms/forms.py
index 0731494cc1ab59d9b63f1fe583868e382cd82e08..67f0b31f165c4f6720b197cea103f43c630c9abd 100644
--- a/hypha/apply/stream_forms/forms.py
+++ b/hypha/apply/stream_forms/forms.py
@@ -15,6 +15,7 @@ class MixedFieldMetaclass(DeclarativeFieldsMetaclass):
     This allows the form to be rendered when Field-like blocks are passed
     in as part of the definition
     """
+
     def __new__(mcs, name, bases, attrs):
         display = attrs.copy()
         new_class = super(MixedFieldMetaclass, mcs).__new__(mcs, name, bases, attrs)
@@ -31,6 +32,7 @@ class StreamBaseForm(FileFormMixin, forms.Form, metaclass=MixedFieldMetaclass):
             self.fields = self.display
             yield from func(self, *args, **kwargs)
             self.fields = fields
+
         return wrapped
 
     @swap_fields_for_display
@@ -45,9 +47,48 @@ class StreamBaseForm(FileFormMixin, forms.Form, metaclass=MixedFieldMetaclass):
         # No hidden fields are returned by default because of MixedFieldMetaclass
         return [self[f] for f in self.fields.keys() if self[f].is_hidden]
 
+    def _update_files_data(self):
+        """
+        Overridden method of django_file_form's FileFormMixin, to handle multiple forms on the same page.
+        """
+        # handle two form_id, use case PAF and SOW
+        form_id = self.data.getlist(self.add_prefix("form_id"))
+
+        if not form_id:
+            return
+
+        form_id = form_id[0]
+        for field_name in self._file_form_field_names():
+            field = self.fields[field_name]
+            prefixed_field_name = self.add_prefix(field_name)
+
+            file_data = field.get_file_data(prefixed_field_name, form_id)
+
+            if file_data:
+                # NB: django-formtools wizard uses dict instead of MultiValueDict
+                if isinstance(file_data, list) and hasattr(self.files, "setlist"):
+                    self.files.setlist(prefixed_field_name, file_data)
+                else:
+                    self.files[prefixed_field_name] = file_data
+
+    def delete_temporary_files(self):
+        """
+        Overridden method of django_file_form's FileFormMixin, to handle multiple forms on the same page.
+        """
+        form_id = self.data.getlist(self.add_prefix("form_id"))
+
+        if not form_id:
+            return
+
+        form_id = form_id[0]
+        for field_name, field in self.fields.items():
+            if hasattr(field, "delete_file_data"):
+                prefixed_field_name = self.add_prefix(field_name)
+                field.delete_file_data(prefixed_field_name, form_id)
+
 
 class PageStreamBaseForm(BaseForm, StreamBaseForm):
-    """ Adds page and user reference to the form class"""
+    """Adds page and user reference to the form class"""
 
     def clean(self):
         cleaned_data = super().clean()
@@ -56,30 +97,41 @@ class PageStreamBaseForm(BaseForm, StreamBaseForm):
             if isinstance(value, EmailField):
                 email = self.data.get(field)
                 if email:
-                    is_registered, _ = is_user_already_registered(email=self.data.get(field))
+                    is_registered, _ = is_user_already_registered(
+                        email=self.data.get(field)
+                    )
                     if is_registered:
                         user = get_user_by_email(email=email)
                         if not user:
-                            self.add_error(field, 'Found multiple account')
-                            raise ValidationError(mark_safe('Found multiple account for the same email. '
-                                                            'Please login with the correct credentials or '
-                                                            '<a href="mailto:{}">'
-                                                            'contact to the support team'
-                                                            '</a>.'.format(settings.ORG_EMAIL)))
+                            self.add_error(field, "Found multiple account")
+                            raise ValidationError(
+                                mark_safe(
+                                    "Found multiple account for the same email. "
+                                    "Please login with the correct credentials or "
+                                    '<a href="mailto:{}">'
+                                    "contact to the support team"
+                                    "</a>.".format(settings.ORG_EMAIL)
+                                )
+                            )
 
                         elif not user.is_active:
-                            self.add_error(field, 'Found an inactive account')
-                            raise ValidationError(mark_safe('Found an inactive account for the same email. '
-                                                            'Please use different email or '
-                                                            '<a href="mailto:{}">'
-                                                            'contact to the support team'
-                                                            '</a>.'.format(settings.ORG_EMAIL)))
+                            self.add_error(field, "Found an inactive account")
+                            raise ValidationError(
+                                mark_safe(
+                                    "Found an inactive account for the same email. "
+                                    "Please use different email or "
+                                    '<a href="mailto:{}">'
+                                    "contact to the support team"
+                                    "</a>.".format(settings.ORG_EMAIL)
+                                )
+                            )
 
         return cleaned_data
 
 
 class BlockFieldWrapper:
     """Wraps stream blocks so that they can be rendered as a field within a form"""
+
     is_hidden = False
     label = None
     help_text = None
diff --git a/hypha/apply/stream_forms/models.py b/hypha/apply/stream_forms/models.py
index c8b85c5ed844133ec33e8027438878a8f7a65fbe..b20e5875dde3936c8a47b6bb32647a6b6998888f 100644
--- a/hypha/apply/stream_forms/models.py
+++ b/hypha/apply/stream_forms/models.py
@@ -28,8 +28,10 @@ class BaseStreamForm:
     @classmethod
     def from_db(cls, db, field_names, values):
         instance = super().from_db(db, field_names, values)
-        if 'form_data' in field_names:
-            instance.form_data = cls.deserialize_form_data(instance, instance.form_data, instance.form_fields)
+        if "form_data" in field_names:
+            instance.form_data = cls.deserialize_form_data(
+                instance, instance.form_data, instance.form_fields
+            )
         return instance
 
     @classmethod
@@ -39,8 +41,8 @@ class BaseStreamForm:
         # Do not attempt to iterate over form_fields - that will fully instantiate the form_fields
         # including any sub queries that they do
         for _i, field_data in enumerate(form_fields.raw_data):
-            block = form_fields.stream_block.child_blocks[field_data['type']]
-            field_id = field_data.get('id')
+            block = form_fields.stream_block.child_blocks[field_data["type"]]
+            field_id = field_data.get("id")
             try:
                 value = data[field_id]
             except KeyError:
@@ -68,7 +70,9 @@ class BaseStreamForm:
             struct_value = struct_child.value
             if isinstance(block, FormFieldBlock):
                 field_from_block = block.get_field(struct_value)
-                disabled_help_text = _('You are logged in so this information is fetched from your user account.')
+                disabled_help_text = _(
+                    "You are logged in so this information is fetched from your user account."
+                )
                 if isinstance(block, FullNameBlock) and user and user.is_authenticated:
                     field_from_block.disabled = True
                     field_from_block.initial = user.full_name
@@ -77,25 +81,35 @@ class BaseStreamForm:
                     field_from_block.disabled = True
                     field_from_block.initial = user.email
                     field_from_block.help_text = disabled_help_text
-                if draft and not issubclass(block.__class__, ApplicationMustIncludeFieldBlock):
+                if draft and not issubclass(
+                    block.__class__, ApplicationMustIncludeFieldBlock
+                ):
                     field_from_block.required = False
-                field_from_block.help_link = struct_value.get('help_link')
+                field_from_block.help_link = struct_value.get("help_link")
                 field_from_block.group_number = group_counter if is_in_group else 1
                 if isinstance(block, GroupToggleBlock) and not is_in_group:
                     field_from_block.group_number = 1
                     field_from_block.grouper_for = group_counter + 1
                     group_counter += 1
                     is_in_group = True
-                    grouped_fields_visible = form_data.get(struct_child.id) == field_from_block.choices[0][0]
+                    grouped_fields_visible = (
+                        form_data.get(struct_child.id) == field_from_block.choices[0][0]
+                    )
                 if isinstance(block, TextFieldBlock):
-                    field_from_block.word_limit = struct_value.get('word_limit')
+                    field_from_block.word_limit = struct_value.get("word_limit")
                 if isinstance(block, MultiInputCharFieldBlock):
-                    number_of_inputs = struct_value.get('number_of_inputs')
+                    number_of_inputs = struct_value.get("number_of_inputs")
                     for index in range(number_of_inputs):
-                        form_fields[struct_child.id + '_' + str(index)] = field_from_block
+                        form_fields[
+                            struct_child.id + "_" + str(index)
+                        ] = field_from_block
                         field_from_block.multi_input_id = struct_child.id
-                        field_from_block.add_button_text = struct_value.get('add_button_text')
-                        if index == number_of_inputs - 1:  # Add button after last input field
+                        field_from_block.add_button_text = struct_value.get(
+                            "add_button_text"
+                        )
+                        if (
+                            index == number_of_inputs - 1
+                        ):  # Add button after last input field
                             field_from_block.multi_input_add_button = True
                             # Index for field until which fields will be visible to applicant.
                             # Initially only the first field with id UUID_0 will be visible.
@@ -108,8 +122,12 @@ class BaseStreamForm:
                         field_from_block = copy.copy(field_from_block)
                 else:
                     if is_in_group and not isinstance(block, GroupToggleBlock):
-                        field_from_block.required_when_visible = field_from_block.required
-                        field_from_block.required = field_from_block.required & grouped_fields_visible
+                        field_from_block.required_when_visible = (
+                            field_from_block.required
+                        )
+                        field_from_block.required = (
+                            field_from_block.required & grouped_fields_visible
+                        )
                         field_from_block.visible = grouped_fields_visible
                     form_fields[struct_child.id] = field_from_block
             elif isinstance(block, GroupToggleEndBlock):
@@ -124,7 +142,11 @@ class BaseStreamForm:
         return form_fields
 
     def get_form_class(self, draft=False, form_data=None, user=None):
-        return type('WagtailStreamForm', (self.submission_form_class,), self.get_form_fields(draft, form_data, user))
+        return type(
+            "WagtailStreamForm",
+            (self.submission_form_class,),
+            self.get_form_fields(draft, form_data, user),
+        )
 
 
 class AbstractStreamForm(BaseStreamForm, AbstractForm):
diff --git a/hypha/apply/stream_forms/templates/stream_forms/heading_field.html b/hypha/apply/stream_forms/templates/stream_forms/heading_field.html
index 6d5818ebbc3664b542f99dc6f394da7d696d8b22..0c8b1e07e22c774e4c61279ff0db373ef8f7e485 100644
--- a/hypha/apply/stream_forms/templates/stream_forms/heading_field.html
+++ b/hypha/apply/stream_forms/templates/stream_forms/heading_field.html
@@ -1,14 +1,14 @@
-<div class="rich-text section-head">
-    <{{ self.size }} tabindex="-1" class="group">
+<div class="section-head mb-4">
+    <{{ self.size }} tabindex="-1" class="p-2 mb-2 bg-light-blue text-white">
 
-        {{ value.heading_text }}
-        <a id="{{ value.heading_text|slugify }}"
-            class="anchor hidden group-hover:inline-block text-gray-700"
-            href="#{{ value.heading_text|slugify }}"
-            aria-hidden='true'>
-            <svg class="icon icon--anchor-link">
-                <use xlink:href="#anchor-link"></use>
-            </svg>
-        </a>
-    </{{ self.size }}>
+    {{ value.heading_text }}
+    <a id="{{ value.heading_text|slugify }}"
+       class="anchor hidden group-hover:inline-block text-gray-700"
+       href="#{{ value.heading_text|slugify }}"
+       aria-hidden='true'>
+        <svg class="icon icon--anchor-link">
+            <use xlink:href="#anchor-link"></use>
+        </svg>
+    </a>
+</{{ self.size }}>
 </div>
diff --git a/hypha/apply/stream_forms/templates/stream_forms/render_field.html b/hypha/apply/stream_forms/templates/stream_forms/render_field.html
index 47387630e685bad0de9aa5b70894e96dcdcdfbe4..a6bb449491145120bdcdcb42e1bbf4f153c01ada 100644
--- a/hypha/apply/stream_forms/templates/stream_forms/render_field.html
+++ b/hypha/apply/stream_forms/templates/stream_forms/render_field.html
@@ -1,12 +1,12 @@
 {% if include_question %}
-<section>
-    <h4 class="question">{{ value.field_label }}</h4>
+    <section>
+        <h4 class="question">{{ value.field_label }}</h4>
 {% endif %}
 
 <div class="answer">
-{% block data_display %}<p>{{ data }}</p>{% endblock %}
+    {% block data_display %}<p>{{ data }}</p>{% endblock %}
 </div>
 
 {% if include_question %}
-</section>
+    </section>
 {% endif %}
diff --git a/hypha/apply/stream_forms/templates/stream_forms/render_multi_file_field.html b/hypha/apply/stream_forms/templates/stream_forms/render_multi_file_field.html
index b427ee9d071e67850e4fe7451f3725d9f198c564..f29dd76e060e2af2793e71e89eed12ce1974ccff 100644
--- a/hypha/apply/stream_forms/templates/stream_forms/render_multi_file_field.html
+++ b/hypha/apply/stream_forms/templates/stream_forms/render_multi_file_field.html
@@ -1,12 +1,12 @@
 {% extends "stream_forms/render_field.html" %}
 {% block data_display %}
     <div class="wrapper">
-    {% for file in data %}
-        {% if file.name %}
-            {% include "stream_forms/includes/file_field.html" with file=file %}
-        {% else %}
-            {{ file }}
-        {% endif %}
-    {% endfor %}
+        {% for file in data %}
+            {% if file.name %}
+                {% include "stream_forms/includes/file_field.html" with file=file %}
+            {% else %}
+                {{ file }}
+            {% endif %}
+        {% endfor %}
     </div>
 {% endblock %}
diff --git a/hypha/apply/stream_forms/testing/factories.py b/hypha/apply/stream_forms/testing/factories.py
index 7a16818da1d91b9d9ce0bf22707b62db1bf7b870..3c23d0bcc671db664ceae8c80ad9a2e608047e3b 100644
--- a/hypha/apply/stream_forms/testing/factories.py
+++ b/hypha/apply/stream_forms/testing/factories.py
@@ -11,11 +11,17 @@ from wagtail.rich_text import RichText
 
 from hypha.apply.stream_forms import blocks as stream_blocks
 
-__all__ = ['BLOCK_FACTORY_DEFINITION', 'FormFieldBlockFactory',
-           'CharFieldBlockFactory', 'NumberFieldBlockFactory',
-           'RadioFieldBlockFactory', 'UploadableMediaFactory',
-           'ImageFieldBlockFactory', 'FileFieldBlockFactory',
-           'MultiFileFieldBlockFactory']
+__all__ = [
+    "BLOCK_FACTORY_DEFINITION",
+    "FormFieldBlockFactory",
+    "CharFieldBlockFactory",
+    "NumberFieldBlockFactory",
+    "RadioFieldBlockFactory",
+    "UploadableMediaFactory",
+    "ImageFieldBlockFactory",
+    "FileFieldBlockFactory",
+    "MultiFileFieldBlockFactory",
+]
 
 
 class AnswerFactory(factory.Factory):
@@ -29,7 +35,7 @@ class AnswerFactory(factory.Factory):
 class AddFormFieldsMetaclass(factory.base.FactoryMetaClass):
     def __new__(mcs, class_name, bases, attrs):
         # Add the form field definitions to allow nested calls
-        field_factory = attrs.pop('field_factory', None)
+        field_factory = attrs.pop("field_factory", None)
         if field_factory:
             wrapped_factories = {
                 k: factory.SubFactory(AnswerFactory, sub_factory=v)
@@ -42,20 +48,18 @@ class AddFormFieldsMetaclass(factory.base.FactoryMetaClass):
 
 class FormDataFactory(factory.Factory, metaclass=AddFormFieldsMetaclass):
     @classmethod
-    def _create(self, *args, form_fields = None, for_factory=None, clean=False, **kwargs):
+    def _create(self, *args, form_fields=None, for_factory=None, clean=False, **kwargs):
         if form_fields is None:
             form_fields = {}
 
         if form_fields and isinstance(form_fields, str):
             form_fields = json.loads(form_fields)
-            form_definition = {
-                field['type']: field['id']
-                for field in form_fields
-            }
+            form_definition = {field["type"]: field["id"] for field in form_fields}
         else:
             form_definition = {
                 f.block_type: f.id
-                for f in form_fields or for_factory.Meta.model.form_fields.field.to_python(form_fields)
+                for f in form_fields
+                or for_factory.Meta.model.form_fields.field.to_python(form_fields)
             }
 
         form_data = {}
@@ -95,8 +99,8 @@ class ParagraphBlockFactory(wagtail_factories.blocks.BlockFactory):
 
 
 class FormFieldBlockFactory(wagtail_factories.StructBlockFactory):
-    default_value = factory.Faker('sentence')
-    field_label = factory.Faker('sentence')
+    default_value = factory.Faker("sentence")
+    field_label = factory.Faker("sentence")
     help_text = factory.LazyAttribute(
         lambda o: f"Help text for {o._Resolver__step.builder.factory_meta.model.__name__}"
     )
@@ -117,35 +121,35 @@ class FormFieldBlockFactory(wagtail_factories.StructBlockFactory):
 
 
 class CharFieldBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('sentence')
+    default_value = factory.Faker("sentence")
 
     class Meta:
         model = stream_blocks.CharFieldBlock
 
 
 class TextFieldBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('sentence')
+    default_value = factory.Faker("sentence")
 
     class Meta:
         model = stream_blocks.TextFieldBlock
 
 
 class DateFieldBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('date_object')
+    default_value = factory.Faker("date_object")
 
     class Meta:
         model = stream_blocks.DateFieldBlock
 
 
 class TimeFieldBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('time_object')
+    default_value = factory.Faker("time_object")
 
     class Meta:
         model = stream_blocks.TimeFieldBlock
 
 
 class DateTimeFieldBlockFactory(FormFieldBlockFactory):
-    default_value = factory.Faker('date_time')
+    default_value = factory.Faker("date_time")
 
     class Meta:
         model = stream_blocks.DateTimeFieldBlock
@@ -157,8 +161,8 @@ class DateTimeFieldBlockFactory(FormFieldBlockFactory):
         else:
             date_time = super().make_form_answer(params)
         return {
-            'date': str(date_time.date()),
-            'time': str(date_time.time()),
+            "date": str(date_time.date()),
+            "time": str(date_time.time()),
         }
 
 
@@ -174,7 +178,7 @@ class NumberFieldBlockFactory(FormFieldBlockFactory):
 
 
 class CheckboxFieldBlockFactory(FormFieldBlockFactory):
-    choices = ['check_one', 'check_two']
+    choices = ["check_one", "check_two"]
 
     class Meta:
         model = stream_blocks.CheckboxFieldBlock
@@ -185,7 +189,7 @@ class CheckboxFieldBlockFactory(FormFieldBlockFactory):
 
 
 class CheckboxesFieldBlockFactory(FormFieldBlockFactory):
-    checkboxes = ['check_multiple_one', 'check_multiple_two', 'check_multiple_three']
+    checkboxes = ["check_multiple_one", "check_multiple_two", "check_multiple_three"]
 
     class Meta:
         model = stream_blocks.CheckboxesFieldBlock
@@ -196,7 +200,7 @@ class CheckboxesFieldBlockFactory(FormFieldBlockFactory):
 
 
 class RadioFieldBlockFactory(FormFieldBlockFactory):
-    choices = ['first', 'second']
+    choices = ["first", "second"]
 
     class Meta:
         model = stream_blocks.RadioButtonsFieldBlock
@@ -207,7 +211,7 @@ class RadioFieldBlockFactory(FormFieldBlockFactory):
 
 
 class DropdownFieldBlockFactory(FormFieldBlockFactory):
-    choices = ['first', 'second']
+    choices = ["first", "second"]
 
     class Meta:
         model = stream_blocks.DropdownFieldBlock
@@ -223,9 +227,9 @@ class UploadableMediaFactory(FormFieldBlockFactory):
     @classmethod
     def make_answer(cls, params=None):
         params = params or {}
-        params.setdefault('data', b'this is some content')
-        if params.get('filename') is None:
-            params['filename'] = 'example.pdf'
+        params.setdefault("data", b"this is some content")
+        if params.get("filename") is None:
+            params["filename"] = "example.pdf"
         file_name, file = cls.default_value._make_content(params)
         return SimpleUploadedFile(file_name, file.read())
 
@@ -260,7 +264,9 @@ class StreamFieldUUIDFactory(wagtail_factories.StreamFieldFactory):
         for block_name, value in blocks:
             block = self.factories[block_name]._meta.model()
             value = block.get_prep_value(value)
-            ret_val.append({'type': block_name, 'value': value, 'id': str(uuid.uuid4())})
+            ret_val.append(
+                {"type": block_name, "value": value, "id": str(uuid.uuid4())}
+            )
         return json.dumps(ret_val, cls=DjangoJSONEncoder)
 
     def build_form(self, data):
@@ -269,10 +275,10 @@ class StreamFieldUUIDFactory(wagtail_factories.StreamFieldFactory):
         multiples = {}
         for field, value in data.items():
             # we dont care about position
-            name, attr = field.split('__')
-            if name == 'exclude':
+            name, attr = field.split("__")
+            if name == "exclude":
                 exclusions.append(attr)
-            elif name == 'multiple':
+            elif name == "multiple":
                 multiples[attr] = value
             else:
                 extras[name] = {attr: value}
@@ -280,20 +286,22 @@ class StreamFieldUUIDFactory(wagtail_factories.StreamFieldFactory):
         defined_both = set(exclusions) & set(multiples)
         if defined_both:
             raise ValueError(
-                'Cant exclude and provide multiple at the same time: {}'.format(', '.join(defined_both))
+                "Cant exclude and provide multiple at the same time: {}".format(
+                    ", ".join(defined_both)
+                )
             )
 
         form_fields = {}
         field_count = 0
         for field in self.factories:
-            if field == 'text_markup' or field in exclusions:
+            if field == "text_markup" or field in exclusions:
                 pass
             else:
                 for _ in range(multiples.get(field, 1)):
-                    form_fields[f'{field_count}__{field}__'] = ''
+                    form_fields[f"{field_count}__{field}__"] = ""
                     field_count += 1
             for attr, value in extras[field].items():
-                form_fields[f'{field_count}__{field}__{attr}'] = value
+                form_fields[f"{field_count}__{field}__{attr}"] = value
 
         return form_fields
 
@@ -301,38 +309,40 @@ class StreamFieldUUIDFactory(wagtail_factories.StreamFieldFactory):
         if not field_values:
             field_values = {}
         data = {
-            field.id: self.factories[field.block.name].make_form_answer(field_values.get(field.id, {}))
+            field.id: self.factories[field.block.name].make_form_answer(
+                field_values.get(field.id, {})
+            )
             for field in fields
-            if hasattr(self.factories[field.block.name], 'make_form_answer')
+            if hasattr(self.factories[field.block.name], "make_form_answer")
         }
         return flatten_for_form(data)
 
 
 BLOCK_FACTORY_DEFINITION = {
-    'text_markup': ParagraphBlockFactory,
-    'char': CharFieldBlockFactory,
-    'text': TextFieldBlockFactory,
-    'number': NumberFieldBlockFactory,
-    'checkbox': CheckboxFieldBlockFactory,
-    'radios': RadioFieldBlockFactory,
-    'dropdown': DropdownFieldBlockFactory,
-    'checkboxes': CheckboxesFieldBlockFactory,
-    'date': DateFieldBlockFactory,
-    'time': TimeFieldBlockFactory,
-    'datetime': DateTimeFieldBlockFactory,
-    'image': ImageFieldBlockFactory,
-    'file': FileFieldBlockFactory,
-    'multi_file': MultiFileFieldBlockFactory,
+    "text_markup": ParagraphBlockFactory,
+    "char": CharFieldBlockFactory,
+    "text": TextFieldBlockFactory,
+    "number": NumberFieldBlockFactory,
+    "checkbox": CheckboxFieldBlockFactory,
+    "radios": RadioFieldBlockFactory,
+    "dropdown": DropdownFieldBlockFactory,
+    "checkboxes": CheckboxesFieldBlockFactory,
+    "date": DateFieldBlockFactory,
+    "time": TimeFieldBlockFactory,
+    "datetime": DateTimeFieldBlockFactory,
+    "image": ImageFieldBlockFactory,
+    "file": FileFieldBlockFactory,
+    "multi_file": MultiFileFieldBlockFactory,
 }
 
 FormFieldsBlockFactory = StreamFieldUUIDFactory(BLOCK_FACTORY_DEFINITION)
 
 
-def flatten_for_form(data, field_name='', number=False):
+def flatten_for_form(data, field_name="", number=False):
     result = {}
     for i, (field, value) in enumerate(data.items()):
         if number:
-            field = f'{field_name}_{i}'
+            field = f"{field_name}_{i}"
         if isinstance(value, dict):
             result.update(**flatten_for_form(value, field_name=field, number=True))
         else:
diff --git a/hypha/apply/templates/forms/includes/field.html b/hypha/apply/templates/forms/includes/field.html
index 916a43c25ba9c9d0cf0d1f3402fc0fe16eac223a..acd6033620c2782680561c0ef95036bd0eed095f 100644
--- a/hypha/apply/templates/forms/includes/field.html
+++ b/hypha/apply/templates/forms/includes/field.html
@@ -1,72 +1,73 @@
 {% load i18n util_tags %}
+{% load bleach_tags markdown_tags %}
 {% with widget_type=field|widget_type field_type=field|field_type %}
 
-<div class="form__group {{ field.id_for_label }} {% if widget_type == 'checkbox_input' %} form__group--checkbox{% endif %}{% if widget_type == 'clearable_file_input' or widget_type == 'multi_file_input' or widget_type == 'single_file_field_widget' or widget_type == 'multi_file_field_widget' %} form__group--file{% endif %}{% if field.help_text %} form__group--wrap{% endif %}{% if field.errors %} form__error{% endif %}{% if is_application and field.field.group_number > 1 %} field-group field-group-{{ field.field.group_number }}{% endif %}{% if is_application and field.field.grouper_for %} form-fields-grouper{% endif %}"{% if is_application and field.field.grouper_for %}data-grouper-for="{{ field.field.grouper_for }}" data-toggle-on="{{ field.field.choices.0.0 }}" data-toggle-off="{{ field.field.choices.1.0 }}"{% endif %}{% if is_application and field.field.group_number > 1 %} data-hidden="{% if not show_all_group_fields and not field.field.visible %}true{% else %}false{% endif %}" data-required="{{ field.field.required_when_visible }}"{% endif %}{% if field.field.word_limit %} data-word-limit="{{ field.field.word_limit }}"{% endif %}>
-    {% if widget_type == 'clearable_file_input' or widget_type == 'multi_file_input' or widget_type == 'single_file_field_widget' or widget_type == 'multi_file_field_widget'%}
-        <span class="form__question">{{ field.label }}</span>
-        <label for="{{ field.id_for_label }}" class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
-            <span>{% trans "Upload" %}</span>
-            {% if field.field.required %}
-                <span class="form__required">*</span>
-            {% endif %}
-        </label>
-    {% elif widget_type == 'checkbox_select_multiple' or widget_type == 'radio_select' %}
-        <fieldset>
-            <legend class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
-                <span>{{ field.label }}</span>
-                {% if field.field.required %}
-                    <span class="form__required">*</span>
-                {% endif %}
-            </legend>
-    {% else %}
-        {% if not field.is_hidden and widget_type != 'checkbox_input' %}
+    <div class="form__group {{ field.id_for_label }} form__group--{{ widget_type }} {% if widget_type == 'checkbox_input' %} form__group--checkbox{% endif %}{% if widget_type == 'clearable_file_input' or widget_type == 'multi_file_input' or widget_type == 'single_file_field_widget' or widget_type == 'multi_file_field_widget' %} form__group--file{% endif %}{% if field.help_text %} form__group--wrap{% endif %}{% if field.errors %} form__error{% endif %}{% if is_application and field.field.group_number > 1 %} field-group field-group-{{ field.field.group_number }}{% endif %}{% if is_application and field.field.grouper_for %} form-fields-grouper{% endif %}"{% if is_application and field.field.grouper_for %}data-grouper-for="{{ field.field.grouper_for }}" data-toggle-on="{{ field.field.choices.0.0 }}" data-toggle-off="{{ field.field.choices.1.0 }}"{% endif %}{% if is_application and field.field.group_number > 1 %} data-hidden="{% if not show_all_group_fields and not field.field.visible %}true{% else %}false{% endif %}" data-required="{{ field.field.required_when_visible }}"{% endif %}{% if field.field.word_limit %} data-word-limit="{{ field.field.word_limit }}"{% endif %}>
+        {% if widget_type == 'clearable_file_input' or widget_type == 'multi_file_input' or widget_type == 'single_file_field_widget' or widget_type == 'multi_file_field_widget'%}
+            <span class="form__question">{{ field.label }}</span>
             <label for="{{ field.id_for_label }}" class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
-                <span>{{ field.label }}</span>
+                <span>{% trans "Upload" %}</span>
                 {% if field.field.required %}
                     <span class="form__required">*</span>
                 {% endif %}
             </label>
+        {% elif widget_type == 'checkbox_select_multiple' or widget_type == 'radio_select' %}
+            <fieldset>
+                <legend class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
+                    <span>{{ field.label }}</span>
+                    {% if field.field.required %}
+                        <span class="form__required">*</span>
+                    {% endif %}
+                </legend>
+        {% else %}
+            {% if not field.is_hidden and widget_type != 'checkbox_input' %}
+                <label for="{{ field.id_for_label }}" class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
+                    <span>{{ field.label }}</span>
+                    {% if field.field.required %}
+                        <span class="form__required">*</span>
+                    {% endif %}
+                </label>
+            {% endif %}
         {% endif %}
-    {% endif %}
 
-    {% if field.help_text %}
-        <p class="form__help">{{ field.help_text|safe }}</p>
-    {% endif %}
+        {% if field.help_text %}
+            <div class="form__help prose prose-sm">{{ field.help_text|markdown|bleach }}</div>
+        {% endif %}
 
-    {% if field.field.help_link %}
-        <p class="form__help-link"><a href="{{ field.field.help_link }}" target="_blank" rel="noopener noreferrer">{% trans "See help guide for more information." %}<svg class="form__open-icon"><use xlink:href="#open-in-new-tab"></use></svg></a></p>
-    {% endif %}
+        {% if field.field.help_link %}
+            <p class="form__help-link"><a href="{{ field.field.help_link }}" target="_blank" rel="noopener noreferrer">{% trans "See help guide for more information." %}<svg class="form__open-icon"><use xlink:href="#open-in-new-tab"></use></svg></a></p>
+        {% endif %}
 
-    {% if not field.is_hidden %}
-        <div class="form__item">
-            {% if widget_type == 'date_input' or widget_type == 'date_time_input' %}
-                <div class="{{ widget_type }}">
-            {% endif %}
+        {% if not field.is_hidden %}
+            <div class="form__item">
+                {% if widget_type == 'date_input' or widget_type == 'date_time_input' %}
+                    <div class="{{ widget_type }}">
+                {% endif %}
 
-            {{ field }}
+                {{ field }}
 
                 {% if field.errors %}<h6 class="form__error-text">{{ field.errors.as_text|linebreaksbr }}</h6>{% endif %}
                 {% if widget_type == 'clearable_file_input' or widget_type == 'multi_file_input' %}
-                <output class="form__file-list"></output>
-            {% endif %}
-            {% if widget_type == 'checkbox_input' %}
-                <label for="{{ field.id_for_label }}" class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
-                    <span>{{ field.label }}</span>
-                    {% if field.field.required %}
-                        <span class="form__required">*</span>
-                    {% endif %}
-                </label>
-            {% endif %}
-            {% if widget_type == 'date_input' or widget_type == 'date_time_input' %}
-                </div>
-            {% endif %}
-        </div>
-    {% else %}
-        {{ field }}
-    {% endif %}
+                    <output class="form__file-list"></output>
+                {% endif %}
+                {% if widget_type == 'checkbox_input' %}
+                    <label for="{{ field.id_for_label }}" class="form__question form__question--{{ field_type }} {{ widget_type }}" {% if field.field.required %}required{% endif %}>
+                        <span>{{ field.label }}</span>
+                        {% if field.field.required %}
+                            <span class="form__required">*</span>
+                        {% endif %}
+                    </label>
+                {% endif %}
+                {% if widget_type == 'date_input' or widget_type == 'date_time_input' %}
+                    </div>
+                {% endif %}
+            </div>
+        {% else %}
+            {{ field }}
+        {% endif %}
 
-    {% if widget_type == 'checkbox_select_multiple' or widget_type == 'radio_select' %}
-        </fieldset>
-    {% endif %}
-</div>
+        {% if widget_type == 'checkbox_select_multiple' or widget_type == 'radio_select' %}
+            </fieldset>
+        {% endif %}
+    </div>
 {% endwith %}
diff --git a/hypha/apply/templates/forms/includes/form_errors.html b/hypha/apply/templates/forms/includes/form_errors.html
index 136ed205d77804d220577e5f414b19daaef6c832..51721670f93d848edd5dd13ac275b2416522ceeb 100644
--- a/hypha/apply/templates/forms/includes/form_errors.html
+++ b/hypha/apply/templates/forms/includes/form_errors.html
@@ -1,14 +1,14 @@
 {% load i18n %}
 {% if form.errors or form.non_field_errors %}
-<div class="wrapper wrapper--medium wrapper--error">
-    <svg class="icon icon--error"><use xlink:href="#error"></use></svg>
-    <h5 class="heading heading--no-margin heading--regular">{% trans "There were some errors with your form. Please amend the fields highlighted below." %}</h5>
-    {% if form.non_field_errors %}
-        <ul>
-            {% for error in form.non_field_errors %}
-                <li class="error">{{ error }}</li>
-            {% endfor %}
-        </ul>
-    {% endif %}
-</div>
+    <div class="wrapper wrapper--medium wrapper--error">
+        <svg class="icon icon--error"><use xlink:href="#error"></use></svg>
+        <h5 class="heading heading--no-margin heading--regular">{% trans "There were some errors with your form. Please amend the fields highlighted below." %}</h5>
+        {% if form.non_field_errors %}
+            <ul>
+                {% for error in form.non_field_errors %}
+                    <li class="error">{{ error }}</li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+    </div>
 {% endif %}
diff --git a/hypha/apply/templates/forms/includes/multi_input_field.html b/hypha/apply/templates/forms/includes/multi_input_field.html
index 926ddef35805155c454d880c39652d958089c38a..75e4657cbac223798c8b26291ef253c9c3c0f906 100644
--- a/hypha/apply/templates/forms/includes/multi_input_field.html
+++ b/hypha/apply/templates/forms/includes/multi_input_field.html
@@ -1,9 +1,22 @@
-<div class="form__item{% if field.help_text %} form__group--wrap{% endif %}{% if field.errors %} form__error{% endif %}{% if not field.initial %} multi-input-field-hidden{% endif %}{% if is_application and field.field.group_number > 1 %} field-group field-group-{{ field.field.group_number }}{% endif %}"{% if is_application and field.field.group_number > 1 %} data-hidden="{% if not show_all_group_fields %}true{% else %}false{% endif %}"{% endif %}" data-multi-field-for="{{ field.field.multi_input_id }}">
+{% load heroicons %}
+<div
+    class="form__item{% if field.help_text %} form__group--wrap{% endif %}{% if field.errors %} form__error{% endif %}{% if not field.initial %} multi-input-field-hidden{% endif %}{% if is_application and field.field.group_number > 1 %} field-group field-group-{{ field.field.group_number }}{% endif %}"
+    {% if is_application and field.field.group_number > 1 %} data-hidden="{% if not show_all_group_fields %}true{% else %}false{% endif %}"{% endif %}
+    data-multi-field-for="{{ field.field.multi_input_id }}"
+>
     {{ field }}
 
     {% if field.errors %}<h6 class="form__error-text">{{ field.errors.as_text|linebreaksbr }}</h6>{% endif %}
 </div>
 
 {% if field.field.multi_input_add_button %}
-    <button class="link link--button link--button--narrow multi-input-add-btn{% if is_application and field.field.group_number > 1 %} field-group field-group-{{ field.field.group_number }}{% endif %}" type="button" data-multi-field-id="{{ field.field.multi_input_id }}" data-multi-visibility-index="{{ field.field.visibility_index }}" data-multi-max-index="{{ field.field.max_index }}">{{ field.field.add_button_text }}</button>
+    <button
+        class="link link--button link--button--narrow multi-input-add-btn mt-2{% if is_application and field.field.group_number > 1 %} field-group field-group-{{ field.field.group_number }}{% endif %}"
+        type="button" data-multi-field-id="{{ field.field.multi_input_id }}"
+        data-multi-visibility-index="{{ field.field.visibility_index }}"
+        data-multi-max-index="{{ field.field.max_index }}"
+    >
+        {% heroicon_mini "plus" size=19 class="inline align-text-bottom" aria_hidden="true" %}
+        {{ field.field.add_button_text }}
+    </button>
 {% endif %}
diff --git a/hypha/apply/urls.py b/hypha/apply/urls.py
index 9164fab8e421aced4a9f55304203a3a7434305a1..82ec8597497719a5014a39ce792f2b2209980271 100644
--- a/hypha/apply/urls.py
+++ b/hypha/apply/urls.py
@@ -11,31 +11,31 @@ from .users import urls as users_urls
 from .utils import views
 
 urlpatterns = [
-    path('apply/', include('hypha.apply.funds.urls', 'apply')),
-    path('activity/', include('hypha.apply.activity.urls', 'activity')),
-    path('', include(users_urls)),
-    path('api/', include(api_urls)),
-    path('dashboard/', include(dashboard_urls)),
-    path('hijack/', include('hijack.urls', 'hijack')),
+    path("apply/", include("hypha.apply.funds.urls", "apply")),
+    path("activity/", include("hypha.apply.activity.urls", "activity")),
+    path("", include(users_urls)),
+    path("api/", include(api_urls)),
+    path("dashboard/", include(dashboard_urls)),
+    path("hijack/", include("hijack.urls", "hijack")),
     # this must be above two factor include, this skip displaying the success
     # page and advances user to download backup code page.
     path(
-        'account/two_factor/setup/complete/',
+        "account/two_factor/setup/complete/",
         RedirectView.as_view(
-            url=reverse_lazy('users:backup_tokens_password'), permanent=False
+            url=reverse_lazy("users:backup_tokens_password"), permanent=False
         ),
-        name='two_factor:setup_complete',
+        name="two_factor:setup_complete",
     ),
-    path('', include(tf_urls, 'two_factor')),
+    path("", include(tf_urls, "two_factor")),
 ]
 
 if settings.DEBUG:
     urlpatterns += [
         # Add views for testing 404 and 500 templates
-        path('test404/', views.page_not_found),
+        path("test404/", views.page_not_found),
     ]
 
 urlpatterns += base_urlpatterns
 
 
-handler404 = 'hypha.apply.utils.views.page_not_found'
+handler404 = "hypha.apply.utils.views.page_not_found"
diff --git a/hypha/apply/users/admin_views.py b/hypha/apply/users/admin_views.py
index 1de29022ba4139d83b085604ecda6eae3cfee785..2f49edb44ad0eb0259c7dcb21aab49098c8dce4f 100644
--- a/hypha/apply/users/admin_views.py
+++ b/hypha/apply/users/admin_views.py
@@ -24,68 +24,78 @@ User = get_user_model()
 # 'auth.delete_user') for user management actions, but this may vary according to
 # the AUTH_USER_MODEL setting
 add_user_perm = "{0}.add_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower())
-change_user_perm = "{0}.change_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower())
-delete_user_perm = "{0}.delete_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower())
+change_user_perm = "{0}.change_{1}".format(
+    AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower()
+)
+delete_user_perm = "{0}.delete_{1}".format(
+    AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower()
+)
+
 
 def create_csv(users_list):
-    base_path=os.path.join(settings.PROJECT_DIR,'../media')
-    filename = 'users.csv'
-    with open(os.path.join(base_path+'/'+filename),'w+') as file:
-        fieldnames=['full_name','email','status','role']
+    base_path = os.path.join(settings.PROJECT_DIR, "../media")
+    filename = "users.csv"
+    with open(os.path.join(base_path + "/" + filename), "w+") as file:
+        fieldnames = ["full_name", "email", "status", "role"]
         writer = csv.DictWriter(file, fieldnames=fieldnames)
         writer.writeheader()
         for user in users_list:
             writer.writerow(user)
-    return base_path + '/' + filename
+    return base_path + "/" + filename
+
 
 def export(users):
     users_list = []
     for user in users:
         if user.is_superuser:
-            user.roles.insert(0,'Admin')
-        roles=','.join(user.roles)
-        user_data={
-            'full_name': user.full_name,
-            'email':user.email,
-            'status': 'Active' if user.is_active else 'Inactive',
-            'role': roles
+            user.roles.insert(0, "Admin")
+        roles = ",".join(user.roles)
+        user_data = {
+            "full_name": user.full_name,
+            "email": user.email,
+            "status": "Active" if user.is_active else "Inactive",
+            "role": roles,
         }
         users_list.append(user_data)
-    filepath=create_csv(users_list)
-    with open(filepath, 'rb') as file:
-            response = HttpResponse(file.read(), content_type="text/csv")
-            response['Content-Disposition'] = 'inline; filename=' + os.path.basename(filepath)
-            return response
+    filepath = create_csv(users_list)
+    with open(filepath, "rb") as file:
+        response = HttpResponse(file.read(), content_type="text/csv")
+        response["Content-Disposition"] = "inline; filename=" + os.path.basename(
+            filepath
+        )
+        return response
+
 
 class UserFilterSet(WagtailFilterSet):
     STATUS_CHOICES = (
-        ('inactive', 'INACTIVE'),
-        ('active', 'ACTIVE'),
+        ("inactive", "INACTIVE"),
+        ("active", "ACTIVE"),
+    )
+    roles = django_filters.ModelChoiceFilter(
+        queryset=Group.objects.all(), label="Roles", method="filter_by_roles"
+    )
+    status = django_filters.ChoiceFilter(
+        choices=STATUS_CHOICES, label="Status", method="filter_by_status"
     )
-    roles = django_filters.ModelChoiceFilter(queryset=Group.objects.all(), label='Roles', method='filter_by_roles')
-    status = django_filters.ChoiceFilter(choices=STATUS_CHOICES, label='Status', method='filter_by_status')
 
     class Meta:
         model = User
-        fields = [
-            'roles',
-            'status'
-        ]
+        fields = ["roles", "status"]
 
     def filter_by_roles(self, queryset, name, value):
         queryset = queryset.filter(groups__name=value)
         return queryset
 
     def filter_by_status(self, queryset, name, value):
-        if value == 'active':
+        if value == "active":
             return queryset.filter(is_active=True)
-        elif value == 'inactive':
+        elif value == "inactive":
             return queryset.filter(is_active=False)
         return queryset
 
 
 @any_permission_required(add_user_perm, change_user_perm, delete_user_perm)
-@vary_on_headers('X-Requested-With')
+@vary_on_headers("X-Requested-With")
 def index(request, *args):
     """
     Override wagtail's users index view to filter by full_name
@@ -102,28 +112,28 @@ def index(request, *args):
 
     model_fields = [f.name for f in User._meta.get_fields()]
 
-    if 'q' in request.GET:
+    if "q" in request.GET:
         form = SearchForm(request.GET, placeholder=_("Search users"))
         if form.is_valid():
-            q = form.cleaned_data['q']
+            q = form.cleaned_data["q"]
             is_searching = True
             conditions = Q()
 
             for term in q.split():
-                if 'username' in model_fields:
+                if "username" in model_fields:
                     conditions |= Q(username__icontains=term)
 
-                if 'first_name' in model_fields:
+                if "first_name" in model_fields:
                     conditions |= Q(first_name__icontains=term)
 
-                if 'last_name' in model_fields:
+                if "last_name" in model_fields:
                     conditions |= Q(last_name__icontains=term)
 
-                if 'email' in model_fields:
+                if "email" in model_fields:
                     conditions |= Q(email__icontains=term)
 
                 # filter by full_name
-                if 'full_name' in model_fields:
+                if "full_name" in model_fields:
                     conditions |= Q(full_name__icontains=term)
 
             users = User.objects.filter(group_filter & conditions)
@@ -131,55 +141,63 @@ def index(request, *args):
         form = SearchForm(placeholder=_("Search users"))
 
     if not is_searching:
-        users = User.objects.filter(group_filter).order_by('-is_active', 'full_name')
+        users = User.objects.filter(group_filter).order_by("-is_active", "full_name")
 
     filters = None
     if not group:
         filters = UserFilterSet(request.GET, queryset=users, request=request)
         users = filters.qs
 
-    if 'export' in request.GET:
+    if "export" in request.GET:
         file = export(users)
         return file
 
-    if 'ordering' in request.GET:
-        ordering = request.GET['ordering']
+    if "ordering" in request.GET:
+        ordering = request.GET["ordering"]
 
-        if ordering == 'username':
+        if ordering == "username":
             users = users.order_by(User.USERNAME_FIELD)
-        elif ordering == 'status':
-            users = users.order_by('is_active')
+        elif ordering == "status":
+            users = users.order_by("is_active")
     else:
-        ordering = 'name'
+        ordering = "name"
 
     user_count = users.count()
-    paginator = Paginator(users.select_related('wagtail_userprofile'), per_page=20)
-    users = paginator.get_page(request.GET.get('p'))
-
-    if request.headers.get('x-requested-with') == 'XMLHttpRequest':
-        return TemplateResponse(request, "wagtailusers/users/results.html", {
-            'users': users,
-            'user_count': user_count,
-            'is_searching': is_searching,
-            'query_string': q,
-            'filters': filters,
-            'ordering': ordering,
-            'app_label': User._meta.app_label,
-            'model_name': User._meta.model_name,
-        })
+    paginator = Paginator(users.select_related("wagtail_userprofile"), per_page=20)
+    users = paginator.get_page(request.GET.get("p"))
+
+    if request.headers.get("x-requested-with") == "XMLHttpRequest":
+        return TemplateResponse(
+            request,
+            "wagtailusers/users/results.html",
+            {
+                "users": users,
+                "user_count": user_count,
+                "is_searching": is_searching,
+                "query_string": q,
+                "filters": filters,
+                "ordering": ordering,
+                "app_label": User._meta.app_label,
+                "model_name": User._meta.model_name,
+            },
+        )
     else:
-        return TemplateResponse(request, "wagtailusers/users/index.html", {
-            'group': group,
-            'search_form': form,
-            'users': users,
-            'user_count': user_count,
-            'is_searching': is_searching,
-            'ordering': ordering,
-            'query_string': q,
-            'filters': filters,
-            'app_label': User._meta.app_label,
-            'model_name': User._meta.model_name,
-        })
+        return TemplateResponse(
+            request,
+            "wagtailusers/users/index.html",
+            {
+                "group": group,
+                "search_form": form,
+                "users": users,
+                "user_count": user_count,
+                "is_searching": is_searching,
+                "ordering": ordering,
+                "query_string": q,
+                "filters": filters,
+                "app_label": User._meta.app_label,
+                "model_name": User._meta.model_name,
+            },
+        )
 
 
 class CustomGroupViewSet(GroupViewSet):
@@ -187,6 +205,7 @@ class CustomGroupViewSet(GroupViewSet):
     Overriding the wagtail.users.views.groups.GroupViewSet just to use custom users view(index)
     when getting all users for a group.
     """
+
     @property
     def users_view(self):
         return index
diff --git a/hypha/apply/users/decorators.py b/hypha/apply/users/decorators.py
index 0e72a29711a423786bf2cf760968820e7a3a9747..5f867287af3b1954e1a50167e454e99404ae4012 100644
--- a/hypha/apply/users/decorators.py
+++ b/hypha/apply/users/decorators.py
@@ -6,10 +6,12 @@ from .utils import can_use_oauth_check
 
 def require_oauth_whitelist(view_func):
     """Simple decorator that limits the use of OAuth to the configure whitelisted domains"""
+
     def decorated_view(request, *args, **kwargs):
         if can_use_oauth_check(request.user):
             return view_func(request, *args, **kwargs)
         raise PermissionDenied
+
     return decorated_view
 
 
@@ -61,13 +63,22 @@ staff_admin_required = [login_required, user_passes_test(is_apply_staff_admin)]
 
 finance_required = [login_required, user_passes_test(is_finance)]
 
-staff_or_finance_required = [login_required, user_passes_test(is_apply_staff_or_finance)]
+staff_or_finance_required = [
+    login_required,
+    user_passes_test(is_apply_staff_or_finance),
+]
 
 approver_required = [login_required, user_passes_test(is_approver)]
 
-staff_or_finance_or_contracting_required = [login_required, user_passes_test(is_apply_staff_or_finance_or_contracting)]
+staff_or_finance_or_contracting_required = [
+    login_required,
+    user_passes_test(is_apply_staff_or_finance_or_contracting),
+]
 
-contracting_approver_required = [login_required, user_passes_test(is_contracting_approver)]
+contracting_approver_required = [
+    login_required,
+    user_passes_test(is_contracting_approver),
+]
 
 
 def superuser_decorator(fn):
diff --git a/hypha/apply/users/forms.py b/hypha/apply/users/forms.py
index c40c6a08fc7317aa471bec596fa215af77e14665..3be84f4dc09514d20c3f57281ef2cf8ff09c0663 100644
--- a/hypha/apply/users/forms.py
+++ b/hypha/apply/users/forms.py
@@ -3,10 +3,9 @@ from django.contrib.auth import get_user_model
 from django.contrib.auth.forms import AuthenticationForm
 from django.utils.translation import gettext_lazy as _
 from django_select2.forms import Select2Widget
-from wagtail.models import Site
 from wagtail.users.forms import UserCreationForm, UserEditForm
 
-from .models import UserSettings
+from .models import AuthSettings
 
 User = get_user_model()
 
@@ -14,24 +13,27 @@ User = get_user_model()
 class CustomAuthenticationForm(AuthenticationForm):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.site = Site.find_for_request(self.request)
-        self.user_settings = UserSettings.for_site(site=self.site)
+        self.user_settings = AuthSettings.load(request_or_site=self.request)
         self.extra_text = self.user_settings.extra_text
         if self.user_settings.consent_show:
-            self.fields['consent'] = forms.BooleanField(
+            self.fields["consent"] = forms.BooleanField(
                 label=self.user_settings.consent_text,
                 help_text=self.user_settings.consent_help,
                 required=True,
             )
 
 
-class CustomUserAdminFormBase():
+class CustomUserAdminFormBase:
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
         # HACK: Wagtail admin doesn't work with custom User models that do not have first/last name.
-        self.fields['first_name'].widget = forms.HiddenInput(attrs={'value': 'Not used - see full_name'})
-        self.fields['last_name'].widget = forms.HiddenInput(attrs={'value': 'Not used - see full_name'})
+        self.fields["first_name"].widget = forms.HiddenInput(
+            attrs={"value": "Not used - see full_name"}
+        )
+        self.fields["last_name"].widget = forms.HiddenInput(
+            attrs={"value": "Not used - see full_name"}
+        )
 
 
 class CustomUserEditForm(CustomUserAdminFormBase, UserEditForm):
@@ -40,36 +42,51 @@ class CustomUserEditForm(CustomUserAdminFormBase, UserEditForm):
 
 class CustomUserCreationForm(CustomUserAdminFormBase, UserCreationForm):
     error_messages = {
-        'duplicate_username': _("A user with that email already exists."),
-        'password_mismatch': _("The two password fields didn't match."),
+        "duplicate_username": _("A user with that email already exists."),
+        "password_mismatch": _("The two password fields didn't match."),
     }
 
+    def __init__(self, request=None, *args, **kwargs):
+        self.request = request
+        super().__init__(*args, **kwargs)
+
+        self.user_settings = AuthSettings.load(request_or_site=self.request)
+        if self.user_settings.consent_show:
+            self.fields["consent"] = forms.BooleanField(
+                label=self.user_settings.consent_text,
+                help_text=self.user_settings.consent_help,
+                required=True,
+            )
+
+
 class ProfileForm(forms.ModelForm):
     class Meta:
         model = User
-        fields = ['full_name', 'email', 'slack']
+        fields = ["full_name", "email", "slack"]
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         if not self.instance.is_apply_staff_or_finance:
-            del self.fields['slack']
+            del self.fields["slack"]
 
         if not self.instance.has_usable_password():
             # User is registered with oauth - no password change allowed
-            email_field = self.fields['email']
+            email_field = self.fields["email"]
             email_field.disabled = True
             email_field.required = False
-            email_field.help_text = _('You are registered using OAuth, please contact an admin if you need to change your email address.')
+            email_field.help_text = _(
+                "You are registered using OAuth, please contact an admin if you need to change your email address."
+            )
 
     def clean_slack(self):
-        slack = self.cleaned_data['slack']
+        slack = self.cleaned_data["slack"]
         if slack:
             slack = slack.strip()
-            if ' ' in slack:
-                raise forms.ValidationError('Slack names must not include spaces')
+            if " " in slack:
+                raise forms.ValidationError("Slack names must not include spaces")
 
-            if not slack.startswith('@'):
-                slack = '@' + slack
+            if not slack.startswith("@"):
+                slack = "@" + slack
 
         return slack
 
@@ -77,9 +94,9 @@ class ProfileForm(forms.ModelForm):
 class BecomeUserForm(forms.Form):
     user_pk = forms.ModelChoiceField(
         widget=Select2Widget,
-        help_text=_('Only includes active, non-superusers'),
+        help_text=_("Only includes active, non-superusers"),
         queryset=User.objects.filter(is_active=True, is_superuser=False),
-        label='',
+        label="",
         required=False,
     )
 
@@ -89,7 +106,7 @@ class EmailChangePasswordForm(forms.Form):
         label=_("Password"),
         help_text=_("Email change requires you to put password."),
         strip=False,
-        widget=forms.PasswordInput(attrs={'autofocus': True}),
+        widget=forms.PasswordInput(attrs={"autofocus": True}),
     )
 
     def __init__(self, user, *args, **kwargs):
@@ -101,7 +118,7 @@ class EmailChangePasswordForm(forms.Form):
         if not self.user.check_password(password):
             raise forms.ValidationError(
                 _("Incorrect password. Please try again."),
-                code='password_incorrect',
+                code="password_incorrect",
             )
         return password
 
@@ -118,7 +135,7 @@ class TWOFAPasswordForm(forms.Form):
     password = forms.CharField(
         label=_("Please type your password to confirm"),
         strip=False,
-        widget=forms.PasswordInput(attrs={'autofocus': True}),
+        widget=forms.PasswordInput(attrs={"autofocus": True}),
     )
 
     def __init__(self, user, *args, **kwargs):
@@ -130,6 +147,6 @@ class TWOFAPasswordForm(forms.Form):
         if not self.user.check_password(password):
             raise forms.ValidationError(
                 _("Incorrect password. Please try again."),
-                code='password_incorrect',
+                code="password_incorrect",
             )
         return password
diff --git a/hypha/apply/users/groups.py b/hypha/apply/users/groups.py
index 8fe110061978e340847be97b1ab7aeabf7bb9992..41bcc0abf76cd42ea019d5d19ffa14961232412b 100644
--- a/hypha/apply/users/groups.py
+++ b/hypha/apply/users/groups.py
@@ -1,48 +1,48 @@
-APPLICANT_GROUP_NAME = 'Applicant'
-STAFF_GROUP_NAME = 'Staff'
-REVIEWER_GROUP_NAME = 'Reviewer'
-TEAMADMIN_GROUP_NAME = 'Staff Admin'
-PARTNER_GROUP_NAME = 'Partner'
-COMMUNITY_REVIEWER_GROUP_NAME = 'Community reviewer'
-APPROVER_GROUP_NAME = 'Approver'
-FINANCE_GROUP_NAME = 'Finance'
-CONTRACTING_GROUP_NAME = 'Contracting'
+APPLICANT_GROUP_NAME = "Applicant"
+STAFF_GROUP_NAME = "Staff"
+REVIEWER_GROUP_NAME = "Reviewer"
+TEAMADMIN_GROUP_NAME = "Staff Admin"
+PARTNER_GROUP_NAME = "Partner"
+COMMUNITY_REVIEWER_GROUP_NAME = "Community reviewer"
+APPROVER_GROUP_NAME = "Approver"
+FINANCE_GROUP_NAME = "Finance"
+CONTRACTING_GROUP_NAME = "Contracting"
 
 GROUPS = [
     {
-        'name': APPLICANT_GROUP_NAME,
-        'permissions': [],
+        "name": APPLICANT_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': STAFF_GROUP_NAME,
-        'permissions': [],
+        "name": STAFF_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': REVIEWER_GROUP_NAME,
-        'permissions': [],
+        "name": REVIEWER_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': TEAMADMIN_GROUP_NAME,
-        'permissions': [],
+        "name": TEAMADMIN_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': PARTNER_GROUP_NAME,
-        'permissions': [],
+        "name": PARTNER_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': COMMUNITY_REVIEWER_GROUP_NAME,
-        'permissions': [],
+        "name": COMMUNITY_REVIEWER_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': APPROVER_GROUP_NAME,
-        'permissions': [],
+        "name": APPROVER_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': FINANCE_GROUP_NAME,
-        'permissions': [],
+        "name": FINANCE_GROUP_NAME,
+        "permissions": [],
     },
     {
-        'name': CONTRACTING_GROUP_NAME,
-        'permissions': [],
-    }
+        "name": CONTRACTING_GROUP_NAME,
+        "permissions": [],
+    },
 ]
diff --git a/hypha/apply/users/management/commands/accounts_cleanup.py b/hypha/apply/users/management/commands/accounts_cleanup.py
index ebc9f7e4680e79c519758fd20633504e5a4eefed..e18b444e1a49a527f75a00791b8f825155bfbf6f 100644
--- a/hypha/apply/users/management/commands/accounts_cleanup.py
+++ b/hypha/apply/users/management/commands/accounts_cleanup.py
@@ -13,7 +13,12 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         onehundredfifty_days_ago = timezone.now() - timedelta(days=150)
         User = get_user_model()
-        users_inactivate = User.objects.filter(date_joined__date__lte=onehundredfifty_days_ago, is_active=True, is_staff=False, last_login__isnull=True)
+        users_inactivate = User.objects.filter(
+            date_joined__date__lte=onehundredfifty_days_ago,
+            is_active=True,
+            is_staff=False,
+            last_login__isnull=True,
+        )
 
         for user in users_inactivate:
             user.is_active = False
diff --git a/hypha/apply/users/management/commands/migrate_users.py b/hypha/apply/users/management/commands/migrate_users.py
index 21549554b1b0d192d8845618c260e0c3a8f3852b..2e65c20b0a50e4430327a402863db009b1cada98 100644
--- a/hypha/apply/users/management/commands/migrate_users.py
+++ b/hypha/apply/users/management/commands/migrate_users.py
@@ -15,12 +15,16 @@ class Command(BaseCommand):
     groups = Group.objects.all()
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help="Migration source JSON file")
-        parser.add_argument('--anonymize', action='store_true', help="Anonymizes non-OTF emails")
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
+        parser.add_argument(
+            "--anonymize", action="store_true", help="Anonymizes non-OTF emails"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             User = get_user_model()
             users = json.load(json_data)
 
@@ -30,12 +34,12 @@ class Command(BaseCommand):
                 full_name = self.get_full_name(user)
                 slack_name = self.get_slack_name(user)
                 user_object, created = User.objects.get_or_create(
-                    email=self.get_email(user, options['anonymize']),
+                    email=self.get_email(user, options["anonymize"]),
                     defaults={
-                        'full_name': full_name,
-                        'slack': slack_name,
-                        'drupal_id': uid,
-                    }
+                        "full_name": full_name,
+                        "slack": slack_name,
+                        "drupal_id": uid,
+                    },
                 )
 
                 operation = "Imported" if created else "Processed"
@@ -54,33 +58,35 @@ class Command(BaseCommand):
                 self.stdout.write(f"{operation} user {uid} ({full_name})")
 
     def get_full_name(self, user):
-        full_name = user.get('field_otf_real_name', None)
+        full_name = user.get("field_otf_real_name", None)
         try:
-            full_name = full_name['safe_value']
+            full_name = full_name["safe_value"]
         except (KeyError, TypeError):
-            full_name = user['name']
+            full_name = user["name"]
 
         return full_name
 
     def get_slack_name(self, user):
-        slack_name = user.get('field_otf_slack_name', None)
+        slack_name = user.get("field_otf_slack_name", None)
         try:
             slack_name = f"@{slack_name['safe_value']}"
         except (KeyError, TypeError):
-            slack_name = ''
+            slack_name = ""
 
         return slack_name
 
     def get_user_groups(self, user):
         groups = []
         role_map = {
-            'council': 'Reviewer',
+            "council": "Reviewer",
         }
 
-        if self.is_staff(user['mail']):
+        if self.is_staff(user["mail"]):
             groups.append(self.groups.filter(name=STAFF_GROUP_NAME).first())
 
-        roles = [role for role in user.get('roles').values() if role != "authenticated user"]
+        roles = [
+            role for role in user.get("roles").values() if role != "authenticated user"
+        ]
 
         for role in roles:
             group_name = role_map.get(role)
@@ -90,12 +96,12 @@ class Command(BaseCommand):
         return groups
 
     def get_email(self, user, anonymize=False):
-        email = user['mail']
+        email = user["mail"]
         if not anonymize or self.is_staff(email):
             return email
 
         return f"aeon+{user['uid']}@torchbox.com"
 
     def is_staff(self, email):
-        _, email_domain = email.split('@')
+        _, email_domain = email.split("@")
         return email_domain in settings.STAFF_EMAIL_DOMAINS
diff --git a/hypha/apply/users/middleware.py b/hypha/apply/users/middleware.py
index 53ae4fc4f3bc1363d4a7d528459805271e69e43d..fd11afec3749570a842a75c533280b4cd9b72beb 100644
--- a/hypha/apply/users/middleware.py
+++ b/hypha/apply/users/middleware.py
@@ -6,9 +6,9 @@ from social_django.middleware import (
 )
 
 ALLOWED_SUBPATH_FOR_UNVERIFIED_USERS = [
-    'login/',
-    'logout/',
-    'account/',
+    "login/",
+    "logout/",
+    "account/",
 ]
 
 
@@ -16,9 +16,10 @@ class SocialAuthExceptionMiddleware(_SocialAuthExceptionMiddleware):
     """
     Wrapper around SocialAuthExceptionMiddleware to customise messages
     """
+
     def get_message(self, request, exception):
         if isinstance(exception, AuthForbidden):
-            return 'Your credentials are not recognised.'
+            return "Your credentials are not recognised."
 
         super().get_message(request, exception)
 
@@ -32,11 +33,11 @@ class TwoFactorAuthenticationMiddleware:
     This will redirect all request from unverified users to enable 2FA first.
     Except the request made on the url paths listed in ALLOWED_SUBPATH_FOR_UNVERIFIED_USERS.
     """
+
     def __init__(self, get_response):
         self.get_response = get_response
 
     def is_path_allowed(self, path):
-
         for sub_path in ALLOWED_SUBPATH_FOR_UNVERIFIED_USERS:
             if sub_path in path:
                 return True
@@ -46,9 +47,13 @@ class TwoFactorAuthenticationMiddleware:
         # code to execute before the view
         user = request.user
         if settings.ENFORCE_TWO_FACTOR:
-            if user.is_authenticated and not user.is_verified() and not user.social_auth.exists():
+            if (
+                user.is_authenticated
+                and not user.is_verified()
+                and not user.social_auth.exists()
+            ):
                 if not self.is_path_allowed(request.path):
-                    return redirect('/account/two_factor/required/')
+                    return redirect("/account/two_factor/required/")
 
         response = self.get_response(request)
 
diff --git a/hypha/apply/users/migrations/0001_initial.py b/hypha/apply/users/migrations/0001_initial.py
index eba71cbb70138a1422c6e17ec0a8e31eec29c9ba..dda94d9a16746e917c5eac716ad3a4616e23bf3f 100644
--- a/hypha/apply/users/migrations/0001_initial.py
+++ b/hypha/apply/users/migrations/0001_initial.py
@@ -9,38 +9,125 @@ import django.utils.timezone
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('auth', '0008_alter_user_username_max_length'),
+        ("auth", "0008_alter_user_username_max_length"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='User',
+            name="User",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('password', models.CharField(max_length=128, verbose_name='password')),
-                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
-                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
-                ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
-                ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),
-                ('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')),
-                ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
-                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
-                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
-                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
-                ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
-                ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("password", models.CharField(max_length=128, verbose_name="password")),
+                (
+                    "last_login",
+                    models.DateTimeField(
+                        blank=True, null=True, verbose_name="last login"
+                    ),
+                ),
+                (
+                    "is_superuser",
+                    models.BooleanField(
+                        default=False,
+                        help_text="Designates that this user has all permissions without explicitly assigning them.",
+                        verbose_name="superuser status",
+                    ),
+                ),
+                (
+                    "username",
+                    models.CharField(
+                        error_messages={
+                            "unique": "A user with that username already exists."
+                        },
+                        help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
+                        max_length=150,
+                        unique=True,
+                        validators=[
+                            django.contrib.auth.validators.UnicodeUsernameValidator()
+                        ],
+                        verbose_name="username",
+                    ),
+                ),
+                (
+                    "first_name",
+                    models.CharField(
+                        blank=True, max_length=30, verbose_name="first name"
+                    ),
+                ),
+                (
+                    "last_name",
+                    models.CharField(
+                        blank=True, max_length=30, verbose_name="last name"
+                    ),
+                ),
+                (
+                    "email",
+                    models.EmailField(
+                        blank=True, max_length=254, verbose_name="email address"
+                    ),
+                ),
+                (
+                    "is_staff",
+                    models.BooleanField(
+                        default=False,
+                        help_text="Designates whether the user can log into this admin site.",
+                        verbose_name="staff status",
+                    ),
+                ),
+                (
+                    "is_active",
+                    models.BooleanField(
+                        default=True,
+                        help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
+                        verbose_name="active",
+                    ),
+                ),
+                (
+                    "date_joined",
+                    models.DateTimeField(
+                        default=django.utils.timezone.now, verbose_name="date joined"
+                    ),
+                ),
+                (
+                    "groups",
+                    models.ManyToManyField(
+                        blank=True,
+                        help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
+                        related_name="user_set",
+                        related_query_name="user",
+                        to="auth.Group",
+                        verbose_name="groups",
+                    ),
+                ),
+                (
+                    "user_permissions",
+                    models.ManyToManyField(
+                        blank=True,
+                        help_text="Specific permissions for this user.",
+                        related_name="user_set",
+                        related_query_name="user",
+                        to="auth.Permission",
+                        verbose_name="user permissions",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'user',
-                'verbose_name_plural': 'users',
-                'abstract': False,
+                "verbose_name": "user",
+                "verbose_name_plural": "users",
+                "abstract": False,
             },
             managers=[
-                ('objects', django.contrib.auth.models.UserManager()),
+                ("objects", django.contrib.auth.models.UserManager()),
             ],
         ),
     ]
diff --git a/hypha/apply/users/migrations/0002_initial_data.py b/hypha/apply/users/migrations/0002_initial_data.py
index 9e3b1b18f3d9a2cd43e905a41c95c128c37ece7d..1621f68c927fdd77f43deb9df2fef7cf1e78c3cf 100644
--- a/hypha/apply/users/migrations/0002_initial_data.py
+++ b/hypha/apply/users/migrations/0002_initial_data.py
@@ -14,35 +14,32 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for permission in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for permission in group_data["permissions"]:
             try:
                 group.permissions.add(Permission.objects.get(codename=permission))
             except ObjectDoesNotExist:
-                print ("Could not find the '%s' permission" % permission)
+                print("Could not find the '%s' permission" % permission)
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
 
-    groups = [group_data['name'] for group_data in GROUPS]
+    groups = [group_data["name"] for group_data in GROUPS]
     Group.objects.filter(name__in=groups).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0001_initial'),
-        ('wagtailadmin', '0001_create_admin_access_permissions'),
-        ('wagtailimages', '0002_initial_data'),
-        ('wagtaildocs', '0002_initial_data'),
-        ('contenttypes', '__latest__'),
+        ("users", "0001_initial"),
+        ("wagtailadmin", "0001_create_admin_access_permissions"),
+        ("wagtailimages", "0002_initial_data"),
+        ("wagtaildocs", "0002_initial_data"),
+        ("contenttypes", "__latest__"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0003_make_email_username.py b/hypha/apply/users/migrations/0003_make_email_username.py
index fa56715e8ff5dee4484b7ea8ceff9c3a55fe8630..9179bf0b571fd268155ff2acbe29814bb1f2819a 100644
--- a/hypha/apply/users/migrations/0003_make_email_username.py
+++ b/hypha/apply/users/migrations/0003_make_email_username.py
@@ -8,25 +8,26 @@ import hypha.apply.users.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0002_initial_data'),
+        ("users", "0002_initial_data"),
     ]
 
     operations = [
         migrations.AlterModelManagers(
-            name='user',
+            name="user",
             managers=[
-                ('objects', hypha.apply.users.models.UserManager()),
+                ("objects", hypha.apply.users.models.UserManager()),
             ],
         ),
         migrations.AlterField(
-            model_name='user',
-            name='email',
-            field=models.EmailField(max_length=254, unique=True, verbose_name='email address'),
+            model_name="user",
+            name="email",
+            field=models.EmailField(
+                max_length=254, unique=True, verbose_name="email address"
+            ),
         ),
         migrations.RemoveField(
-            model_name='user',
-            name='username',
+            model_name="user",
+            name="username",
         ),
     ]
diff --git a/hypha/apply/users/migrations/0004_drop_first_last_names.py b/hypha/apply/users/migrations/0004_drop_first_last_names.py
index 19a541f53a5bc945fc4b06d3c243549481e9abb2..e1b03dab3dcc0e22c19fa19efe667e15045888b6 100644
--- a/hypha/apply/users/migrations/0004_drop_first_last_names.py
+++ b/hypha/apply/users/migrations/0004_drop_first_last_names.py
@@ -6,23 +6,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0003_make_email_username'),
+        ("users", "0003_make_email_username"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='user',
-            name='first_name',
+            model_name="user",
+            name="first_name",
         ),
         migrations.RemoveField(
-            model_name='user',
-            name='last_name',
+            model_name="user",
+            name="last_name",
         ),
         migrations.AddField(
-            model_name='user',
-            name='full_name',
-            field=models.CharField(blank=True, max_length=255, verbose_name='Full name'),
+            model_name="user",
+            name="full_name",
+            field=models.CharField(
+                blank=True, max_length=255, verbose_name="Full name"
+            ),
         ),
     ]
diff --git a/hypha/apply/users/migrations/0005_user_drupal_id.py b/hypha/apply/users/migrations/0005_user_drupal_id.py
index 662c55217d96a415dcca24a8a5c7564c788a9534..3d2899a0de1fa8a254e2b01af1025deb84662fbf 100644
--- a/hypha/apply/users/migrations/0005_user_drupal_id.py
+++ b/hypha/apply/users/migrations/0005_user_drupal_id.py
@@ -6,15 +6,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0004_drop_first_last_names'),
+        ("users", "0004_drop_first_last_names"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='user',
-            name='drupal_id',
+            model_name="user",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/apply/users/migrations/0006_update_the_ordering_of_users.py b/hypha/apply/users/migrations/0006_update_the_ordering_of_users.py
index 3c54ec96193f79f14bc3cc7b7da0d36592430539..44e6f6fc5498678094607f75776a9792b2885230 100644
--- a/hypha/apply/users/migrations/0006_update_the_ordering_of_users.py
+++ b/hypha/apply/users/migrations/0006_update_the_ordering_of_users.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0005_user_drupal_id'),
+        ("users", "0005_user_drupal_id"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='user',
-            options={'ordering': ('full_name', 'email')},
+            name="user",
+            options={"ordering": ("full_name", "email")},
         ),
     ]
diff --git a/hypha/apply/users/migrations/0007_user_slack.py b/hypha/apply/users/migrations/0007_user_slack.py
index 177e18168a780bfa9cb95f21b84f57a66a49f4f7..783843b47e7f4510d8a465280b4da214d07376ff 100644
--- a/hypha/apply/users/migrations/0007_user_slack.py
+++ b/hypha/apply/users/migrations/0007_user_slack.py
@@ -4,15 +4,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0006_update_the_ordering_of_users'),
+        ("users", "0006_update_the_ordering_of_users"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='user',
-            name='slack',
-            field=models.CharField(blank=True, help_text='This is the name we should "@mention" when sending notifications', max_length=50, verbose_name='Slack name'),
+            model_name="user",
+            name="slack",
+            field=models.CharField(
+                blank=True,
+                help_text='This is the name we should "@mention" when sending notifications',
+                max_length=50,
+                verbose_name="Slack name",
+            ),
         ),
     ]
diff --git a/hypha/apply/users/migrations/0008_add_staff_permissions.py b/hypha/apply/users/migrations/0008_add_staff_permissions.py
index 792a89873de296792aa399cb9348f24f7f22aa17..d6be98faac79694e8fc2e014345a13813a698446 100644
--- a/hypha/apply/users/migrations/0008_add_staff_permissions.py
+++ b/hypha/apply/users/migrations/0008_add_staff_permissions.py
@@ -7,16 +7,13 @@ from hypha.apply.users.groups import STAFF_GROUP_NAME
 
 
 class Migration(migrations.Migration):
-
     def add_permissions(apps, schema_editor):
         staff_group = Group.objects.get(name=STAFF_GROUP_NAME)
-        staff_add_perm = Permission.objects.get(name='Can change event')
+        staff_add_perm = Permission.objects.get(name="Can change event")
         staff_group.permissions.add(staff_add_perm)
 
     dependencies = [
-        ('users', '0007_user_slack'),
+        ("users", "0007_user_slack"),
     ]
 
-    operations = [
-        migrations.RunPython(add_permissions)
-    ]
+    operations = [migrations.RunPython(add_permissions)]
diff --git a/hypha/apply/users/migrations/0009_add_partner_group.py b/hypha/apply/users/migrations/0009_add_partner_group.py
index b84e961f83901073eba12b731f43aca92d0462e4..a471d8d8f8fcc45893e91fc0c8b7a071031270c4 100644
--- a/hypha/apply/users/migrations/0009_add_partner_group.py
+++ b/hypha/apply/users/migrations/0009_add_partner_group.py
@@ -1,4 +1,3 @@
-
 # Generated by Django 2.0.9 on 2018-12-19 13:21
 from __future__ import unicode_literals
 
@@ -14,12 +13,12 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for permission in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for permission in group_data["permissions"]:
             try:
                 group.permissions.add(Permission.objects.get(codename=permission))
             except ObjectDoesNotExist:
@@ -27,16 +26,13 @@ def add_groups(apps, schema_editor):
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
     Group.objects.filter(name__in=[TEAMADMIN_GROUP_NAME, PARTNER_GROUP_NAME]).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0008_add_staff_permissions'),
+        ("users", "0008_add_staff_permissions"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0010_add_community_reviewer_group.py b/hypha/apply/users/migrations/0010_add_community_reviewer_group.py
index 8c304f8f512c4f152779c8f002bd5289b227c3e1..4829cbaf5cc1b97c944d2234d278542e0c73be23 100644
--- a/hypha/apply/users/migrations/0010_add_community_reviewer_group.py
+++ b/hypha/apply/users/migrations/0010_add_community_reviewer_group.py
@@ -1,4 +1,3 @@
-
 # Generated by Django 2.0.9 on 2018-12-19 13:21
 from __future__ import unicode_literals
 
@@ -14,12 +13,12 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for permission in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for permission in group_data["permissions"]:
             try:
                 group.permissions.add(Permission.objects.get(codename=permission))
             except ObjectDoesNotExist:
@@ -27,16 +26,13 @@ def add_groups(apps, schema_editor):
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
     Group.objects.filter(name__in=[COMMUNITY_REVIEWER_GROUP_NAME]).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0009_add_partner_group'),
+        ("users", "0009_add_partner_group"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0011_add_applicant_group.py b/hypha/apply/users/migrations/0011_add_applicant_group.py
index 3b0b7f04704fa4263f65e38e63396dac56a80316..e55ee34e7dc3339fd8e55b6d25374d1e4c3241b1 100644
--- a/hypha/apply/users/migrations/0011_add_applicant_group.py
+++ b/hypha/apply/users/migrations/0011_add_applicant_group.py
@@ -1,4 +1,3 @@
-
 # Generated by Django 2.0.9 on 2018-12-19 13:21
 from __future__ import unicode_literals
 
@@ -14,12 +13,12 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for permission in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for permission in group_data["permissions"]:
             try:
                 group.permissions.add(Permission.objects.get(codename=permission))
             except ObjectDoesNotExist:
@@ -27,16 +26,13 @@ def add_groups(apps, schema_editor):
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
     Group.objects.filter(name__in=[APPLICANT_GROUP_NAME]).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0010_add_community_reviewer_group'),
+        ("users", "0010_add_community_reviewer_group"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0012_set_applicant_group.py b/hypha/apply/users/migrations/0012_set_applicant_group.py
index acb650e865383b3407e03a403af1cb2df24de3c3..0358424960f6e7b7d50febaea36d33674a054502 100644
--- a/hypha/apply/users/migrations/0012_set_applicant_group.py
+++ b/hypha/apply/users/migrations/0012_set_applicant_group.py
@@ -1,4 +1,3 @@
-
 # Generated by Django 2.0.9 on 2018-12-19 13:21
 from __future__ import unicode_literals
 
@@ -29,11 +28,8 @@ def unset_group(apps, schema_editor):
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0011_add_applicant_group'),
+        ("users", "0011_add_applicant_group"),
     ]
 
-    operations = [
-        migrations.RunPython(set_group, unset_group)
-    ]
+    operations = [migrations.RunPython(set_group, unset_group)]
diff --git a/hypha/apply/users/migrations/0013_add_approver_group.py b/hypha/apply/users/migrations/0013_add_approver_group.py
index 9ec436fd03d14c4089bc5924c4979582db488941..3638944b2cc95f3f0fba5654b0e4bbd14732fec8 100644
--- a/hypha/apply/users/migrations/0013_add_approver_group.py
+++ b/hypha/apply/users/migrations/0013_add_approver_group.py
@@ -12,12 +12,12 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for codename in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for codename in group_data["permissions"]:
             try:
                 permission = Permission.objects.get(codename=codename)
             except ObjectDoesNotExist:
@@ -28,16 +28,13 @@ def add_groups(apps, schema_editor):
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
     Group.objects.filter(name=APPROVER_GROUP_NAME).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0012_set_applicant_group'),
+        ("users", "0012_set_applicant_group"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0014_usersettings.py b/hypha/apply/users/migrations/0014_usersettings.py
index da26c4d66a397aed72c5ad7141d1ebd4e4451363..1afa4e57850c8f21aa6a4f5ac3cf2d5700c6550c 100644
--- a/hypha/apply/users/migrations/0014_usersettings.py
+++ b/hypha/apply/users/migrations/0014_usersettings.py
@@ -6,24 +6,44 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0045_assign_unlock_grouppagepermission'),
-        ('users', '0013_add_approver_group'),
+        ("wagtailcore", "0045_assign_unlock_grouppagepermission"),
+        ("users", "0013_add_approver_group"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='UserSettings',
+            name="UserSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('consent_show', models.BooleanField(default=False, verbose_name='Show consent checkbox in login form')),
-                ('consent_text', models.CharField(max_length=255)),
-                ('consent_help', wagtail.fields.RichTextField()),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "consent_show",
+                    models.BooleanField(
+                        default=False,
+                        verbose_name="Show consent checkbox in login form",
+                    ),
+                ),
+                ("consent_text", models.CharField(max_length=255)),
+                ("consent_help", wagtail.fields.RichTextField()),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'user settings',
+                "verbose_name": "user settings",
             },
         ),
     ]
diff --git a/hypha/apply/users/migrations/0015_login_extra_text.py b/hypha/apply/users/migrations/0015_login_extra_text.py
index 8af7ff537f15aae101906be7996214442f1f88f9..cea17b66915eab41d7623a3d2623d53b57cd5a14 100644
--- a/hypha/apply/users/migrations/0015_login_extra_text.py
+++ b/hypha/apply/users/migrations/0015_login_extra_text.py
@@ -5,30 +5,31 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0014_usersettings'),
+        ("users", "0014_usersettings"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='usersettings',
-            name='extra_text',
+            model_name="usersettings",
+            name="extra_text",
             field=wagtail.fields.RichTextField(blank=True),
         ),
         migrations.AlterField(
-            model_name='usersettings',
-            name='consent_help',
+            model_name="usersettings",
+            name="consent_help",
             field=wagtail.fields.RichTextField(blank=True),
         ),
         migrations.AlterField(
-            model_name='usersettings',
-            name='consent_show',
-            field=models.BooleanField(default=False, verbose_name='Show consent checkbox'),
+            model_name="usersettings",
+            name="consent_show",
+            field=models.BooleanField(
+                default=False, verbose_name="Show consent checkbox"
+            ),
         ),
         migrations.AlterField(
-            model_name='usersettings',
-            name='consent_text',
+            model_name="usersettings",
+            name="consent_text",
             field=models.CharField(blank=True, max_length=255),
         ),
     ]
diff --git a/hypha/apply/users/migrations/0016_add_finance_group.py b/hypha/apply/users/migrations/0016_add_finance_group.py
index d26f3aaa5df4c5cdb77de0194e33b4f32f1a2f71..88525ad545c8f58c526dd09177cdcbca548e3da3 100644
--- a/hypha/apply/users/migrations/0016_add_finance_group.py
+++ b/hypha/apply/users/migrations/0016_add_finance_group.py
@@ -12,12 +12,12 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for codename in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for codename in group_data["permissions"]:
             try:
                 permission = Permission.objects.get(codename=codename)
             except ObjectDoesNotExist:
@@ -28,16 +28,13 @@ def add_groups(apps, schema_editor):
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
     Group.objects.filter(name=FINANCE_GROUP_NAME).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0015_login_extra_text'),
+        ("users", "0015_login_extra_text"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0017_rename_staff_admin.py b/hypha/apply/users/migrations/0017_rename_staff_admin.py
index 00066286b29339ead648c550c4aaf0b59f791fb0..11ae3ad0a023f3bf8ecd8ad52439110e1239f10e 100644
--- a/hypha/apply/users/migrations/0017_rename_staff_admin.py
+++ b/hypha/apply/users/migrations/0017_rename_staff_admin.py
@@ -1,4 +1,3 @@
-
 # Generated by Django 2.0.9 on 2018-12-19 13:21
 from __future__ import unicode_literals
 
@@ -10,7 +9,7 @@ from hypha.apply.users.groups import TEAMADMIN_GROUP_NAME
 
 def rename_group(apps, schema_editor):
     try:
-        team_admin_group = Group.objects.get(name='Team Admin')
+        team_admin_group = Group.objects.get(name="Team Admin")
     except Group.DoesNotExist:
         pass
     else:
@@ -24,16 +23,13 @@ def unrename_group(apps, schema_editor):
     except Group.DoesNotExist:
         pass
     else:
-        team_admin_group.name = 'Team Admin'
+        team_admin_group.name = "Team Admin"
         team_admin_group.save()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0016_add_finance_group'),
+        ("users", "0016_add_finance_group"),
     ]
 
-    operations = [
-        migrations.RunPython(rename_group, unrename_group)
-    ]
+    operations = [migrations.RunPython(rename_group, unrename_group)]
diff --git a/hypha/apply/users/migrations/0018_add_contracting_group.py b/hypha/apply/users/migrations/0018_add_contracting_group.py
index 99935b918a91a3151646bf0c9d5a4cbb481537ac..ac220bd2c4fbf002f65888eff8eef5c3c42bd7fc 100644
--- a/hypha/apply/users/migrations/0018_add_contracting_group.py
+++ b/hypha/apply/users/migrations/0018_add_contracting_group.py
@@ -12,12 +12,12 @@ def add_groups(apps, schema_editor):
     db_alias = schema_editor.connection.alias
     emit_post_migrate_signal(2, False, db_alias)
 
-    Group = apps.get_model('auth.Group')
-    Permission = apps.get_model('auth.Permission')
+    Group = apps.get_model("auth.Group")
+    Permission = apps.get_model("auth.Permission")
 
     for group_data in GROUPS:
-        group, created = Group.objects.get_or_create(name=group_data['name'])
-        for codename in group_data['permissions']:
+        group, created = Group.objects.get_or_create(name=group_data["name"])
+        for codename in group_data["permissions"]:
             try:
                 permission = Permission.objects.get(codename=codename)
             except ObjectDoesNotExist:
@@ -28,16 +28,13 @@ def add_groups(apps, schema_editor):
 
 
 def remove_groups(apps, schema_editor):
-    Group = apps.get_model('auth.Group')
+    Group = apps.get_model("auth.Group")
     Group.objects.filter(name=CONTRACTING_GROUP_NAME).delete()
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('users', '0017_rename_staff_admin'),
+        ("users", "0017_rename_staff_admin"),
     ]
 
-    operations = [
-        migrations.RunPython(add_groups, remove_groups)
-    ]
+    operations = [migrations.RunPython(add_groups, remove_groups)]
diff --git a/hypha/apply/users/migrations/0019_rename_usersettings_authsettings.py b/hypha/apply/users/migrations/0019_rename_usersettings_authsettings.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e56b3b891bc2597c3c91a680ad8ef46d6291f8a
--- /dev/null
+++ b/hypha/apply/users/migrations/0019_rename_usersettings_authsettings.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.19 on 2023-06-25 14:01
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("wagtailcore", "0083_workflowcontenttype"),
+        ("users", "0018_add_contracting_group"),
+    ]
+
+    operations = [
+        migrations.RenameModel(
+            old_name="UserSettings",
+            new_name="AuthSettings",
+        ),
+    ]
diff --git a/hypha/apply/users/migrations/0020_auto_20230625_1825.py b/hypha/apply/users/migrations/0020_auto_20230625_1825.py
new file mode 100644
index 0000000000000000000000000000000000000000..cbc0aeb721268843cc035b586d8404a898cda5af
--- /dev/null
+++ b/hypha/apply/users/migrations/0020_auto_20230625_1825.py
@@ -0,0 +1,44 @@
+# Generated by Django 3.2.19 on 2023-06-25 18:25
+
+from django.db import migrations, models
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("users", "0019_rename_usersettings_authsettings"),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name="authsettings",
+            options={"verbose_name": "Auth Settings"},
+        ),
+        migrations.RemoveField(
+            model_name="authsettings",
+            name="site",
+        ),
+        migrations.AddField(
+            model_name="authsettings",
+            name="register_extra_text",
+            field=wagtail.fields.RichTextField(
+                blank=True, help_text="Extra text to be displayed on register form"
+            ),
+        ),
+        migrations.AlterField(
+            model_name="authsettings",
+            name="consent_show",
+            field=models.BooleanField(
+                default=False, verbose_name="Show consent checkbox?"
+            ),
+        ),
+        migrations.AlterField(
+            model_name="authsettings",
+            name="extra_text",
+            field=wagtail.fields.RichTextField(
+                blank=True,
+                help_text="Displayed along side login form",
+                verbose_name="Login extra text",
+            ),
+        ),
+    ]
diff --git a/hypha/apply/users/models.py b/hypha/apply/users/models.py
index 59b9a620d9e4cabff595189a3fbdefe72fbc41e0..44ee07b515f51bc6ec66a59e1c23e2fedb6eba8e 100644
--- a/hypha/apply/users/models.py
+++ b/hypha/apply/users/models.py
@@ -9,7 +9,7 @@ from django.urls import reverse
 from django.utils.functional import cached_property
 from django.utils.translation import gettext_lazy as _
 from wagtail.admin.panels import FieldPanel, MultiFieldPanel
-from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
+from wagtail.contrib.settings.models import BaseGenericSetting, register_setting
 from wagtail.fields import RichTextField
 
 from .groups import (
@@ -55,10 +55,14 @@ class UserQuerySet(models.QuerySet):
         return self.filter(groups__name=FINANCE_GROUP_NAME, is_active=True)
 
     def finances_level_1(self):
-        return self.filter(groups__name=FINANCE_GROUP_NAME, is_active=True).exclude(groups__name=APPROVER_GROUP_NAME)
+        return self.filter(groups__name=FINANCE_GROUP_NAME, is_active=True).exclude(
+            groups__name=APPROVER_GROUP_NAME
+        )
 
     def finances_level_2(self):
-        return self.filter(groups__name=FINANCE_GROUP_NAME, is_active=True).filter(groups__name=APPROVER_GROUP_NAME)
+        return self.filter(groups__name=FINANCE_GROUP_NAME, is_active=True).filter(
+            groups__name=APPROVER_GROUP_NAME
+        )
 
     def contracting(self):
         return self.filter(groups__name=CONTRACTING_GROUP_NAME, is_active=True)
@@ -72,7 +76,7 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
         Creates and saves a User with the given username, email and password.
         """
         if not email:
-            raise ValueError('The given email must be set')
+            raise ValueError("The given email must be set")
         email = self.normalize_email(email)
         is_registered, reason = is_user_already_registered(email)
         if is_registered:
@@ -83,18 +87,18 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
         return user
 
     def create_user(self, email, password=None, **extra_fields):
-        extra_fields.setdefault('is_staff', False)
-        extra_fields.setdefault('is_superuser', False)
+        extra_fields.setdefault("is_staff", False)
+        extra_fields.setdefault("is_superuser", False)
         return self._create_user(email, password, **extra_fields)
 
     def create_superuser(self, email, password, **extra_fields):
-        extra_fields.setdefault('is_staff', True)
-        extra_fields.setdefault('is_superuser', True)
+        extra_fields.setdefault("is_staff", True)
+        extra_fields.setdefault("is_superuser", True)
 
-        if extra_fields.get('is_staff') is not True:
-            raise ValueError('Superuser must have is_staff=True.')
-        if extra_fields.get('is_superuser') is not True:
-            raise ValueError('Superuser must have is_superuser=True.')
+        if extra_fields.get("is_staff") is not True:
+            raise ValueError("Superuser must have is_staff=True.")
+        if extra_fields.get("is_superuser") is not True:
+            raise ValueError("Superuser must have is_superuser=True.")
 
         return self._create_user(email, password, **extra_fields)
 
@@ -117,14 +121,18 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
                     invalid_params.append(param)
         if invalid_params:
             raise exceptions.FieldError(
-                "Invalid field name(s) for model %s: '%s'." % (
+                "Invalid field name(s) for model %s: '%s'."
+                % (
                     self.model._meta.object_name,
                     "', '".join(sorted(invalid_params)),
-                ))
+                )
+            )
         return params
 
-    def get_or_create_and_notify(self, defaults: dict | None =None, site=None, **kwargs):
-        """Create or get an account for applicant.and send activation email to applicant.
+    def get_or_create_and_notify(
+        self, defaults: dict | None = None, site=None, **kwargs
+    ):
+        """Create or get an account for applicant and send activation email to applicant.
 
         Args:
             defaults: Dict containing user attributes for user creation. Defaults to dict().
@@ -142,7 +150,11 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
         if defaults is None:
             defaults = {}
 
-        email = kwargs.get('email')
+        email = kwargs.get("email")
+        redirect_url = ""
+        if "redirect_url" in kwargs:
+            redirect_url = kwargs.pop("redirect_url")
+
         is_registered, _ = is_user_already_registered(email=email)
 
         if is_registered:
@@ -153,9 +165,9 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
             elif not user.is_active:
                 raise IntegrityError("Found an inactive account")
         else:
-            if 'password' in kwargs:
+            if "password" in kwargs:
                 # Coming from registration without application
-                temp_pass = kwargs.pop('password')
+                temp_pass = kwargs.pop("password")
             else:
                 temp_pass = BaseUserManager().make_random_password(length=32)
 
@@ -163,12 +175,14 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
 
             defaults.update(password=temp_pass_hash)
             try:
-                params = dict(resolve_callables(self._extract_model_params(defaults, **kwargs)))
+                params = dict(
+                    resolve_callables(self._extract_model_params(defaults, **kwargs))
+                )
                 user = self.create(**params)
             except IntegrityError:
                 raise
 
-            send_activation_email(user, site)
+            send_activation_email(user, site, redirect_url=redirect_url)
             _created = True
 
         applicant_group = Group.objects.get(name=APPLICANT_GROUP_NAME)
@@ -179,10 +193,12 @@ class UserManager(BaseUserManager.from_queryset(UserQuerySet)):
 
 
 class User(AbstractUser):
-    email = models.EmailField(_('email address'), unique=True)
-    full_name = models.CharField(verbose_name=_('Full name'), max_length=255, blank=True)
+    email = models.EmailField(_("email address"), unique=True)
+    full_name = models.CharField(
+        verbose_name=_("Full name"), max_length=255, blank=True
+    )
     slack = models.CharField(
-        verbose_name=_('Slack name'),
+        verbose_name=_("Slack name"),
         blank=True,
         help_text=_('This is the name we should "@mention" when sending notifications'),
         max_length=50,
@@ -191,7 +207,7 @@ class User(AbstractUser):
     # Meta: used for migration purposes only
     drupal_id = models.IntegerField(null=True, blank=True, editable=False)
 
-    USERNAME_FIELD = 'email'
+    USERNAME_FIELD = "email"
     REQUIRED_FIELDS = []
 
     # Remove the username/first/last name field which is no longer used.
@@ -213,16 +229,16 @@ class User(AbstractUser):
         return self.email
 
     def get_full_name_with_group(self):
-        is_apply_staff = f' ({STAFF_GROUP_NAME})' if self.is_apply_staff else ''
-        is_reviewer = f' ({REVIEWER_GROUP_NAME})' if self.is_reviewer else ''
-        is_applicant = f' ({APPLICANT_GROUP_NAME})' if self.is_applicant else ''
-        is_finance = f' ({FINANCE_GROUP_NAME})' if self.is_finance else ''
-        is_contracting = f' ({CONTRACTING_GROUP_NAME})' if self.is_contracting else ''
-        return f'{self.full_name.strip()}{is_apply_staff}{is_reviewer}{is_applicant}{is_finance}{is_contracting}'
+        is_apply_staff = f" ({STAFF_GROUP_NAME})" if self.is_apply_staff else ""
+        is_reviewer = f" ({REVIEWER_GROUP_NAME})" if self.is_reviewer else ""
+        is_applicant = f" ({APPLICANT_GROUP_NAME})" if self.is_applicant else ""
+        is_finance = f" ({FINANCE_GROUP_NAME})" if self.is_finance else ""
+        is_contracting = f" ({CONTRACTING_GROUP_NAME})" if self.is_contracting else ""
+        return f"{self.full_name.strip()}{is_apply_staff}{is_reviewer}{is_applicant}{is_finance}{is_contracting}"
 
     @cached_property
     def roles(self):
-        return list(self.groups.values_list('name', flat=True))
+        return list(self.groups.values_list("name", flat=True))
 
     @cached_property
     def is_apply_staff(self):
@@ -234,7 +250,9 @@ class User(AbstractUser):
 
     @cached_property
     def is_apply_staff_admin(self):
-        return self.groups.filter(name=TEAMADMIN_GROUP_NAME).exists() or self.is_superuser
+        return (
+            self.groups.filter(name=TEAMADMIN_GROUP_NAME).exists() or self.is_superuser
+        )
 
     @cached_property
     def is_reviewer(self):
@@ -262,14 +280,20 @@ class User(AbstractUser):
 
     @cached_property
     def is_finance_level_1(self):
-        return self.groups.filter(name=FINANCE_GROUP_NAME).exists() and not self.groups.filter(name=APPROVER_GROUP_NAME).exists()
+        return (
+            self.groups.filter(name=FINANCE_GROUP_NAME).exists()
+            and not self.groups.filter(name=APPROVER_GROUP_NAME).exists()
+        )
 
     @cached_property
     def is_finance_level_2(self):
         # disable finance2 user if invoice flow in not extended
         if not settings.INVOICE_EXTENDED_WORKFLOW:
             return False
-        return self.groups.filter(name=FINANCE_GROUP_NAME).exists() & self.groups.filter(name=APPROVER_GROUP_NAME).exists()
+        return (
+            self.groups.filter(name=FINANCE_GROUP_NAME).exists()
+            & self.groups.filter(name=APPROVER_GROUP_NAME).exists()
+        )
 
     @cached_property
     def is_contracting(self):
@@ -277,7 +301,10 @@ class User(AbstractUser):
 
     @cached_property
     def is_contracting_approver(self):
-        return self.groups.filter(name=CONTRACTING_GROUP_NAME).exists() and self.groups.filter(name=APPROVER_GROUP_NAME).exists()
+        return (
+            self.groups.filter(name=CONTRACTING_GROUP_NAME).exists()
+            and self.groups.filter(name=APPROVER_GROUP_NAME).exists()
+        )
 
     def get_absolute_url(self):
         """Used in the activities messages to generate URL for user instances.
@@ -285,44 +312,53 @@ class User(AbstractUser):
         Returns:
            url pointing to the wagtail admin, as there are no public urls for user.
         """
-        return reverse('wagtailusers_users:edit', args=[self.id])
+        return reverse("wagtailusers_users:edit", args=[self.id])
 
     class Meta:
-        ordering = ('full_name', 'email')
+        ordering = ("full_name", "email")
 
     def __repr__(self):
-        return f'<{self.__class__.__name__}: {self.full_name} ({self.email})>'
+        return f"<{self.__class__.__name__}: {self.full_name} ({self.email})>"
 
 
 @register_setting
-class UserSettings(BaseSiteSetting):
-
+class AuthSettings(BaseGenericSetting):
     wagtail_reference_index_ignore = True
 
     class Meta:
-        verbose_name = 'user settings'
-
-    consent_show = models.BooleanField(
-        'Show consent checkbox',
-        default=False,
-    )
+        verbose_name = "Auth Settings"
 
-    consent_text = models.CharField(
-        max_length=255,
+    consent_show = models.BooleanField(_("Show consent checkbox?"), default=False)
+    consent_text = models.CharField(max_length=255, blank=True)
+    consent_help = RichTextField(blank=True)
+    extra_text = RichTextField(
+        _("Login extra text"),
         blank=True,
+        help_text=_("Displayed along side login form"),
+    )
+    register_extra_text = RichTextField(
+        blank=True, help_text=_("Extra text to be displayed on register form")
     )
-
-    consent_help = RichTextField(blank=True)
-
-    extra_text = RichTextField(blank=True)
 
     panels = [
-        MultiFieldPanel([
-            FieldPanel('consent_show'),
-            FieldPanel('consent_text'),
-            FieldPanel('consent_help'),
-        ], 'consent checkbox on login form'),
-        MultiFieldPanel([
-            FieldPanel('extra_text'),
-        ], 'extra text on login form'),
+        MultiFieldPanel(
+            [
+                FieldPanel("consent_show"),
+                FieldPanel("consent_text"),
+                FieldPanel("consent_help"),
+            ],
+            _("User consent on login & register forms"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("extra_text"),
+            ],
+            _("Login form customizations"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("register_extra_text"),
+            ],
+            _("Register form customizations"),
+        ),
     ]
diff --git a/hypha/apply/users/pipeline.py b/hypha/apply/users/pipeline.py
index 45b986748a0536f85b2cd1f91ac04cf43f63d220..7a0d230a1de68b99c9a63fb71bac8240922fc5aa 100644
--- a/hypha/apply/users/pipeline.py
+++ b/hypha/apply/users/pipeline.py
@@ -5,7 +5,7 @@ from hypha.apply.users.groups import STAFF_GROUP_NAME
 
 
 def make_otf_staff(backend, user, response, *args, **kwargs):
-    _, email_domain = user.email.split('@')
+    _, email_domain = user.email.split("@")
     if email_domain in settings.STAFF_EMAIL_DOMAINS:
         staff_group = Group.objects.get(name=STAFF_GROUP_NAME)
         user.groups.add(staff_group)
diff --git a/hypha/apply/users/templates/two_factor/_base_focus.html b/hypha/apply/users/templates/two_factor/_base_focus.html
index 823dcf1b86738ebaf59596cb888ce5f25bdfc1ed..2a63a6db9b5c4f98a178ce0c12b6010155e33bf6 100644
--- a/hypha/apply/users/templates/two_factor/_base_focus.html
+++ b/hypha/apply/users/templates/two_factor/_base_focus.html
@@ -2,17 +2,24 @@
 {% load i18n static %}
 
 {% block content_wrapper %}
-    <div class="admin-bar">
-        <div class="admin-bar__inner admin-bar__inner--with-button">
-            <h3 class="admin-bar__heading">{% trans "Welcome" %} {{ user }}</h3>
-            <a href="{% url 'dashboard:dashboard' %}" class="button button--primary button--arrow-pixels-white" hx-boost='true'>
-                {% trans "Go to my dashboard" %}
-                <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-            </a>
-        </div>
-    </div>
+    {% adminbar %}
+
+        {% slot back_link %}
+            <a href="/account/" class="simplified__submissions-link"> {% trans "Back to Account" %}</a>
+        {% endslot %}
+
+        {% slot header %}
+            {% trans "Two-Factor Authentication (2FA)" %}
+        {% endslot %}
+        {% comment %} {% slot sub_heading %}{% trans "All submissions ready for discussion." %}{% endslot %} {% endcomment %}
+
+        <a href="{% url 'dashboard:dashboard' %}" class="button button--primary button--arrow-pixels-white" hx-boost='true'>
+            {% trans "Go to my dashboard" %}
+            <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+        </a>
+    {% endadminbar %}
 
-    <div class="wrapper wrapper--small wrapper--inner-space-medium  two-factor">
+    <div class="wrapper wrapper--inner-space-medium max-w-2xl  two-factor">
         {% block content %}{% endblock %}
     </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/two_factor/_wizard_actions.html b/hypha/apply/users/templates/two_factor/_wizard_actions.html
index e0e0a910cf49cdf0f328d6940c46c234aae47ed5..eaff592606c70899396093c95d943ef8af1c4fd3 100644
--- a/hypha/apply/users/templates/two_factor/_wizard_actions.html
+++ b/hypha/apply/users/templates/two_factor/_wizard_actions.html
@@ -13,9 +13,9 @@
 <button type="submit" class="button button--primary">{{ button_text }}</button>
 
 <script>
-var lbl = document.querySelector("label[for=id_generator-token]");
-if (lbl) {
-    lbl.textContent = "{% trans "Verification code" %}:";
-}
+    var lbl = document.querySelector("label[for=id_generator-token]");
+    if (lbl) {
+        lbl.textContent = "{% trans "Verification code" %}:";
+    }
 
 </script>
diff --git a/hypha/apply/users/templates/two_factor/core/backup_tokens.html b/hypha/apply/users/templates/two_factor/core/backup_tokens.html
index d9cdb75d5d4c04dd08e3363b2ede3fdfd849fc9f..297cd8503d7b596883c0986bce7de540be3f0348 100644
--- a/hypha/apply/users/templates/two_factor/core/backup_tokens.html
+++ b/hypha/apply/users/templates/two_factor/core/backup_tokens.html
@@ -2,95 +2,103 @@
 {% load static i18n users_tags %}
 
 {% block content %}
-  <p class="actions actions-header"><a href="{% url 'users:account' %}" class="link link--bold">{% trans "Back to Account" %}</a></p>
-  <h1>{% block title %}{% trans "Backup Codes" %}{% endblock %}</h1>
-  <p>{% blocktrans trimmed %}Each of the code can be used only once. When they are used up, you can generate a new set of backup codes.{% endblocktrans %}</p>
+    <h1>{% block title %}{% trans "Backup Codes" %}{% endblock %}</h1>
 
-  {% if device.token_set.count %}
-<textarea readonly cols="8" rows="{{ device.token_set.count }}" id="list-backup-tokens">{% for token in device.token_set.all %}{{ token.token }}{% if not forloop.last %}&#013;&#010;{% endif %}{% endfor %}</textarea>
-    <p class="hide-print">{% blocktrans %}You should now print these codes or copy them to your
-       clipboard and store them in your password manager.{% endblocktrans %}</p>
-
-    <form method="post" class="actions actions-footer">{% csrf_token %}{{ form }}
-    <p>
-        <a href="#" class="btn btn-primary btn-print">{% trans "Print" %}</button>
-        <a href="#"
-            class="btn btn-primary btn-copy-to-clipboard"
-            data-clipboard-target="#list-backup-tokens"
-            data-clipboard-action="copy"
-            data-tippy-content="{% trans "Copied!" %}"
-        >{% trans "Copy to Clipboard" %}</a>
-        <button class="btn btn-primary" type="submit">{% trans "Regenerate Codes" %}</button>
+    <p class="hide-print">
+        {% blocktrans %}You should now print these codes or copy them to your
+            clipboard and store them in your password manager.{% endblocktrans %}
     </p>
 
-    <p class="hide-print">{% blocktrans %}Once done, acknowledge you have stored the codes securely and then click "Finish".{% endblocktrans %}</p>
-    <div class="form">
-        <ul class="errorlist hidden error-action-agree"><li>Please confirm you have stored the codes securely below.</li></ul>
-        <div class="form__group form__group--checkbox">
-            <input type="checkbox" id="action_agree" name="action_agree" value="action_agree">
-            <label for="action_agree"> I have stored the backup codes securely.</label><br><br>
-        </div>
-        <a class="btn btn-link btn-finish" href="{% url 'users:account' %}">{% trans "Finish" %}</a>
-    </div>
-    </form>
-  {% else %}
-    <p>{% trans "You don't have any backup codes yet." %}</p>
-      <form method="post">{% csrf_token %}{{ form }}
-        <button class="btn btn-primary" type="submit">{% trans "Generate Codes" %}</button>
-      </form>
-  {% endif %}
+    {% if device.token_set.count %}
+        <textarea readonly
+                  cols="8"
+                  rows="{{ device.token_set.count }}"
+                  id="list-backup-tokens"
+                  class="border"
+        >{% for token in device.token_set.all %}{{ token.token }}{% if not forloop.last %}&#013;&#010;{% endif %}{% endfor %}</textarea>
+
+        <form method="post" class="actions actions-footer">{% csrf_token %}{{ form }}
+            <p class="flex justify-start flex-wrap gap-2 mb-4">
+                <a href="#" class="btn btn-primary btn-print">{% trans "Print" %}</button>
+                <a href="#"
+                   class="btn btn-primary btn-copy-to-clipboard"
+                   data-clipboard-target="#list-backup-tokens"
+                   data-clipboard-action="copy"
+                   data-tippy-content="{% trans "Copied!" %}"
+                   data-tippy-trigger="manual"
+                >{% trans "Copy to Clipboard" %}</a>
+                <button class="btn btn-primary" type="submit">{% trans "Regenerate Codes" %}</button>
+            </p>
+
+            <p class="text-sm text-fg-muted">{% blocktrans trimmed %} <strong>Note:</strong> Each of the code can be used only once. When they are used up, you can generate a new set of backup codes.{% endblocktrans %}</p>
+            <p class="hide-print">{% blocktrans %}Once done, acknowledge you have stored the codes securely and then click "Finish".{% endblocktrans %}</p>
+            <div class="form">
+                <ul class="errorlist hidden error-action-agree"><li>Please confirm you have stored the codes securely below.</li></ul>
+                <div class="form__group form__group--checkbox">
+                    <input type="checkbox" id="action_agree" name="action_agree" value="action_agree">
+                    <label for="action_agree"> I have stored the backup codes securely.</label><br><br>
+                </div>
+                <a class="btn btn-link btn-finish" href="{% url 'users:account' %}">{% trans "Finish" %}</a>
+            </div>
+        </form>
+    {% else %}
+        <p>{% trans "You don't have any backup codes yet." %}</p>
+        <form method="post">{% csrf_token %}{{ form }}
+            <button class="btn btn-primary" type="submit">{% trans "Generate Codes" %}</button>
+        </form>
+    {% endif %}
 
 {% endblock %}
 {% block extra_css %}
-<style>
-@media print {
-    .header, .admin-bar, .actions, .hide-print {
-        display: none;
-    }
-}
-</style>
+    <style>
+        @media print {
+            .header, .admin-bar, .actions, .hide-print {
+                display: none;
+            }
+        }
+    </style>
 {% endblock %}
 
 {% block extra_js %}
-<script src="{% static 'js/clipboard.min.js' %}"></script>
-<script>
+    <script src="{% static 'js/clipboard.min.js' %}"></script>
+    <script>
 
     {# Select the codes when clicked #}
-    $('#list-backup-tokens').on("click", function (e){
-        $(this).select();
-    });
+        $('#list-backup-tokens').on("click", function (e){
+            $(this).select();
+        });
 
     {# Setup print button #}
-    $(".btn-print").on("click", function(e){
-        e.preventDefault();
-        window.print();
-    });
-
-    $(".btn-finish").on("click", function(e){
-        if(!$("#action_agree").is(":checked")) {
-            $(".error-action-agree").show();
+        $(".btn-print").on("click", function(e){
             e.preventDefault();
-        } else {
-            $(".error-action-agree").hide();
-            window.location.href = $(this).attr('href');
-        }
-    });
+            window.print();
+        });
+
+        $(".btn-finish").on("click", function(e){
+            if(!$("#action_agree").is(":checked")) {
+                $(".error-action-agree").show();
+                e.preventDefault();
+            } else {
+                $(".error-action-agree").hide();
+                window.location.href = $(this).attr('href');
+            }
+        });
 
 
     {# Instantiate clipboard by passing a HTML element, uses clipboard.js #}
-    var clipboardBtn = document.querySelector('.btn-copy-to-clipboard');
-    var clipboard = new ClipboardJS(clipboardBtn);
-    var tooltip = tippy(clipboardBtn, {
-        trigger: 'manual',
-        animation: 'fade'
-    });
+        var clipboardBtn = document.querySelector('.btn-copy-to-clipboard');
+        var clipboard = new ClipboardJS(clipboardBtn);
+        var tooltip = tippy(clipboardBtn, {
+            trigger: 'manual',
+            animation: 'fade'
+        });
 
-    clipboard.on('success', function (e) {
-        tooltip.show();
-    });
-    clipboard.on('error', function (e) {
-        tooltip.setContent("Use ctrl/cmd + C to copy the backup codes.")
-        tooltip.show();
-    });
-</script>
+        clipboard.on('success', function (e) {
+            tooltip.show();
+        });
+        clipboard.on('error', function (e) {
+            tooltip.setContent("Use ctrl/cmd + C to copy the backup codes.")
+            tooltip.show();
+        });
+    </script>
 {% endblock %}
diff --git a/hypha/apply/users/templates/two_factor/core/backup_tokens_password.html b/hypha/apply/users/templates/two_factor/core/backup_tokens_password.html
index ab2782383577ec36b06faaf9df033deb29047579..ea77eea07533c513e2e66efe5c067270d706f7b5 100644
--- a/hypha/apply/users/templates/two_factor/core/backup_tokens_password.html
+++ b/hypha/apply/users/templates/two_factor/core/backup_tokens_password.html
@@ -2,42 +2,43 @@
 {% load i18n %}
 
 {% block content %}
-  <p><a href="{% url 'users:account' %}" class="link link--bold">{% trans "Back to Account" %}</a></p>
-  <h1>{% block title %}{% trans "Backup Codes" %}{% endblock %}</h1>
-  <p>{% blocktrans trimmed %}If you loose your smartphone, or your Authenticator app is not available,
-      you can use a backup code along with your username and password to login until you recover your smartphone.
-      Each backup code can be used only once.
-      </br>
-      </br>
-      These codes should be kept in a secure, private place (print them or store them in your password manager)
-      for when you need them. When they are used up, you can generate a new set of backup codes.{% endblocktrans %}</p>
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
-    <form class="form" action="" method="POST" novalidate>
-        {% if form.non_field_errors %}
-            <ul class="errorlist">
-                {% for error in form.non_field_errors %}
-                    <li>{{ error }}</li>
-                {% endfor %}
-            </ul>
-        {% endif %}
+    <h1>{% block title %}{% trans "Backup Codes" %}{% endblock %}</h1>
+    <p>{% blocktrans trimmed %}If you loose your smartphone, or your Authenticator app is not available,
+        you can use a backup code along with your username and password to login until you recover your smartphone.
+        Each backup code can be used only once.
+        </br>
+        </br>
+        These codes should be kept in a secure, private place (print them or store them in your password manager)
+        for when you need them. When they are used up, you can generate a new set of backup codes.{% endblocktrans %}</p>
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
+        <form class="form" action="" method="POST" novalidate>
+            {% if form.non_field_errors %}
+                <ul class="errorlist">
+                    {% for error in form.non_field_errors %}
+                        <li>{{ error }}</li>
+                    {% endfor %}
+                </ul>
+            {% endif %}
 
-        {% if form.errors %}
-            <ul class="errorlist">
-                {% blocktrans trimmed count counter=form.errors.items|length %}
-                <li>Please correct the error below.</li>
-                {% plural %}
-                <li>Please correct the errors below.</li>
-                {% endblocktrans %}
-            </ul>
-        {% endif %}
+            {% if form.errors %}
+                <ul class="errorlist">
+                    {% blocktrans trimmed count counter=form.errors.items|length %}
+                        <li>Please correct the error below.</li>
+                    {% plural %}
+                        <li>Please correct the errors below.</li>
+                    {% endblocktrans %}
+                </ul>
+            {% endif %}
 
-        {% csrf_token %}
+            {% csrf_token %}
 
-        {% for field in form %}
-            {% include "forms/includes/field.html" %}
-        {% endfor %}
+            {% for field in form %}
+                {% include "forms/includes/field.html" %}
+            {% endfor %}
 
-        <button class="button button--primary" type="submit">{% trans 'Next' %}</button>
-    </form>
-</div>
+            <div class="form__group">
+                <button class="button button--primary" type="submit">{% trans 'Next' %}</button>
+            </div>
+        </form>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/two_factor/core/setup.html b/hypha/apply/users/templates/two_factor/core/setup.html
index da59f32b534c9817682076b1e623dde2e7548ed5..8d9066ab8774f8388d62bba6040cb47dc591c24a 100644
--- a/hypha/apply/users/templates/two_factor/core/setup.html
+++ b/hypha/apply/users/templates/two_factor/core/setup.html
@@ -2,32 +2,27 @@
 {% load i18n %}
 
 {% block content %}
-    {% if cancel_url %}
-    <p><a href="{% url 'users:account' %}" class="link link--bold">{% trans "Back to Account" %}</a></p>
-    {% endif %}
-
-  <h1>{% block title %}{% trans "Two-Factor Authentication (2FA)" %}{% endblock %}</h1>
   {% if wizard.steps.current == 'welcome' %}
-  <p>{% blocktrans trimmed %}2FA is an extra layer of security used to make sure that people trying to gain access to an
-    online account are who they say they are. We recommend using Authy or another
-    authenticator app.{% endblocktrans %}</p>
+    <p>{% blocktrans trimmed %}2FA is an extra layer of security used to make sure that people trying to gain access to an
+      online account are who they say they are. We recommend using Authy or another
+      authenticator app.{% endblocktrans %}</p>
     <p>{% blocktrans trimmed %}Please contact {{ ORG_EMAIL }} if you have technical difficulty
-    enabling 2FA.{% endblocktrans %}</p>
+      enabling 2FA.{% endblocktrans %}</p>
   {% elif wizard.steps.current == 'method' %}
     <p>{% blocktrans trimmed %}Please select which authentication method you would
-        like to use.{% endblocktrans %}</p>
+      like to use.{% endblocktrans %}</p>
   {% elif wizard.steps.current == 'generator' %}
     <p>{% blocktrans trimmed %}2FA requires a verification code to pair your smartphone with your account.
-        {% endblocktrans %}</p>
-  <p>{% blocktrans trimmed %}<strong>Step 1:</strong> Open the Authencator app on your phone and scan the QR code displayed below.
-        {% endblocktrans %}</p>
+    {% endblocktrans %}</p>
+    <p>{% blocktrans trimmed %}<strong>Step 1:</strong> Open the Authencator app on your phone and scan the QR code displayed below.
+    {% endblocktrans %}</p>
     <p><img src="{{ QR_URL }}" alt="QR Code" class="bg-white" width="200" height="200" /></p>
-    <p style="font-size: small">{% trans "Unable to scan the QR code? Try this link:" %}" <a href="{{ otpauth_url }}" title="2FA Setup URL">{{ otpauth_url }}</a></p>
+    <p style="font-size: small">{% trans "Unable to scan the QR code? Try this link:" %} <a href="{{ otpauth_url }}" title="2FA Setup URL">{{ otpauth_url }}</a></p>
     <p>{% blocktrans trimmed %}<strong>Step 2:</strong> Enter the 6-digit verification code generated by the app below.{% endblocktrans %}</p>
   {% elif wizard.steps.current == 'sms' %}
     <p>{% blocktrans trimmed %}Please enter the phone number you wish to receive the
       text messages on. This number will be validated in the next step.
-      {% endblocktrans %}</p>
+    {% endblocktrans %}</p>
   {% elif wizard.steps.current == 'call' %}
     <p>{% blocktrans trimmed %}Please enter the phone number you wish to be called on.
       This number will be validated in the next step. {% endblocktrans %}</p>
diff --git a/hypha/apply/users/templates/two_factor/core/setup_complete.html b/hypha/apply/users/templates/two_factor/core/setup_complete.html
index 7f8cd13953210a05794592a14ea32e98bf1ec1fe..973817d57fa0db4815959aba1204496546b52515 100644
--- a/hypha/apply/users/templates/two_factor/core/setup_complete.html
+++ b/hypha/apply/users/templates/two_factor/core/setup_complete.html
@@ -8,12 +8,12 @@
   <h1>{% block title %}{% trans "Two-Factor Authentication(2FA)" %}{% endblock %}</h1>
 
   <p>{% blocktrans trimmed %}Congratulations, you've successfully enabled two-factor
-      authentication.{% endblocktrans %}</p>
-    <p>{% blocktrans trimmed %}We strongly recommend you to save the backup codes.
-        To get the backup codes you can continue to Show Codes.{% endblocktrans %}</p>
+    authentication.{% endblocktrans %}</p>
+  <p>{% blocktrans trimmed %}We strongly recommend you to save the backup codes.
+    To get the backup codes you can continue to Show Codes.{% endblocktrans %}</p>
 
   {% if not phone_methods %}
-        <a href="{% url 'users:backup_tokens_password' %}" class="btn btn-link">{% trans "Show Codes" %}</a>
+    <a href="{% url 'users:backup_tokens_password' %}" class="btn btn-link">{% trans "Show Codes" %}</a>
   {% else %}
     <p>{% blocktrans trimmed %}However, it might happen that you don't have access to
       your primary token device. To enable account recovery, add a phone
@@ -21,7 +21,7 @@
 
     <p><a href="{% url 'users:backup_tokens_password' %}" class="btn btn-block">{% trans "Show Codes" %}</a></p>
     <p><a href="{% url 'two_factor:phone_create' %}"
-        class="btn btn-success">{% trans "Add Phone Number" %}</a></p>
+          class="btn btn-success">{% trans "Add Phone Number" %}</a></p>
   {% endif %}
 
 {% endblock %}
diff --git a/hypha/apply/users/templates/two_factor/core/two_factor_required.html b/hypha/apply/users/templates/two_factor/core/two_factor_required.html
index 6bc76007338ad1e5427a8d746e1bd8b7cb70fd1e..ad0f7254cfd5dfae947dcfff4154a734a7a09605 100644
--- a/hypha/apply/users/templates/two_factor/core/two_factor_required.html
+++ b/hypha/apply/users/templates/two_factor/core/two_factor_required.html
@@ -9,7 +9,7 @@
   <p>{% blocktrans trimmed %}The page you requested, enforces users to verify using
     two-factor authentication for security reasons. You need to set up these
     security features in order to access this page. Without setting up these security features,
-      You can only access the account(Profile section) or can logout from the system.{% endblocktrans %}</p>
+    You can only access the account(Profile section) or can logout from the system.{% endblocktrans %}</p>
 
   <p>{% blocktrans trimmed %}Two-factor authentication is not already set up for your
     account. Set up two-factor authentication for enhanced account
@@ -17,6 +17,6 @@
 
   <p>
     <a href="{% url 'two_factor:setup' %}" class="btn btn-primary">
-    {% trans "Set up Two-Factor Authentication (2FA)" %}</a>
+      {% trans "Set up Two-Factor Authentication (2FA)" %}</a>
   </p>
 {% endblock %}
diff --git a/hypha/apply/users/templates/two_factor/profile/disable.html b/hypha/apply/users/templates/two_factor/profile/disable.html
index 44ca21a1e9dc5840520ff92a816c5ebe6b3d9fe5..683c8c3038ab994b56ae598d088a9e48ca79c191 100644
--- a/hypha/apply/users/templates/two_factor/profile/disable.html
+++ b/hypha/apply/users/templates/two_factor/profile/disable.html
@@ -2,38 +2,38 @@
 {% load i18n %}
 
 {% block content %}
-  <p><a href="{% url 'users:account'%}"
-       class="btn btn-link">{% trans "Back to account" %}</a></p>
-  <h1>{% block title %}{% trans "Disable Two-factor Authentication" %}{% endblock %}</h1>
-  <p>{% blocktrans trimmed %}Disabling Two-factor authentication weakens your account security.
-    We recommend reenabling it when you can.{% endblocktrans %}</p>
-  <div class="wrapper wrapper--small wrapper--inner-space-medium">
-      <form class="form" action="" method="POST" novalidate>
-          {% if form.non_field_errors %}
-              <ul class="errorlist">
-                  {% for error in form.non_field_errors %}
-                      <li>{{ error }}</li>
-                  {% endfor %}
-              </ul>
-          {% endif %}
+    <p><a href="{% url 'users:account'%}"
+          class="btn btn-link">{% trans "Back to account" %}</a></p>
+    <h1>{% block title %}{% trans "Disable Two-factor Authentication" %}{% endblock %}</h1>
+    <p>{% blocktrans trimmed %}Disabling Two-factor authentication weakens your account security.
+        We recommend reenabling it when you can.{% endblocktrans %}</p>
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
+        <form class="form" action="" method="POST" novalidate>
+            {% if form.non_field_errors %}
+                <ul class="errorlist">
+                    {% for error in form.non_field_errors %}
+                        <li>{{ error }}</li>
+                    {% endfor %}
+                </ul>
+            {% endif %}
 
-          {% if form.errors %}
-              <ul class="errorlist">
-                  {% blocktrans trimmed count counter=form.errors.items|length %}
-                  <li>Please correct the error below.</li>
-                  {% plural %}
-                  <li>Please correct the errors below.</li>
-                  {% endblocktrans %}
-              </ul>
-          {% endif %}
+            {% if form.errors %}
+                <ul class="errorlist">
+                    {% blocktrans trimmed count counter=form.errors.items|length %}
+                        <li>Please correct the error below.</li>
+                    {% plural %}
+                        <li>Please correct the errors below.</li>
+                    {% endblocktrans %}
+                </ul>
+            {% endif %}
 
-          {% csrf_token %}
+            {% csrf_token %}
 
-          {% for field in form %}
-              {% include "forms/includes/field.html" %}
-          {% endfor %}
+            {% for field in form %}
+                {% include "forms/includes/field.html" %}
+            {% endfor %}
 
-          <button class="btn btn-danger" type="submit">{% trans 'Disable Two-factor Authentication' %}</button>
-      </form>
-  </div>
+            <button class="btn btn-danger" type="submit">{% trans 'Disable Two-factor Authentication' %}</button>
+        </form>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/two_factor/profile/profile.html b/hypha/apply/users/templates/two_factor/profile/profile.html
index fc7177d1cb56b1d8a451688ec3a9af34ba6155f9..b5e73b325406dcb7aea85a353a9155bfed54a5a6 100644
--- a/hypha/apply/users/templates/two_factor/profile/profile.html
+++ b/hypha/apply/users/templates/two_factor/profile/profile.html
@@ -35,7 +35,7 @@
         {% endfor %}
       </ul>
       <p><a href="{% url 'two_factor:phone_create' %}"
-        class="btn btn-info">{% trans "Add Phone Number" %}</a></p>
+            class="btn btn-info">{% trans "Add Phone Number" %}</a></p>
     {% endif %}
 
     <h2>{% trans "Backup Tokens" %}</h2>
diff --git a/hypha/apply/users/templates/users/account.html b/hypha/apply/users/templates/users/account.html
index 62940b86a0b3fd133ca1365fae0c02131ef0118e..12346f36c0d47ba705d27d8c49c788f36bed56c3 100644
--- a/hypha/apply/users/templates/users/account.html
+++ b/hypha/apply/users/templates/users/account.html
@@ -4,62 +4,65 @@
 {% block title %}{% trans "Account" %}{% endblock %}
 
 {% block content %}
-<div class="admin-bar" xmlns="http://www.w3.org/1999/html">
-    <div class="admin-bar__inner admin-bar__inner--with-button">
-        <h3 class="admin-bar__heading">{% trans "Welcome" %} {{ user }}</h3>
+    {% adminbar %}
+        {% slot header %}{% trans "Welcome" %} {{ user }}{% endslot %}
+        {% slot sub_heading %}{% trans "Manage your account details and security." %}{% endslot %}
+
         <a href="{% url 'dashboard:dashboard' %}" class="button button--primary button--arrow-pixels-white" hx-boost='true'>
             {% trans "Go to my dashboard" %}
             <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
         </a>
-    </div>
-</div>
+    {% endadminbar %}
 
-<div class="profile">
-    <div class="profile__column">
-        <h3>{% trans "Profile" %}</h3>
-        <form action="" method="post" class="form">
-            {% csrf_token %}
-            {% for field in form %}
-                {% include "forms/includes/field.html" %}
-            {% endfor %}
-            <button class="button button--primary" type="submit">{% trans "Update Profile" %}</button>
-        </form>
-    </div>
-
-    {% if show_change_password and user.has_usable_password and not backends.associated %}
-        <br>
-        <hr>
+    <div class="profile">
         <div class="profile__column">
-            <h3>{% trans "Account Security" %}</h3>
-            <h4>{% trans "Password" %}</h4>
-            <p><a class="button button--primary" href="{% url 'users:password_change' %}">{% trans "Update password" %}</a></p>
-
-            <h4>{% trans "Two-Factor Authentication (2FA)" %}</h4>
-            {% if default_device %}
-                <div>
-                    <p><a class="button button--primary" href="{% url 'users:backup_tokens_password' %}">{% trans "Backup codes" %}</a></p>
-                    <p><a class="button button--primary" href="{% url 'two_factor:disable' %}">{% trans "Disable 2FA" %}</a></p>
-                </div>
-            {% else %}
-                <p><a class="button button--primary" href="{% url 'two_factor:setup' %}">{% trans "Enable 2FA" %}</a></p>
-            {% endif %}
-        </div>
-    {% endif %}
-
-
-    <div class="profile__column">
-        {% if swappable_form %}
-            <h3>{% trans "Become" %}:</h3>
-            <form action="{% url 'users:become' %}" method="post" class="form">
-                {{ swappable_form.media }}
+            <h2 class="text-2xl">{% trans "Profile" %}</h2>
+            <form action="" method="post" class="form">
                 {% csrf_token %}
-                {% for field in swappable_form %}
+                {% for field in form %}
                     {% include "forms/includes/field.html" %}
                 {% endfor %}
-                <button class="button button--primary" type="submit">{% trans "Become" %}</button>
+                <div class="form__group">
+                    <button class="button button--primary" type="submit">{% trans "Update Profile" %}</button>
+                </div>
             </form>
+        </div>
+
+        {% if show_change_password and user.has_usable_password and not backends.associated %}
+            <div class="profile__column">
+                <h2 class="text-2xl">{% trans "Account Security" %}</h2>
+                <h3 class="text-base">{% trans "Password" %}</h3>
+                <p><a class="button button--primary" href="{% url 'users:password_change' %}">{% trans "Update password" %}</a></p>
+
+                <h4 class="text-base mt-8">{% trans "Two-Factor Authentication (2FA)" %}</h4>
+                {% if default_device %}
+                    <div>
+                        <p><a class="button button--primary" href="{% url 'users:backup_tokens_password' %}">{% trans "Backup codes" %}</a></p>
+                        <p><a class="button button--primary button--warning" href="{% url 'two_factor:disable' %}">{% trans "Disable 2FA" %}</a></p>
+                    </div>
+                {% else %}
+                    <p><a class="button button--primary" href="{% url 'two_factor:setup' %}">{% trans "Enable 2FA" %}</a></p>
+                {% endif %}
+            </div>
         {% endif %}
 
+
+        {% if swappable_form %}
+            <div class="profile__column">
+                {% if swappable_form %}
+                    <h2 class="text-2xl">{% trans "Become" %}:</h2>
+                    <form action="{% url 'users:become' %}" method="post" class="form">
+                        {{ swappable_form.media }}
+                        {% csrf_token %}
+                        {% for field in swappable_form %}
+                            {% include "forms/includes/field.html" %}
+                        {% endfor %}
+                        <div class="form__group">
+                            <button class="button button--primary" type="submit">{% trans "Become" %}</button>
+                        </div>
+                    </form>
+                {% endif %}
+
         {# Remove the comment block tags below when such need arises. e.g. adding new providers #}
         {% comment %}
         {% can_use_oauth as show_oauth_link %}
@@ -67,6 +70,7 @@
             <a href="{% url 'users:oauth' %}">{% trans "Manage OAuth" %}</a>
         {% endif %}
         {% endcomment %}
+            </div>
+        {% endif %}
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/activation/invalid.html b/hypha/apply/users/templates/users/activation/invalid.html
index 0cea4902be4d0709b21ece6a51a099231e7637cb..b6dc037fd6cbd9c33a8cdd5522b7cd24020eff66 100644
--- a/hypha/apply/users/templates/users/activation/invalid.html
+++ b/hypha/apply/users/templates/users/activation/invalid.html
@@ -5,14 +5,14 @@
 {% block page_title %}{% trans "Invalid activation URL" %}{% endblock %}
 
 {% block content %}
-{% url 'users:password_reset' as password_reset %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-    <p><strong>{% trans "Two possible reasons:" %}</strong></p>
-    <ul>
-        <li>{% trans "The activation link has expired." %}</li>
-        <li>{% trans "The account has already been activated." %}</li>
-    </ul>
+    {% url 'users:password_reset' as password_reset %}
+    <div class="wrapper wrapper--small wrapper--bottom-space">
+        <p><strong>{% trans "Two possible reasons:" %}</strong></p>
+        <ul>
+            <li>{% trans "The activation link has expired." %}</li>
+            <li>{% trans "The account has already been activated." %}</li>
+        </ul>
 
-    <p>{% blocktrans %}First try to <a href="{{ password_reset }}">reset your password</a>. If that fails please contact {{ ORG_SHORT_NAME }} at{% endblocktrans %} <a href="mailto:{{ ORG_EMAIL }}">{{ ORG_EMAIL }}</a></p>
-</div>
+        <p>{% blocktrans %}First try to <a href="{{ password_reset }}">reset your password</a>. If that fails please contact {{ ORG_SHORT_NAME }} at{% endblocktrans %} <a href="mailto:{{ ORG_EMAIL }}">{{ ORG_EMAIL }}</a></p>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/change_password.html b/hypha/apply/users/templates/users/change_password.html
index b671f6e256111aa50721550f002f0433c1f13ad2..aefff426f70fc27f1261c9413356060108d1c8fd 100644
--- a/hypha/apply/users/templates/users/change_password.html
+++ b/hypha/apply/users/templates/users/change_password.html
@@ -1,37 +1,50 @@
-{% extends 'base.html' %}
+{% extends "base-apply.html" %}
 {% load i18n %}
-{% block header_modifier %}header--light-bg{% endblock %}
-{% block page_title %}{% trans "Set a password" %}{% endblock %}
-{% block title %}{% trans "Set a password" %}{% endblock %}
+{% block title %}{% trans "Update password" %}{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
-    <form class="form" action="" method="POST" novalidate>
-        {% if form.non_field_errors %}
-            <ul class="errorlist">
-                {% for error in form.non_field_errors %}
-                    <li>{{ error }}</li>
-                {% endfor %}
-            </ul>
-        {% endif %}
 
-        {% if form.errors %}
-            <ul class="errorlist">
-                {% blocktrans trimmed count counter=form.errors.items|length %}
-                <li>Please correct the error below.</li>
-                {% plural %}
-                <li>Please correct the errors below.</li>
-                {% endblocktrans %}
-            </ul>
-        {% endif %}
+    {% adminbar %}
+        {% slot header %}{% trans "Change Password" %}{% endslot %}
+        {% slot back %}
+            <a class="simplified__submissions-link" href="{% url 'users:account' %}">
+                {% trans "Back to account" %}
+            </a>
+        {% endslot %}
+    {% endadminbar %}
 
-        {% csrf_token %}
+    <div class="wrapper mt-6 max-w-2xl">
+        <form class="form" action="" method="POST" novalidate>
+            {% if redirect_url %}
+                <input type="hidden" value="{{ redirect_url }}" name="next">
+            {% endif %}
+            {% if form.non_field_errors %}
+                <ul class="errorlist">
+                    {% for error in form.non_field_errors %}
+                        <li>{{ error }}</li>
+                    {% endfor %}
+                </ul>
+            {% endif %}
 
-        {% for field in form %}
-            {% include "forms/includes/field.html" %}
-        {% endfor %}
+            {% if form.errors %}
+                <ul class="errorlist">
+                    {% blocktrans trimmed count counter=form.errors.items|length %}
+                        <li>Please correct the error below.</li>
+                    {% plural %}
+                        <li>Please correct the errors below.</li>
+                    {% endblocktrans %}
+                </ul>
+            {% endif %}
 
-        <button class="button button--primary" type="submit">{% trans 'Reset password' %}</button>
-    </form>
-</div>
+            {% csrf_token %}
+
+            {% for field in form %}
+                {% include "forms/includes/field.html" %}
+            {% endfor %}
+
+            <div class="form__group">
+                <button class="button button--primary" type="submit">{% trans 'Submit' %}</button>
+            </div>
+        </form>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/email_change/confirm_password.html b/hypha/apply/users/templates/users/email_change/confirm_password.html
index b2527aaa91a93ca17ccebbcee2818410a7695739..5b5b638acbcacf8ac9383593c66d99c898b7c8a3 100644
--- a/hypha/apply/users/templates/users/email_change/confirm_password.html
+++ b/hypha/apply/users/templates/users/email_change/confirm_password.html
@@ -6,33 +6,35 @@
 
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
-    <form class="form" action="" method="POST" novalidate>
-        {% if form.non_field_errors %}
-            <ul class="errorlist">
-                {% for error in form.non_field_errors %}
-                    <li>{{ error }}</li>
-                {% endfor %}
-            </ul>
-        {% endif %}
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
+        <form class="form" action="" method="POST" novalidate>
+            {% if form.non_field_errors %}
+                <ul class="errorlist">
+                    {% for error in form.non_field_errors %}
+                        <li>{{ error }}</li>
+                    {% endfor %}
+                </ul>
+            {% endif %}
 
-        {% if form.errors %}
-            <ul class="errorlist">
-                {% blocktrans trimmed count counter=form.errors.items|length %}
-                <li>Please correct the error below.</li>
-                {% plural %}
-                <li>Please correct the errors below.</li>
-                {% endblocktrans %}
-            </ul>
-        {% endif %}
+            {% if form.errors %}
+                <ul class="errorlist">
+                    {% blocktrans trimmed count counter=form.errors.items|length %}
+                        <li>Please correct the error below.</li>
+                    {% plural %}
+                        <li>Please correct the errors below.</li>
+                    {% endblocktrans %}
+                </ul>
+            {% endif %}
 
-        {% csrf_token %}
+            {% csrf_token %}
 
-        {% for field in form %}
-            {% include "forms/includes/field.html" %}
-        {% endfor %}
+            {% for field in form %}
+                {% include "forms/includes/field.html" %}
+            {% endfor %}
 
-        <button class="button button--primary" type="submit">{% trans 'Submit' %}</button>
-    </form>
-</div>
+            <div class="form__group">
+                <button class="button button--primary" type="submit">{% trans 'Submit' %}</button>
+            </div>
+        </form>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/email_change/done.html b/hypha/apply/users/templates/users/email_change/done.html
index 2fa6815e94f84ce1e7d8d33b2e43c61972b2ac8a..448999f44acd2263458bddf4bd395cc18d72a808 100644
--- a/hypha/apply/users/templates/users/email_change/done.html
+++ b/hypha/apply/users/templates/users/email_change/done.html
@@ -5,7 +5,7 @@
 {% block title %}{% trans "Verify Email" %}{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-    <p>{% trans "To start using the new email, please click on the confirmation link that has been sent to you on your new email." %}</p>
-</div>
+    <div class="wrapper wrapper--small wrapper--bottom-space">
+        <p>{% trans "To start using the new email, please click on the confirmation link that has been sent to you on your new email." %}</p>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/email_change/invalid_link.html b/hypha/apply/users/templates/users/email_change/invalid_link.html
index a0a8683dae055513f4e0b4313dd4cebf8c14816a..fa11dccc65a51fc48a3bf9b1d9e2ffe228bd5ff0 100644
--- a/hypha/apply/users/templates/users/email_change/invalid_link.html
+++ b/hypha/apply/users/templates/users/email_change/invalid_link.html
@@ -5,12 +5,12 @@
 {% block page_title %}{% trans "Invalid Confirmation URL" %}{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-    <p><strong>{% trans "Possible reason:" %}</strong></p>
-    <ul>
-        <li>{% trans "The confirmation link has expired." %}</li>
-    </ul>
+    <div class="wrapper wrapper--small wrapper--bottom-space">
+        <p><strong>{% trans "Possible reason:" %}</strong></p>
+        <ul>
+            <li>{% trans "The confirmation link has expired." %}</li>
+        </ul>
 
-    <p>{% blocktrans %}Try again to change email from accounts page. If that fails please contact {{ ORG_SHORT_NAME }} at{% endblocktrans %} <a href="mailto:{{ ORG_EMAIL }}">{{ ORG_EMAIL }}</a></p>
-</div>
+        <p>{% blocktrans %}Try again to change email from accounts page. If that fails please contact {{ ORG_SHORT_NAME }} at{% endblocktrans %} <a href="mailto:{{ ORG_EMAIL }}">{{ ORG_EMAIL }}</a></p>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/login.html b/hypha/apply/users/templates/users/login.html
index 4e20c66954807907813f826a255a832568af8801..ab5154f588e5752417c054591d395864625eb119 100644
--- a/hypha/apply/users/templates/users/login.html
+++ b/hypha/apply/users/templates/users/login.html
@@ -1,84 +1,115 @@
-{% extends 'base.html' %}
+{% extends "base-apply.html" %}
 {% load i18n wagtailcore_tags %}
 
-{% block header_modifier %}header--light-bg{% endblock %}
-{% block page_title %}{% trans "Login" %}{% endblock %}
 {% block title %}{% trans "Login" %}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
 
 {% block content %}
-  <div class="wrapper wrapper--small">
-    {% if wizard.steps.current == 'token' %}
-        {% if device.method == 'call' %}
-            <p>{% blocktrans trimmed %}We are calling your phone right now, please enter the
-                digits you hear.{% endblocktrans %}</p>
-        {% elif device.method == 'sms' %}
-            <p>{% blocktrans trimmed %}We sent you a text message, please enter the tokens we
-                sent.{% endblocktrans %}</p>
-        {% else %}
-            <p>{% blocktrans trimmed %}Please enter the 6-digit verification code generated by your Authenticator App.{% endblocktrans %}</p>
-        {% endif %}
-    {% elif wizard.steps.current == 'backup' %}
-        <p>{% blocktrans trimmed %}Please enter one of the backup codes to login to your account.
-            Those codes were generated for you during 2FA setup to print or keep safe in a password manager.{% endblocktrans %}</p>
-    {% endif %}
-
-    <form class="form form--with-p-tags form--user-login" method="post">
-      {% csrf_token %}
-      {{ wizard.management_form }}
-
-      {% if wizard.steps.current == 'auth' %}
-        {% for field in form %}
-            {% include "forms/includes/field.html" %}
-            {% if field.name == 'password' and not is_public_site %}
-                <div class="password-reset"><a class="link" href="{% url 'users:password_reset' %}">{% trans "Forgot your password?" %}</a></div>
-            {% endif %}
-        {% endfor %}
-        {{ form.extra_text|richtext }}
-        <button class="link link--button link--button-wide link--button-secondary" type="submit">{% trans "Login" %}</button>
-      {% else %}
-        {{ wizard.form }}
-
-        {# hidden submit button to enable [enter] key #}
-        <div style="margin-left: -9999px"><input type="submit" value=""/></div>
-
-        {% if other_devices %}
-            <p>{% trans "Or, alternatively, use one of your backup phones:" %}</p>
-            <p>
-                {% for other in other_devices %}
-                <button name="challenge_device" value="{{ other.persistent_id }}"
-                                class="btn btn-default btn-block" type="submit">
-                    {{ other.generate_challenge_button_title }}
-                </button>
-            {% endfor %}</p>
-        {% endif %}
-        {% if backup_tokens %}
-            <p>{% trans "As a last resort, you can use a backup codes:" %}
-                <button name="wizard_goto_step" type="submit" value="backup"
-                                class="link link--button link--button-white link--button-white--narrow">{% trans "Use Backup Code" %}</button>
-            </p>
-        {% endif %}
-
-        <div class="wrapper wrapper--inner-space-large">
-            {% include "two_factor/_wizard_actions.html" %}
-        </div>
-      {% endif %}
-    </form>
-
-    {% if wizard.steps.current == 'auth' and GOOGLE_OAUTH2 %}
-        <div class="wrapper wrapper--bottom-space">
-          <a class="link link--button link--button-tertiary" href="{% url "social:begin" "google-oauth2" %}{% if next %}?next={{ next }}{% endif %}">{% blocktrans %}Log in with your {{ ORG_SHORT_NAME }} email{% endblocktrans %}</a>
-        </div>
-    {% endif %}
+    <div class="w-full grid bg-white mt-5 md:py-4">
+
+        <section>
+            <div class="px-4 pt-4">
+                {% if wizard.steps.current == 'token' %}
+                    {% if device.method == 'call' %}
+                        <p>{% blocktrans trimmed %}We are calling your phone right now, please enter the
+                            digits you hear.{% endblocktrans %}</p>
+                    {% elif device.method == 'sms' %}
+                        <p>{% blocktrans trimmed %}We sent you a text message, please enter the tokens we
+                            sent.{% endblocktrans %}</p>
+                    {% else %}
+                        <h2 class="text-2xl">Two Factor Verification</h2>
+                        <p>{% blocktrans trimmed %}Please enter the 6-digit verification code generated by your Authenticator App.{% endblocktrans %}</p>
+                    {% endif %}
+                {% elif wizard.steps.current == 'backup' %}
+                    <p>{% blocktrans trimmed %}Please enter one of the backup codes to login to your account.
+                        Those codes were generated for you during 2FA setup to print or keep safe in a password manager.{% endblocktrans %}</p>
+                {% endif %}
+
+                <form class="form form--user-login" method="post">
+                    {% csrf_token %}
+                    {{ wizard.management_form }}
+
+                    {% if wizard.steps.current == 'auth' %}
+
+                        <h2 class="text-2xl">Log in to {{ ORG_SHORT_NAME }}</h2>
+                        {% for field in form %}
+                            <div class="form__group">
+                                {% include "forms/includes/field.html" %}
+                            </div>
+                        {% endfor %}
+                        {% if settings.users.AuthSettings.extra_text %}
+                            {{ settings.users.AuthSettings.extra_text|richtext}}
+                        {% endif %}
+
+                        <div class="form__group">
+                            <button class="link link--button link--button-secondary" type="submit">{% trans "Log in" %}</button>
+                        </div>
+
+                        {% if GOOGLE_OAUTH2 %}
+                            <div class="flex items-center justify-start relative">
+                                <hr class="inline w-32 h-px my-6 bg-gray-300 border-0">
+                                <span class="px-3 text-gray-400 font-medium">or</span>
+                                <hr class="inline w-32 h-px my-6 bg-gray-300 border-0">
+                            </div>
+
+                            <div class="">
+                                <a class="link link--button link--button-tertiary" href="{% url "social:begin" "google-oauth2" %}{% if next %}?next={{ next }}{% endif %}">{% blocktrans %}Log in with your {{ ORG_SHORT_NAME }} email{% endblocktrans %}</a>
+                            </div>
+                        {% endif %}
+
+                        <div class="inline-flex gap-8 w-full mt-4">
+                            {% if ENABLE_REGISTRATION_WITHOUT_APPLICATION %}
+                                <a href="{% url 'users_public:register' %}{% if redirect_url %}?next={{ redirect_url }}{% endif %}" hx-boost="true"> {% trans "Create account" %}</a>
+                            {% endif %}
+                            <a class="link" href="{% url 'users:password_reset' %}{% if redirect_url %}?next={{ redirect_url }}{% endif %}" hx-boost="true">{% trans "Forgot your password?" %}</a>
+                        </div>
+                    {% else %}
+
+                        <div class="form__group">
+                            {{ wizard.form }}
+                        </div>
+
+                    {# hidden submit button to enable [enter] key #}
+                        <div class="sr-only"><input type="submit" value=""/></div>
+
+                        {% if other_devices %}
+                            <p>{% trans "Or, alternatively, use one of your backup phones:" %}</p>
+                            <p>
+                                {% for other in other_devices %}
+                                    <button name="challenge_device" value="{{ other.persistent_id }}"
+                                            class="btn btn-default btn-block" type="submit">
+                                        {{ other.generate_challenge_button_title }}
+                                    </button>
+                                {% endfor %}</p>
+                        {% endif %}
+
+                        <div class="wrapper">
+                            {% include "two_factor/_wizard_actions.html" %}
+                        </div>
+
+                        {% if backup_tokens %}
+                            <p>{% trans "As a last resort, you can use a backup codes:" %}
+                                <button name="wizard_goto_step" type="submit" value="backup"
+                                        class="link link--button link--button-tertiary">{% trans "Use Backup Code" %}</button>
+                            </p>
+                        {% endif %}
+                    {% endif %}
+                </form>
+            </div>
+        </section>
+    </div>
+
     <script>
     {# Fix copy of dynamic fields label #}
-    var labelOtpToken = document.querySelector("label[for=id_token-otp_token]");
-    if(labelOtpToken){
-        labelOtpToken.textContent = "{% trans 'Verification Code' %}: ";
-    }
-    var labelBackupOTPToken = document.querySelector("label[for=id_backup-otp_token]");
-    if(labelBackupOTPToken){
-        labelBackupOTPToken.textContent = "{% trans 'Backup Code' %}: ";
-    }
+        var labelOtpToken = document.querySelector("label[for=id_token-otp_token]");
+        if(labelOtpToken){
+            labelOtpToken.textContent = "{% trans 'Verification Code' %}: ";
+        }
+        var labelBackupOTPToken = document.querySelector("label[for=id_backup-otp_token]");
+        if(labelBackupOTPToken){
+            labelBackupOTPToken.textContent = "{% trans 'Backup Code' %}: ";
+        }
     </script>
-  </div>
+
+
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/oauth.html b/hypha/apply/users/templates/users/oauth.html
index c3fcd7865fa3a611ac48b2e3759c3f97992360d2..1ba0af818ec16192b4578256dc6aae5daad88a0f 100644
--- a/hypha/apply/users/templates/users/oauth.html
+++ b/hypha/apply/users/templates/users/oauth.html
@@ -4,38 +4,38 @@
 {% block title %}OAuth{% endblock %}
 
 {% block content %}
-<div class="social">
-    {% if backends.associated %}
-        <h3>{% trans "Providers" %}</h3>
-        <ul>
-        {% for association in backends.associated %}
-            <li>
-                {% if user.has_usable_password %}
-                    <form id="{{ association.provider|backend_name }}-disconnect" class="disconnect-form col-md-2" action="{% url 'social:disconnect_individual' backend=association.provider association_id=association.id %}?next={% url "users:account" %}"
-                        method="post">
-                        <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
-                        <button class="btn btn-danger" name="{{ association.provider|backend_class }}">
-                            {% trans "Disconnect" %} {{ association.provider|backend_name }}
-                        </button>
-                    </form>
-                {% else %}
-                    {{ association.provider|backend_name }}
-                {% endif %}
-            </li>
-        {% endfor %}
-        </ul>
-    {% endif %}
-    {% if backends.not_associated %}
-        <h3>{% trans "Available providers" %}</h3>
-        <ul>
-        {% for backend in backends.not_associated %}
-            <li>
-                <a id="{{ name }}-button" class="col-md-2 btn btn-default" name="{{ backend }}" href="{% url 'social:begin' backend=backend %}">
-                    {{ backend|backend_name }}
-                </a>
-            </li>
-        {% endfor %}
-        </ul>
-    {% endif %}
-</div>
+    <div class="social">
+        {% if backends.associated %}
+            <h3>{% trans "Providers" %}</h3>
+            <ul>
+                {% for association in backends.associated %}
+                    <li>
+                        {% if user.has_usable_password %}
+                            <form id="{{ association.provider|backend_name }}-disconnect" class="disconnect-form col-md-2" action="{% url 'social:disconnect_individual' backend=association.provider association_id=association.id %}?next={% url "users:account" %}"
+                                  method="post">
+                                <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
+                                <button class="btn btn-danger" name="{{ association.provider|backend_class }}">
+                                    {% trans "Disconnect" %} {{ association.provider|backend_name }}
+                                </button>
+                            </form>
+                        {% else %}
+                            {{ association.provider|backend_name }}
+                        {% endif %}
+                    </li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+        {% if backends.not_associated %}
+            <h3>{% trans "Available providers" %}</h3>
+            <ul>
+                {% for backend in backends.not_associated %}
+                    <li>
+                        <a id="{{ name }}-button" class="col-md-2 btn btn-default" name="{{ backend }}" href="{% url 'social:begin' backend=backend %}">
+                            {{ backend|backend_name }}
+                        </a>
+                    </li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/password_reset/complete.html b/hypha/apply/users/templates/users/password_reset/complete.html
index b826a0ef92bb1e4d6a72622450685fe7c570429b..79c075a5f4cd65a2e32fd384e06c96cf15b037f7 100644
--- a/hypha/apply/users/templates/users/password_reset/complete.html
+++ b/hypha/apply/users/templates/users/password_reset/complete.html
@@ -1,13 +1,16 @@
-{% extends "base.html" %}
+{% extends "base-apply.html" %}
 {% load i18n %}
-
 {% block title %}{% trans "Reset password" %}{% endblock %}
-{% block page_title %}{% trans "Password change successful" %}{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-    <p>
-        <a href="{% url 'users_public:login' %}">{% trans "Log in" %}</a>
-    </p>
-</div>
+
+    {% adminbar %}
+        {% slot header %}{% trans "Password change successful" %}{% endslot %}
+    {% endadminbar %}
+
+    <div class="wrapper mt-6 max-w-2xl">
+        <p>
+            <a href="{% url 'users_public:login' %}">{% trans "Log in" %}</a>
+        </p>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/password_reset/confirm.html b/hypha/apply/users/templates/users/password_reset/confirm.html
index 076197a8d873e36ca4b5dac3885c848caa403e39..cfe71e554fa44d9219a6e4322e79b2e074058515 100644
--- a/hypha/apply/users/templates/users/password_reset/confirm.html
+++ b/hypha/apply/users/templates/users/password_reset/confirm.html
@@ -1,40 +1,50 @@
-{% extends "base.html" %}
+{% extends "base-apply.html" %}
 {% load i18n %}
-{% block header_modifier %}header--light-bg{% endblock %}
-{% block page_title %}{{ title }}{% endblock %}
+{% block title %}{{ title }}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
+
 {% block content %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-{% if validlink %}
-    <p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
-    <form class="form" method="post" novalidate>
-        {% if form.non_field_errors %}
-            <ul class="errorlist">
-                {% for error in form.non_field_errors %}
-                    <li>{{ error }}</li>
-                {% endfor %}
-            </ul>
-        {% endif %}
 
-        {% if form.errors %}
-            <ul class="errorlist">
-                {% blocktrans trimmed count counter=form.errors.items|length %}
-                <li>Please correct the error below.</li>
-                {% plural %}
-                <li>Please correct the errors below.</li>
-                {% endblocktrans %}
-            </ul>
-        {% endif %}
+    <div class="wrapper max-w-xl mt-12">
+        {% if validlink %}
+
+            <h2 class="text-2xl">Reset Password</h2>
+            <p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
 
-        {% csrf_token %}
+            <form class="form" method="post" novalidate>
+                {% csrf_token %}
+                {% if redirect_url %}
+                    <input type="hidden" name="next" value="{{ redirect_url }}" />
+                {% endif %}
 
-        {% for field in form %}
-            {% include "forms/includes/field.html" %}
-        {% endfor %}
+                {% if form.non_field_errors %}
+                    <ul class="errorlist">
+                        {% for error in form.non_field_errors %}
+                            <li>{{ error }}</li>
+                        {% endfor %}
+                    </ul>
+                {% endif %}
 
-        <button class="link link--button-secondary" type="submit">{% trans 'Reset password' %}</button>
-    </form>
-{% else %}
-<p>{% trans "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset." %}</p>
-{% endif %}
-</div>
+                {% if form.errors %}
+                    <ul class="errorlist">
+                        {% blocktrans trimmed count counter=form.errors.items|length %}
+                            <li>Please correct the error below.</li>
+                        {% plural %}
+                            <li>Please correct the errors below.</li>
+                        {% endblocktrans %}
+                    </ul>
+                {% endif %}
+
+                {% for field in form %}
+                    {% include "forms/includes/field.html" %}
+                {% endfor %}
+
+                <div class="form__group">
+                    <button class="btn btn-primary" type="submit">{% trans 'Reset' %}</button>
+                </div>
+            </form>
+        {% else %}
+            <p>{% trans "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset." %}</p>
+        {% endif %}
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/password_reset/done.html b/hypha/apply/users/templates/users/password_reset/done.html
index 5efdcfa7c2fd0806dbe4dbd05af6454f2f3ae380..67e68d228cd77b5c823456f133482472f4bd7939 100644
--- a/hypha/apply/users/templates/users/password_reset/done.html
+++ b/hypha/apply/users/templates/users/password_reset/done.html
@@ -1,11 +1,21 @@
-{% extends "base.html" %}
+{% extends "base-apply.html" %}
 {% load i18n %}
-{% block header_modifier %}header--light-bg{% endblock %}
-{% block page_title %}{% trans "Check your email" %}{% endblock %}
-{% block title %}{% trans "Reset password" %}{% endblock %}
+
+{% block title %}{% trans "Password Reset" %}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-    <p>{% trans "A link to reset your password has been emailed to you." %}</p>
-</div>
+
+    <div class="wrapper mt-12 max-w-xl">
+
+        <h2 class="text-xl">
+            {% trans "Check your inbox for a password reset email!" %}
+        </h2>
+        <p>
+            {% blocktrans %}We have sent an email to you with a password recovery link, open the link in the email to change your password.{% endblocktrans %}
+        </p>
+        <p>
+            {% blocktrans %}Check your "Spam" folder, if you don't find the email in your inbox.{% endblocktrans %}
+        </p>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/password_reset/email.txt b/hypha/apply/users/templates/users/password_reset/email.txt
index 2cfbdd19e89ec9120a8d1ed39fa9fdc1618ccf20..80e2c1ef7a6275ce70155b3db7cc1ef758fb0628 100644
--- a/hypha/apply/users/templates/users/password_reset/email.txt
+++ b/hypha/apply/users/templates/users/password_reset/email.txt
@@ -1,8 +1,15 @@
-{% load i18n wagtailadmin_tags %}
+{% load i18n wagtailadmin_tags %}{% base_url_setting as base_url %}
+{% blocktranslate %}Dear {{ user }},{% endblocktranslate %}
+
+{% blocktranslate %}You're receiving this email because you requested a password reset for your user account at {{ org_long_name }}.{% endblocktranslate %}
+
 {% trans "Please follow the link below to reset your password:" %}
 
-{{ protocol }}://{{ domain }}{% url 'users:password_reset_confirm' uidb64=uid token=token %}
+{{ protocol }}://{{ domain }}{% url 'users:password_reset_confirm' uidb64=uid token=token %}{% if redirect_url %}?next={{ redirect_url }}{% endif%}
+
+{% blocktrans %}Kind Regards,
+The {{ org_short_name }} Team{% endblocktrans %}
 
-{% if user.USERNAME_FIELD != "email" %}
-{% trans "Your username (in case you've forgotten):" %} {{ user.get_username }}
-{% endif %}
+--
+{{ org_long_name }}
+{% if site %}{{ site.root_url }}{% else %}{{ base_url }}{% endif %}
diff --git a/hypha/apply/users/templates/users/password_reset/form.html b/hypha/apply/users/templates/users/password_reset/form.html
index 3a28d709fad811bc6b4831204152710fca67480f..d9298f8e4ea81cd14274d55209c07a5c71514c14 100644
--- a/hypha/apply/users/templates/users/password_reset/form.html
+++ b/hypha/apply/users/templates/users/password_reset/form.html
@@ -1,29 +1,41 @@
-{% extends 'base.html' %}
+{% extends "base-apply.html" %}
 {% load i18n %}
 
-{% block header_modifier %}header--light-bg{% endblock %}
-{% block page_title %}{% trans "Reset password" %}{% endblock %}
 {% block title %}{% trans "Reset password" %}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--bottom-space">
-    {% if form.non_field_errors %}
-        <div class="messages">
-            <ul>
-                {% for error in form.non_field_errors %}
-                <li class="error">{{ error }}</li>
-                {% endfor %}
-            </ul>
-        </div>
-    {% endif %}
 
-    <form class="form form--with-p-tags" method="post">
-        <p class="form__help">{% trans "Forgot or want to change your password? Please enter your user account's email address and we will send you a password reset link." %}</p>
-        {% csrf_token %}
-        <p>{{ form.email.label_tag }}</p>
-        <p>{{ form.email }}</p>
+    <section class="mt-5 pt-4">
+        <div class="wrapper">
+            {% if form.non_field_errors %}
+                <div class="messages">
+                    <ul>
+                        {% for error in form.non_field_errors %}
+                            <li class="error">{{ error }}</li>
+                        {% endfor %}
+                    </ul>
+                </div>
+            {% endif %}
+
+            <form class="form form--with-p-tags pt-4" method="post">
+                <h2 class="text-2xl">{% trans "Forgot password?" %}</h2>
+                <p class="form__help">{% trans "Please enter your user account's email address and we will send you a password reset link." %}</p>
+                {% csrf_token %}
+                {% if redirect_url %}
+                    <input type="hidden" name="next" value="{{ redirect_url }}">
+                {% endif %}
+                <p>{{ form.email.label_tag }}</p>
+                <p>{{ form.email }}</p>
 
-        <button class="link link--button-secondary" type="submit">{% trans "Send password reset email" %}</button>
-    </form>
-</div>
+                <button class="btn btn-primary" type="submit">{% trans "Send reset email" %}</button>
+            </form>
+
+            <div class="mt-4">
+                <a href="{% url 'users_public:login' %}{% if redirect_url %}?next={{ redirect_url }}{% endif %}" hx-boost="true">
+                    {% trans "Log in" %}
+                </a>
+            </div>
+        </div>
+    </section>
 {% endblock %}
diff --git a/hypha/apply/users/templates/users/register-success.html b/hypha/apply/users/templates/users/register-success.html
new file mode 100644
index 0000000000000000000000000000000000000000..bb50fb5a548158a39dcce2f5f1a4671780d36aa8
--- /dev/null
+++ b/hypha/apply/users/templates/users/register-success.html
@@ -0,0 +1,33 @@
+{% extends "base-apply.html" %}
+{% load i18n heroicons %}
+
+{% block title %}{% trans "Register" %}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
+
+{% block content %}
+
+    <div class="wrapper mt-12 max-w-2xl">
+
+        <div>
+            {% heroicon_outline "document-check" aria_hidden="true" size=64 %}
+        </div>
+        <h2 class="text-2xl mt-4">
+            Account created, check your email to activate!
+        </h2>
+        <p>
+            {% if request.GET.name %} {% trans "Hi " %}{{ request.GET.name }}, {% endif %}
+
+            {% trans "your account" %}
+
+            {% if request.GET.email %}
+                {% trans "with the email" %} {{ request.GET.email }}
+            {% endif %}
+
+            {% trans "has been successfully created! We have sent you an account activatation email." %}
+        </p>
+
+        <p>
+            {% blocktrans %}Check your "Spam" folder, if you don't find the email in your inbox.{% endblocktrans %}
+        </p>
+    </div>
+{% endblock %}
diff --git a/hypha/apply/users/templates/users/register.html b/hypha/apply/users/templates/users/register.html
index 470cc541070c6e50b09b5397d80d6ea395614562..b05b79fb3ac36526259402e8ae0aa04f02df2114 100644
--- a/hypha/apply/users/templates/users/register.html
+++ b/hypha/apply/users/templates/users/register.html
@@ -1,28 +1,45 @@
-{% extends 'base.html' %}
-{% load i18n %}
+{% extends "base-apply.html" %}
+{% load i18n wagtailcore_tags %}
 
-{% block header_modifier %}header--light-bg{% endblock %}
-{% block page_title %}{% trans "Register" %}{% endblock %}
 {% block title %}{% trans "Register" %}{% endblock %}
+{% block body_class %}bg-white{% endblock %}
 
 {% block content %}
-  <div class="wrapper wrapper--small">
+    <div class="w-full grid md:mt-5 md:py-4">
+        <section>
+            <div class="px-4 pt-4">
+                <form class="form" method="post" action="{% url 'users_public:register' %}">
+                    {% csrf_token %}
+                    {% if redirect_url %}
+                        <input type="hidden" value="{{ redirect_url }}" name="next">
+                    {% endif %}
+                    <h2 class="text-2xl">Create your account</h2>
 
-    {% if form.non_field_errors %}
-        <div class="wrapper wrapper--error">{{ form.non_field_errors.as_text }}</div>
-    {% endif %}
+                    {% if form.non_field_errors %}
+                        <div class="wrapper wrapper--error">{{ form.non_field_errors.as_text }}</div>
+                    {% endif %}
 
-    <form class="form form--with-p-tags" method="post">
-      {% csrf_token %}
-        {% for field in form %}
-          {%if field.id_for_label != 'id_is_superuser' and field.label != 'Groups' %}
-            {% include "forms/includes/field.html" %}
-          {%endif%}
-        {% endfor %}
-        <button class="link link--button-secondary" type="submit">{% trans "Register" %}</button>
-    </form>
-    <p>
-        {% trans "Already have an account?" %} <a href="{% url 'users_public:login' %}"> {% trans "Log in" %}</a>
-    </p>
-  </div>
+                    {% for field in form %}
+                        {%if field.id_for_label != 'id_is_superuser' and field.label != 'Groups' %}
+                            {% include "forms/includes/field.html" %}
+                        {%endif%}
+                    {% endfor %}
+                    <div class="form__group">
+                        <button class="button button--primary" type="submit">{% trans "Submit" %}</button>
+                    </div>
+                </form>
+                <p class="mt-4">
+                    {% trans "Already have an account?" %}<a href="{% url 'users_public:login' %}{% if redirect_url %}?next={{ redirect_url }}{% endif %}" hx-boost="true"> {% trans "Log in" %}</a>
+                </p>
+            </div>
+        </section>
+
+        {% if settings.users.AuthSettings.register_extra_text %}
+            <section>
+                <div class="px-4 my-4">
+                    {{ settings.users.AuthSettings.register_extra_text|richtext}}
+                </div>
+            </section>
+        {% endif %}
+    </div>
 {% endblock %}
diff --git a/hypha/apply/users/templates/wagtailusers/users/results.html b/hypha/apply/users/templates/wagtailusers/users/results.html
index 067e8481cfb8bc692f497910f27bc8c9829844a7..3b350343fb6ceb8ab7a528c2472ead0fb3c4609c 100644
--- a/hypha/apply/users/templates/wagtailusers/users/results.html
+++ b/hypha/apply/users/templates/wagtailusers/users/results.html
@@ -46,11 +46,11 @@
                 {% endfor %}
                 <button class="button button-longrunning" type="submit">{% icon name="spinner" %}{% trans 'Apply filters' %}</button>
             </form>
-        {%with request.get_full_path as path%}
-            <div class="users-list__export">
-                <button class="button"><a href="{{path}}{% if '?' in path %}&{%else%}?{% endif %}export=true">{% trans 'Export Users' %}</a></button>
-            </div>
-        {%endwith%}
+            {%with request.get_full_path as path%}
+                <div class="users-list__export">
+                    <button class="button"><a href="{{path}}{% if '?' in path %}&{%else%}?{% endif %}export=true">{% trans 'Export Users' %}</a></button>
+                </div>
+            {%endwith%}
         </div>
     {% endif %}
 </div>
diff --git a/hypha/apply/users/templatetags/users_tags.py b/hypha/apply/users/templatetags/users_tags.py
index 94a8584b01ddcc24a41cc8b199c334ceb6c8529a..8c8622cb034205caa8f796f31feb3ecd680ba9f3 100644
--- a/hypha/apply/users/templatetags/users_tags.py
+++ b/hypha/apply/users/templatetags/users_tags.py
@@ -10,20 +10,20 @@ register = template.Library()
 def backend_name(name):
     """Human readable mapping for the social auth backend"""
     return {
-        'google-oauth': 'Google OAuth',
-        'google-oauth2': 'Google OAuth',
-        'google-openidconnect': 'Google OpenId',
+        "google-oauth": "Google OAuth",
+        "google-oauth2": "Google OAuth",
+        "google-openidconnect": "Google OpenId",
     }.get(name, name)
 
 
 @register.filter
 def backend_class(backend):
-    return backend.replace('-', ' ')
+    return backend.replace("-", " ")
 
 
 @register.simple_tag(takes_context=True)
 def can_use_oauth(context):
-    user = context.get('user')
+    user = context.get("user")
 
     return can_use_oauth_check(user)
 
diff --git a/hypha/apply/users/tests/factories.py b/hypha/apply/users/tests/factories.py
index 284d91896e74b7b8cbe24a79ad924829eed0b170..2068b91c2509aa137c1786839228a4e6cd43170f 100644
--- a/hypha/apply/users/tests/factories.py
+++ b/hypha/apply/users/tests/factories.py
@@ -20,18 +20,20 @@ from ..groups import (
 class GroupFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Group
-        django_get_or_create = ('name',)
+        django_get_or_create = ("name",)
 
-    name = factory.Sequence('group name {}'.format)
+    name = factory.Sequence("group name {}".format)
 
 
 class UserFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = get_user_model()
 
-    email = factory.LazyAttribute(lambda o: '{}+{}@email.com'.format(slugify(o.full_name), uuid.uuid4()))
-    full_name = factory.Faker('name')
-    password = factory.PostGenerationMethodCall('set_password', 'defaultpassword')
+    email = factory.LazyAttribute(
+        lambda o: "{}+{}@email.com".format(slugify(o.full_name), uuid.uuid4())
+    )
+    full_name = factory.Faker("name")
+    password = factory.PostGenerationMethodCall("set_password", "defaultpassword")
 
     @factory.post_generation
     def groups(self, create, extracted, **kwargs):
@@ -45,7 +47,7 @@ class UserFactory(factory.django.DjangoModelFactory):
 
 
 class OAuthUserFactory(UserFactory):
-    password = factory.PostGenerationMethodCall('set_unusable_password')
+    password = factory.PostGenerationMethodCall("set_unusable_password")
 
 
 class AdminFactory(UserFactory):
@@ -54,13 +56,14 @@ class AdminFactory(UserFactory):
 
 class StaffFactory(OAuthUserFactory):
     class Meta:
-        exclude = ('slack_temp', )
+        exclude = ("slack_temp",)
+
     is_staff = True
 
     # Required to generate the fake data add pass to LazyAttribute
-    slack_temp = factory.Faker('word')
+    slack_temp = factory.Faker("word")
 
-    slack = factory.LazyAttribute(lambda p: '@{}'.format(p.slack_temp))
+    slack = factory.LazyAttribute(lambda p: "@{}".format(p.slack_temp))
 
     @factory.post_generation
     def groups(self, create, extracted, **kwargs):
@@ -70,8 +73,7 @@ class StaffFactory(OAuthUserFactory):
 
 def get_wagtail_admin_access_permission():
     return Permission.objects.get(
-        content_type__app_label='wagtailadmin',
-        codename='access_admin'
+        content_type__app_label="wagtailadmin", codename="access_admin"
     )
 
 
@@ -97,13 +99,14 @@ class StaffWithoutWagtailAdminAccessFactory(StaffFactory):
 
 class FinanceFactory(OAuthUserFactory):
     class Meta:
-        exclude = ('slack_temp', )
+        exclude = ("slack_temp",)
+
     is_staff = True
 
     # Required to generate the fake data add pass to LazyAttribute
-    slack_temp = factory.Faker('word')
+    slack_temp = factory.Faker("word")
 
-    slack = factory.LazyAttribute(lambda p: '@{}'.format(p.slack_temp))
+    slack = factory.LazyAttribute(lambda p: "@{}".format(p.slack_temp))
 
     @factory.post_generation
     def groups(self, create, extracted, **kwargs):
@@ -127,7 +130,7 @@ class Finance2Factory(FinanceFactory):
         if create:
             self.groups.add(
                 GroupFactory(name=FINANCE_GROUP_NAME),
-                GroupFactory(name=APPROVER_GROUP_NAME)
+                GroupFactory(name=APPROVER_GROUP_NAME),
             )
 
 
@@ -146,7 +149,7 @@ class ContractingApproverFactory(UserFactory):
         if create:
             self.groups.add(
                 GroupFactory(name=CONTRACTING_GROUP_NAME),
-                GroupFactory(name=APPROVER_GROUP_NAME)
+                GroupFactory(name=APPROVER_GROUP_NAME),
             )
 
 
diff --git a/hypha/apply/users/tests/test_forms.py b/hypha/apply/users/tests/test_forms.py
index f7062fe4bf76b1aa71c448dfb0c4e42c9c04222c..9dc5009c885d1389120f179453dd938110aca904 100644
--- a/hypha/apply/users/tests/test_forms.py
+++ b/hypha/apply/users/tests/test_forms.py
@@ -13,7 +13,9 @@ class BaseTestProfileForm(TestCase):
         return data
 
     def submit_form(self, instance, **extra_data):
-        form = ProfileForm(instance=instance, data=self.form_data(instance, **extra_data))
+        form = ProfileForm(
+            instance=instance, data=self.form_data(instance, **extra_data)
+        )
         if form.is_valid():
             form.save()
 
@@ -32,13 +34,13 @@ class TestProfileForm(BaseTestProfileForm):
         self.assertNotEqual(self.user.email, other_user.email)
 
     def test_can_change_email(self):
-        new_email = 'me@another.com'
+        new_email = "me@another.com"
         self.submit_form(self.user, email=new_email)
         self.user.refresh_from_db()
         self.assertEqual(self.user.email, new_email)
 
     def test_cant_set_slack_name(self):
-        slack_name = '@foobar'
+        slack_name = "@foobar"
         self.submit_form(self.user, slack=slack_name)
         self.user.refresh_from_db()
         self.assertNotEqual(self.user.slack, slack_name)
@@ -49,27 +51,27 @@ class TestStaffProfileForm(BaseTestProfileForm):
         self.staff = StaffFactory()
 
     def test_cant_change_email(self):
-        new_email = 'me@this.com'
+        new_email = "me@this.com"
         self.submit_form(self.staff, email=new_email)
         self.staff.refresh_from_db()
         self.assertNotEqual(new_email, self.staff.email)
 
     def test_can_set_slack_name(self):
-        slack_name = '@foobar'
+        slack_name = "@foobar"
         self.submit_form(self.staff, slack=slack_name)
 
         self.staff.refresh_from_db()
         self.assertEqual(self.staff.slack, slack_name)
 
     def test_can_set_slack_name_with_trailing_space(self):
-        slack_name = '@foobar'
+        slack_name = "@foobar"
         self.submit_form(self.staff, slack=slack_name)
 
         self.staff.refresh_from_db()
         self.assertEqual(self.staff.slack, slack_name)
 
     def test_cant_set_slack_name_with_space(self):
-        slack_name = '@ foobar'
+        slack_name = "@ foobar"
         form = self.submit_form(self.staff, slack=slack_name)
         self.assertFalse(form.is_valid())
 
@@ -77,14 +79,14 @@ class TestStaffProfileForm(BaseTestProfileForm):
         self.assertNotEqual(self.staff.slack, slack_name)
 
     def test_auto_prepend_at(self):
-        slack_name = 'foobar'
+        slack_name = "foobar"
         self.submit_form(self.staff, slack=slack_name)
 
         self.staff.refresh_from_db()
-        self.assertEqual(self.staff.slack, '@' + slack_name)
+        self.assertEqual(self.staff.slack, "@" + slack_name)
 
     def test_can_clear_slack_name(self):
-        slack_name = ''
+        slack_name = ""
         self.submit_form(self.staff, slack=slack_name)
 
         self.staff.refresh_from_db()
@@ -97,10 +99,10 @@ class TestEmailChangePasswordForm(TestCase):
 
     def test_doesnt_error_on_null_slack_field(self):
         form = EmailChangePasswordForm(self.user)
-        form.save('', '', None)
+        form.save("", "", None)
 
     def test_can_update_slack(self):
-        slack_name = 'foobar'
+        slack_name = "foobar"
         form = EmailChangePasswordForm(self.user)
-        form.save('', '', slack_name)
+        form.save("", "", slack_name)
         self.assertEqual(self.user.slack, slack_name)
diff --git a/hypha/apply/users/tests/test_middleware.py b/hypha/apply/users/tests/test_middleware.py
index 6800bb67ba2247e3dad6b7b57787fe25fffa9989..a5de674bb4cd1480baf8ee7e182822f6517bd96b 100644
--- a/hypha/apply/users/tests/test_middleware.py
+++ b/hypha/apply/users/tests/test_middleware.py
@@ -7,20 +7,24 @@ from hypha.apply.users.tests.factories import UserFactory
 from ..middleware import ALLOWED_SUBPATH_FOR_UNVERIFIED_USERS
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls', ENFORCE_TWO_FACTOR=True)
+@override_settings(ROOT_URLCONF="hypha.apply.urls", ENFORCE_TWO_FACTOR=True)
 class TestTwoFactorAuthenticationMiddleware(TestCase):
     def enable_otp(self, user):
-        return user.totpdevice_set.create(name='default')
+        return user.totpdevice_set.create(name="default")
 
     def test_unverified_user_redirect(self):
         user = UserFactory()
         self.client.force_login(user)
 
         response = self.client.get(settings.LOGIN_REDIRECT_URL, follow=True)
-        self.assertRedirects(response, reverse('users:two_factor_required'), status_code=301)
+        self.assertRedirects(
+            response, reverse("users:two_factor_required"), status_code=301
+        )
 
-        response = self.client.get(reverse('funds:submissions:list'), follow=True)
-        self.assertRedirects(response, reverse('users:two_factor_required'), status_code=301)
+        response = self.client.get(reverse("funds:submissions:list"), follow=True)
+        self.assertRedirects(
+            response, reverse("users:two_factor_required"), status_code=301
+        )
 
     def test_verified_user_redirect(self):
         user = UserFactory()
@@ -29,7 +33,7 @@ class TestTwoFactorAuthenticationMiddleware(TestCase):
         response = self.client.get(settings.LOGIN_REDIRECT_URL, follow=True)
         self.assertEqual(response.status_code, 200)
 
-        response = self.client.get(reverse('funds:submissions:list'), follow=True)
+        response = self.client.get(reverse("funds:submissions:list"), follow=True)
         self.assertEqual(response.status_code, 200)
 
     def test_unverified_user_can_access_allowed_urls(self):
diff --git a/hypha/apply/users/tests/test_oauth_access.py b/hypha/apply/users/tests/test_oauth_access.py
index 8de97b56be0926b66ed25ea915b4e942e31a8c0e..124d211b32e441247ce38595e8ba23c463cf2f34 100644
--- a/hypha/apply/users/tests/test_oauth_access.py
+++ b/hypha/apply/users/tests/test_oauth_access.py
@@ -4,11 +4,11 @@ from django.test import TestCase, override_settings
 from django.urls import reverse
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestOAuthAccess(TestCase):
     def login(self):
-        email = 'test@email.com'
-        password = 'password'
+        email = "test@email.com"
+        password = "password"
         user = get_user_model().objects.create_user(email=email, password=password)
         logged_in = self.client.login(email=email, password=password)
         self.assertTrue(logged_in)
@@ -18,11 +18,11 @@ class TestOAuthAccess(TestCase):
         """
         This checks that /account/oauth requires the user to be logged in
         """
-        oauth_page = reverse('users:oauth')
+        oauth_page = reverse("users:oauth")
         response = self.client.get(oauth_page, follow=True)
         self.assertRedirects(
             response,
-            reverse('users_public:login') + '?next=' + reverse('users:oauth'),
+            reverse("users_public:login") + "?next=" + reverse("users:oauth"),
             status_code=301,
             target_status_code=200,
         )
@@ -32,31 +32,31 @@ class TestOAuthAccess(TestCase):
         del settings.SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS
 
         self.login()
-        response = self.client.get(reverse('users:oauth'), follow=True)
+        response = self.client.get(reverse("users:oauth"), follow=True)
         self.assertEqual(response.status_code, 403)
 
     def test_oauth_user_email_not_whitelisted(self):
         self.login()
-        response = self.client.get(reverse('users:oauth'), follow=True)
+        response = self.client.get(reverse("users:oauth"), follow=True)
         self.assertEqual(response.status_code, 403)
 
-    @override_settings(SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['email.com'])
+    @override_settings(SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=["email.com"])
     def test_oauth_whitelisted_user_can_see_link_to_oauth_settings_page(self):
         self.login()
 
-        response = self.client.get(reverse('users:account'), follow=True)
-        self.assertNotContains(response, 'Manage OAuth')
+        response = self.client.get(reverse("users:account"), follow=True)
+        self.assertNotContains(response, "Manage OAuth")
 
-    @override_settings(SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['email.com'])
+    @override_settings(SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=["email.com"])
     def test_oauth_whitelisted_user_can_access_oauth_settings_page(self):
         """
         Checks that the test user can access the OAuth page as their email is whitelisted
         """
         self.login()
 
-        response = self.client.get(reverse('users:oauth'), follow=True)
+        response = self.client.get(reverse("users:oauth"), follow=True)
         self.assertEqual(response.status_code, 200)
-        self.assertContains(response, 'Google OAuth')
-        self.assertNotContains(response, 'Disconnect Google OAuth')
+        self.assertContains(response, "Google OAuth")
+        self.assertNotContains(response, "Disconnect Google OAuth")
 
-        self.assertTemplateUsed(response, 'users/oauth.html')
+        self.assertTemplateUsed(response, "users/oauth.html")
diff --git a/hypha/apply/users/tests/test_registration.py b/hypha/apply/users/tests/test_registration.py
index 42c26822fec0989a60aa359e7e9feea884fa1971..ea0019c6b6967b4c223064cae1d58d55ca3b2a47 100644
--- a/hypha/apply/users/tests/test_registration.py
+++ b/hypha/apply/users/tests/test_registration.py
@@ -6,18 +6,17 @@ from hypha.apply.funds.tests.factories import FundTypeFactory
 from hypha.apply.utils.testing import make_request
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestRegistration(TestCase):
-
     @override_settings(ENABLE_REGISTRATION_WITHOUT_APPLICATION=False)
     def test_registration_enabled_has_no_link(self):
         response = self.client.get("/", follow=True)
-        self.assertNotContains(response, reverse('users_public:register'))
+        self.assertNotContains(response, reverse("users_public:register"))
 
     @override_settings(ENABLE_REGISTRATION_WITHOUT_APPLICATION=True)
     def test_registration_enabled_has_link(self):
         response = self.client.get("/", follow=True)
-        self.assertContains(response, reverse('users_public:register'))
+        self.assertContains(response, reverse("users_public:register"))
 
     @override_settings(ENABLE_REGISTRATION_WITHOUT_APPLICATION=True)
     def test_registration(self):
@@ -28,10 +27,13 @@ class TestRegistration(TestCase):
                 "first_name": "Not used - see full_name",
                 "last_name": "Not used - see full_name",
             },
-            secure=True)
+            secure=True,
+        )
         assert len(mail.outbox) == 1
-        assert 'Activate your account on the' in mail.outbox[0].body
-        self.assertContains(response, 'Please check your email to activate the account.')
+        assert "Activate your account on the" in mail.outbox[0].body
+
+        assert response.status_code == 302
+        assert reverse("users_public:register-success") in response.url
 
     @override_settings(ENABLE_REGISTRATION_WITHOUT_APPLICATION=True)
     def test_duplicate_registration_fails(self):
@@ -42,7 +44,8 @@ class TestRegistration(TestCase):
                 "first_name": "Not used - see full_name",
                 "last_name": "Not used - see full_name",
             },
-            secure=True)
+            secure=True,
+        )
         mail.outbox.clear()
 
         response = self.client.post(
@@ -52,14 +55,19 @@ class TestRegistration(TestCase):
                 "first_name": "Not used - see full_name",
                 "last_name": "Not used - see full_name",
             },
-            secure=True)
+            secure=True,
+        )
 
         assert len(mail.outbox) == 0
         self.assertContains(response, "A user with that email already exists")
 
-    @override_settings(FORCE_LOGIN_FOR_APPLICATION=True, ENABLE_REGISTRATION_WITHOUT_APPLICATION=False)
+    @override_settings(
+        FORCE_LOGIN_FOR_APPLICATION=True, ENABLE_REGISTRATION_WITHOUT_APPLICATION=False
+    )
     def test_force_login(self):
         fund = FundTypeFactory()
-        response = fund.serve(make_request(None, {}, method='get', site=fund.get_site()))
+        response = fund.serve(
+            make_request(None, {}, method="get", site=fund.get_site())
+        )
         assert response.status_code == 302
-        assert response.url == reverse('users_public:login') + '?next=/'
+        assert response.url == reverse("users_public:login") + "?next=/"
diff --git a/hypha/apply/users/tests/test_utils.py b/hypha/apply/users/tests/test_utils.py
index bc86a7e347a31b7f76cc175cb9640fe870378885..a569864972a19399fb12ba0bf47d8e5d31bab69b 100644
--- a/hypha/apply/users/tests/test_utils.py
+++ b/hypha/apply/users/tests/test_utils.py
@@ -6,9 +6,8 @@ from hypha.apply.users.tests.factories import UserFactory
 from ..utils import get_user_by_email, is_user_already_registered, send_activation_email
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestActivationEmail(TestCase):
-
     def test_activation_email_includes_link(self):
         send_activation_email(UserFactory())
         assert len(mail.outbox) == 1
@@ -16,35 +15,39 @@ class TestActivationEmail(TestCase):
         assert "password reset form at: https://primary-test-host.org" in email_body
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestGetUserByEmail(TestCase):
-
     def test_no_account(self):
-        assert get_user_by_email(email='abc@gmail.com') is None
+        assert get_user_by_email(email="abc@gmail.com") is None
 
     def test_single_same_email(self):
-        user1 = UserFactory(email='abc@gmail.com')
+        user1 = UserFactory(email="abc@gmail.com")
 
-        assert get_user_by_email(email='abc@gmail.com').id == user1.id
-        assert get_user_by_email(email='ABC@gmail.com').id == user1.id
-        assert get_user_by_email(email='ABC@GMAIL.COM').id == user1.id
+        assert get_user_by_email(email="abc@gmail.com").id == user1.id
+        assert get_user_by_email(email="ABC@gmail.com").id == user1.id
+        assert get_user_by_email(email="ABC@GMAIL.COM").id == user1.id
 
     def test_multiple_accounts_same_email(self):
-        user1 = UserFactory(email='abc@gmail.com')
-        user2 = UserFactory(email='Abc@gmail.com')
+        user1 = UserFactory(email="abc@gmail.com")
+        user2 = UserFactory(email="Abc@gmail.com")
 
-        assert get_user_by_email(email='abc@gmail.com').id == user1.id
-        assert get_user_by_email(email='Abc@gmail.com').id == user2.id
+        assert get_user_by_email(email="abc@gmail.com").id == user1.id
+        assert get_user_by_email(email="Abc@gmail.com").id == user2.id
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestUserAlreadyRegistered(TestCase):
-
     def test_no_account(self):
-        assert is_user_already_registered(email='abc@gmail.com') == (False, '')
+        assert is_user_already_registered(email="abc@gmail.com") == (False, "")
 
     def test_case_sensitive_email(self):
-        UserFactory(email='abc@gmail.com')
-
-        assert is_user_already_registered(email='abc@gmail.com') == (True, "Email is already in use.")
-        assert is_user_already_registered(email='ABc@gmail.com') == (True, "Email is already in use.")
+        UserFactory(email="abc@gmail.com")
+
+        assert is_user_already_registered(email="abc@gmail.com") == (
+            True,
+            "Email is already in use.",
+        )
+        assert is_user_already_registered(email="ABc@gmail.com") == (
+            True,
+            "Email is already in use.",
+        )
diff --git a/hypha/apply/users/tests/test_views.py b/hypha/apply/users/tests/test_views.py
index 52f70dbc6a04496f6f46c8ffa2c638bcf0fe9ade..45351e8e8f5825c461320166fa9590f51a914d2e 100644
--- a/hypha/apply/users/tests/test_views.py
+++ b/hypha/apply/users/tests/test_views.py
@@ -7,11 +7,11 @@ from hypha.apply.utils.testing.tests import BaseViewTestCase
 from .factories import OAuthUserFactory, StaffFactory, SuperUserFactory, UserFactory
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class BaseTestProfielView(TestCase):
     @classmethod
     def setUpTestData(cls):
-        cls.url = reverse('users:account')
+        cls.url = reverse("users:account")
 
 
 class TestProfileView(BaseTestProfielView):
@@ -23,20 +23,24 @@ class TestProfileView(BaseTestProfielView):
         self.client.logout()
         response = self.client.get(self.url, follow=True)
         # Initial redirect will be via to https through a 301
-        self.assertRedirects(response, reverse('users_public:login') + '?next=' + self.url, status_code=301)
+        self.assertRedirects(
+            response,
+            reverse("users_public:login") + "?next=" + self.url,
+            status_code=301,
+        )
 
     def test_includes_change_password(self):
         response = self.client.get(self.url, follow=True)
-        self.assertContains(response, reverse('users:password_change'))
+        self.assertContains(response, reverse("users:password_change"))
 
     def test_doesnt_includes_change_password_for_oauth(self):
         self.client.force_login(OAuthUserFactory())
         response = self.client.get(self.url, follow=True)
-        self.assertNotContains(response, reverse('users:password_change'))
+        self.assertNotContains(response, reverse("users:password_change"))
 
     def test_cant_set_slack_name(self):
         response = self.client.get(self.url, follow=True)
-        self.assertNotContains(response, 'Slack name')
+        self.assertNotContains(response, "Slack name")
 
 
 class TestStaffProfileView(BaseTestProfielView):
@@ -46,22 +50,24 @@ class TestStaffProfileView(BaseTestProfielView):
 
     def test_can_set_slack_name(self):
         response = self.client.get(self.url, follow=True)
-        self.assertContains(response, 'Slack name')
+        self.assertContains(response, "Slack name")
 
 
 class TestPasswordReset(BaseViewTestCase):
     user_factory = UserFactory
-    url_name = 'users:{}'
-    base_view_name = 'password_reset'
+    url_name = "users:{}"
+    base_view_name = "password_reset"
 
     def test_recieves_email(self):
-        response = self.post_page(None, data={'email': self.user.email})
-        self.assertRedirects(response, self.url(None, view_name='password_reset_done'))
+        response = self.post_page(None, data={"email": self.user.email})
+        self.assertRedirects(response, self.url(None, view_name="password_reset_done"))
         self.assertEqual(len(mail.outbox), 1)
-        self.assertIn('https://testserver/account/password/reset/confirm', mail.outbox[0].body)
+        self.assertIn(
+            "https://testserver/account/password/reset/confirm", mail.outbox[0].body
+        )
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class TestBecome(TestCase):
     def setUp(self):
         self.staff = StaffFactory()
@@ -70,8 +76,10 @@ class TestBecome(TestCase):
 
     def become_request(self, user, target):
         self.client.force_login(user)
-        url = reverse('users:become')
-        response = self.client.post(url, {'user_pk': target.pk}, follow=True, secure=True)
+        url = reverse("users:become")
+        response = self.client.post(
+            url, {"user_pk": target.pk}, follow=True, secure=True
+        )
         return response
 
     def test_staff_cannot_become_user(self):
diff --git a/hypha/apply/users/urls.py b/hypha/apply/users/urls.py
index 87d0800f8cac58e3abcd248431401ff1e93976c8..708d8f315490cb4a4623e32a80d890fd14b90bc4 100644
--- a/hypha/apply/users/urls.py
+++ b/hypha/apply/users/urls.py
@@ -10,7 +10,10 @@ from .views import (
     EmailChangeDoneView,
     EmailChangePasswordView,
     LoginView,
+    PasswordResetConfirmView,
+    PasswordResetView,
     RegisterView,
+    RegistrationSuccessView,
     TWOFAAdminDisableView,
     TWOFABackupTokensPasswordView,
     TWOFADisableView,
@@ -21,86 +24,128 @@ from .views import (
     oauth,
 )
 
-app_name = 'users'
+app_name = "users"
 
 
 public_urlpatterns = [
     path(
-        'login/', LoginView.as_view(
-            template_name='users/login.html',
-            redirect_authenticated_user=True
+        "login/",
+        LoginView.as_view(
+            template_name="users/login.html", redirect_authenticated_user=True
         ),
-        name='login'
+        name="login",
     ),
-
     # Log out
-    path('logout/', auth_views.LogoutView.as_view(next_page='/'), name='logout'),
-    path('register/', RegisterView.as_view() , name='register')
+    path("logout/", auth_views.LogoutView.as_view(next_page="/"), name="logout"),
+    path("register/", RegisterView.as_view(), name="register"),
+    path(
+        "register-success/", RegistrationSuccessView.as_view(), name="register-success"
+    ),
 ]
 
 urlpatterns = [
-    path('account/', include([
-        path('', ratelimit(key='ip', rate=settings.DEFAULT_RATE_LIMIT, method='GET')(AccountView.as_view()), name='account'),
-        path('password/', include([
-            path('', EmailChangePasswordView.as_view(), name='email_change_confirm_password'),
-            path(
-                'change/',
-                ratelimit(key='user', rate=settings.DEFAULT_RATE_LIMIT, method='POST')
-                (auth_views.PasswordChangeView.as_view(
-                    template_name="users/change_password.html",
-                    success_url=reverse_lazy('users:account')
-                )),
-                name='password_change',
-            ),
-            path(
-                'reset/',
-                ratelimit(key='post:email', rate=settings.DEFAULT_RATE_LIMIT, method='POST')
-                (ratelimit(key='ip', rate=settings.DEFAULT_RATE_LIMIT, method='POST')
-                    (
-                        auth_views.PasswordResetView.as_view(
-                            template_name='users/password_reset/form.html',
-                            email_template_name='users/password_reset/email.txt',
-                            success_url=reverse_lazy('users:password_reset_done')
-                        ))),
-                name='password_reset'
-            ),
-            path(
-                'reset/done/',
-                auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset/done.html'),
-                name='password_reset_done'
-            ),
-            path(
-                'reset/confirm/<uidb64>/<token>/',
-                auth_views.PasswordResetConfirmView.as_view(
-                    template_name='users/password_reset/confirm.html',
-                    post_reset_login=True,
-                    post_reset_login_backend=settings.CUSTOM_AUTH_BACKEND,
-                    success_url=reverse_lazy('users:account')
+    path(
+        "account/",
+        include(
+            [
+                path(
+                    "",
+                    ratelimit(key="ip", rate=settings.DEFAULT_RATE_LIMIT, method="GET")(
+                        AccountView.as_view()
+                    ),
+                    name="account",
                 ),
-                name='password_reset_confirm'
-            ),
-            path(
-                'reset/complete/',
-                auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset/complete.html'),
-                name='password_reset_complete'
-            ),
-
-        ])),
-        path('confirmation/done/', EmailChangeDoneView.as_view(), name="confirm_link_sent"),
-        path('confirmation/<uidb64>/<token>/', EmailChangeConfirmationView.as_view(), name="confirm_email"),
-        path('activate/<uidb64>/<token>/', ActivationView.as_view(), name='activate'),
-        path('activate/', create_password, name="activate_password"),
-        path('oauth', oauth, name='oauth'),
-        # Two factor redirect
-        path('two_factor/required/', TWOFARequiredMessageView.as_view(), name='two_factor_required'),
-        path('two_factor/setup/', TWOFASetupView.as_view(), name='setup'),
-        path('two_factor/backup_tokens/password/', TWOFABackupTokensPasswordView.as_view(), name='backup_tokens_password'),
-        path('two_factor/disable/', TWOFADisableView.as_view(), name='disable'),
-        path('two_factor/admin/disable/<str:user_id>/', TWOFAAdminDisableView.as_view(), name='admin_disable'),
-    ])),
+                path(
+                    "password/",
+                    include(
+                        [
+                            path(
+                                "",
+                                EmailChangePasswordView.as_view(),
+                                name="email_change_confirm_password",
+                            ),
+                            path(
+                                "change/",
+                                ratelimit(
+                                    key="user",
+                                    rate=settings.DEFAULT_RATE_LIMIT,
+                                    method="POST",
+                                )(
+                                    auth_views.PasswordChangeView.as_view(
+                                        template_name="users/change_password.html",
+                                        success_url=reverse_lazy("users:account"),
+                                    )
+                                ),
+                                name="password_change",
+                            ),
+                            path(
+                                "reset/",
+                                PasswordResetView.as_view(),
+                                name="password_reset",
+                            ),
+                            path(
+                                "reset/done/",
+                                auth_views.PasswordResetDoneView.as_view(
+                                    template_name="users/password_reset/done.html"
+                                ),
+                                name="password_reset_done",
+                            ),
+                            path(
+                                "reset/confirm/<uidb64>/<token>/",
+                                PasswordResetConfirmView.as_view(),
+                                name="password_reset_confirm",
+                            ),
+                            path(
+                                "reset/complete/",
+                                auth_views.PasswordResetCompleteView.as_view(
+                                    template_name="users/password_reset/complete.html"
+                                ),
+                                name="password_reset_complete",
+                            ),
+                        ]
+                    ),
+                ),
+                path(
+                    "confirmation/done/",
+                    EmailChangeDoneView.as_view(),
+                    name="confirm_link_sent",
+                ),
+                path(
+                    "confirmation/<uidb64>/<token>/",
+                    EmailChangeConfirmationView.as_view(),
+                    name="confirm_email",
+                ),
+                path(
+                    "activate/<uidb64>/<token>/",
+                    ActivationView.as_view(),
+                    name="activate",
+                ),
+                path("activate/", create_password, name="activate_password"),
+                path("oauth", oauth, name="oauth"),
+                # Two factor redirect
+                path(
+                    "two_factor/required/",
+                    TWOFARequiredMessageView.as_view(),
+                    name="two_factor_required",
+                ),
+                path("two_factor/setup/", TWOFASetupView.as_view(), name="setup"),
+                path(
+                    "two_factor/backup_tokens/password/",
+                    TWOFABackupTokensPasswordView.as_view(),
+                    name="backup_tokens_password",
+                ),
+                path("two_factor/disable/", TWOFADisableView.as_view(), name="disable"),
+                path(
+                    "two_factor/admin/disable/<str:user_id>/",
+                    TWOFAAdminDisableView.as_view(),
+                    name="admin_disable",
+                ),
+            ]
+        ),
+    ),
 ]
 
 if settings.HIJACK_ENABLE:
     urlpatterns += [
-        path('account/become/', become, name='become'),
+        path("account/become/", become, name="become"),
     ]
diff --git a/hypha/apply/users/utils.py b/hypha/apply/users/utils.py
index f8d403b95f92dae2f667112cfe6ccca482c26375..e46c33ead6d40ac669555dd3114c76dee09bcc0a 100644
--- a/hypha/apply/users/utils.py
+++ b/hypha/apply/users/utils.py
@@ -5,7 +5,7 @@ from django.core.mail import send_mail
 from django.template.loader import render_to_string
 from django.urls import reverse
 from django.utils.encoding import force_bytes
-from django.utils.http import urlsafe_base64_encode
+from django.utils.http import url_has_allowed_host_and_scheme, urlsafe_base64_encode
 from django.utils.translation import gettext_lazy as _
 
 
@@ -35,7 +35,7 @@ def is_user_already_registered(email: str) -> (bool, str):
     if user_model.objects.filter(email__iexact=email):
         return (True, _("Email is already in use."))
 
-    return (False, '')
+    return (False, "")
 
 
 def can_use_oauth_check(user):
@@ -45,7 +45,7 @@ def can_use_oauth_check(user):
     or associate OAuth accounts
     """
     try:
-        domain = user.email.split('@')[-1]
+        domain = user.email.split("@")[-1]
         return domain in settings.SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS
     except AttributeError:
         # Anonymous user or setting not defined
@@ -53,7 +53,7 @@ def can_use_oauth_check(user):
     return False
 
 
-def send_activation_email(user, site=None):
+def send_activation_email(user, site=None, redirect_url=""):
     """
     Send the activation email. The activation key is the username,
     signed using TimestampSigner.
@@ -63,27 +63,29 @@ def send_activation_email(user, site=None):
 
     uid = urlsafe_base64_encode(force_bytes(user.pk))
 
-    activation_path = reverse('users:activate', kwargs={'uidb64': uid, 'token': token})
+    activation_path = reverse("users:activate", kwargs={"uidb64": uid, "token": token})
+    if redirect_url:
+        activation_path = f"{activation_path}?next={redirect_url}"
 
     timeout_days = settings.PASSWORD_RESET_TIMEOUT // (24 * 3600)
 
     context = {
-        'user': user,
-        'name': user.get_full_name(),
-        'username': user.get_username(),
-        'activation_path': activation_path,
-        'timeout_days': timeout_days,
-        'org_long_name': settings.ORG_LONG_NAME,
-        'org_short_name': settings.ORG_SHORT_NAME,
+        "user": user,
+        "name": user.get_full_name(),
+        "username": user.get_username(),
+        "activation_path": activation_path,
+        "timeout_days": timeout_days,
+        "org_long_name": settings.ORG_LONG_NAME,
+        "org_short_name": settings.ORG_SHORT_NAME,
     }
 
     if site:
         context.update(site=site)
 
-    subject = 'Account details for {username} at {org_long_name}'.format(**context)
+    subject = "Account details for {username} at {org_long_name}".format(**context)
     # Force subject to a single line to avoid header-injection issues.
-    subject = ''.join(subject.splitlines())
-    message = render_to_string('users/activation/email.txt', context)
+    subject = "".join(subject.splitlines())
+    message = render_to_string("users/activation/email.txt", context)
     user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
 
 
@@ -95,29 +97,63 @@ def send_confirmation_email(user, token, updated_email=None, site=None):
 
     uid = urlsafe_base64_encode(force_bytes(user.pk))
 
-    activation_path = reverse('users:confirm_email', kwargs={'uidb64': uid, 'token': token})
+    activation_path = reverse(
+        "users:confirm_email", kwargs={"uidb64": uid, "token": token}
+    )
 
     timeout_days = settings.PASSWORD_RESET_TIMEOUT // (24 * 3600)
 
     context = {
-        'user': user,
-        'name': user.get_full_name(),
-        'username': user.get_username(),
-        'unverified_email': updated_email,
-        'activation_path': activation_path,
-        'timeout_days': timeout_days,
-        'org_long_name': settings.ORG_LONG_NAME,
-        'org_short_name': settings.ORG_SHORT_NAME,
+        "user": user,
+        "name": user.get_full_name(),
+        "username": user.get_username(),
+        "unverified_email": updated_email,
+        "activation_path": activation_path,
+        "timeout_days": timeout_days,
+        "org_long_name": settings.ORG_LONG_NAME,
+        "org_short_name": settings.ORG_SHORT_NAME,
     }
 
     if site:
         context.update(site=site)
 
-    subject = 'Confirmation email for {unverified_email} at {org_long_name}'.format(**context)
+    subject = "Confirmation email for {unverified_email} at {org_long_name}".format(
+        **context
+    )
     # Force subject to a single line to avoid header-injection issues.
-    subject = ''.join(subject.splitlines())
-    message = render_to_string('users/email_change/confirm_email.txt', context)
+    subject = "".join(subject.splitlines())
+    message = render_to_string("users/email_change/confirm_email.txt", context)
     if updated_email:
         send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [updated_email])
     else:
         user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
+
+
+def get_redirect_url(
+    request, redirect_field: str, success_url_allowed_hosts=None
+) -> str:
+    """
+    Return the user-originating redirect URL if it's safe.
+
+    Args:
+        request (HttpRequest): The request object.
+        redirect_field (str): The name of a field containing the redirect URL.
+        success_url_allowed_hosts (set): A set of allowed hosts for the redirect URL.
+    """
+    # If no allowed hosts are provided, use settings.ALLOWED_HOSTS
+    if success_url_allowed_hosts is None:
+        success_url_allowed_hosts = set(settings.ALLOWED_HOSTS)
+
+    # Try to get the redirect URL from the request's POST data, and if it's not
+    # there, try to get it from the request's GET data. If it's not in either,
+    # default to an empty string.
+    redirect_to = request.POST.get(redirect_field, request.GET.get(redirect_field, ""))
+
+    # Check if the redirect URL is safe. If it is, return it. Otherwise, return
+    # an empty string.
+    url_is_safe = url_has_allowed_host_and_scheme(
+        url=redirect_to,
+        allowed_hosts={request.get_host(), *success_url_allowed_hosts},
+        require_https=request.is_secure(),
+    )
+    return redirect_to if url_is_safe else ""
diff --git a/hypha/apply/users/views.py b/hypha/apply/users/views.py
index d1810c341887da81b43e48b64e44a7f82ee4a2d2..f6e2146abe64463951885161fffa771388607bbb 100644
--- a/hypha/apply/users/views.py
+++ b/hypha/apply/users/views.py
@@ -1,4 +1,5 @@
 import datetime
+from typing import Any
 from urllib.parse import urlencode
 
 from django.conf import settings
@@ -7,10 +8,19 @@ from django.contrib.auth import get_user_model, login, update_session_auth_hash
 from django.contrib.auth.decorators import login_required, permission_required
 from django.contrib.auth.forms import AdminPasswordChangeForm
 from django.contrib.auth.tokens import PasswordResetTokenGenerator
+from django.contrib.auth.views import (
+    INTERNAL_RESET_SESSION_TOKEN,
+    SuccessURLAllowedHostsMixin,
+)
+from django.contrib.auth.views import (
+    PasswordResetConfirmView as DjPasswordResetConfirmView,
+)
+from django.contrib.auth.views import PasswordResetView as DjPasswordResetView
 from django.contrib.sites.shortcuts import get_current_site
 from django.core.exceptions import PermissionDenied
 from django.core.signing import BadSignature, Signer, TimestampSigner, dumps, loads
-from django.shortcuts import Http404, get_object_or_404, redirect, render
+from django.http import HttpResponseRedirect
+from django.shortcuts import Http404, get_object_or_404, redirect, render, resolve_url
 from django.template.response import TemplateResponse
 from django.urls import reverse, reverse_lazy
 from django.utils.decorators import method_decorator
@@ -18,6 +28,7 @@ from django.utils.encoding import force_str
 from django.utils.http import urlsafe_base64_decode
 from django.utils.translation import gettext_lazy as _
 from django.views.decorators.cache import never_cache
+from django.views.decorators.debug import sensitive_post_parameters
 from django.views.generic import UpdateView
 from django.views.generic.base import TemplateView, View
 from django.views.generic.edit import FormView
@@ -45,12 +56,18 @@ from .forms import (
     ProfileForm,
     TWOFAPasswordForm,
 )
-from .utils import send_confirmation_email
+from .utils import get_redirect_url, send_confirmation_email
 
 User = get_user_model()
 
-class RegisterView(View):
-    form = CustomUserCreationForm()
+
+@method_decorator(
+    ratelimit(key="ip", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+class RegisterView(SuccessURLAllowedHostsMixin, View):
+    redirect_field_name = "next"
+    form = CustomUserCreationForm
 
     def get(self, request):
         # We keep /register in the urls in order to test (where we turn on/off
@@ -60,80 +77,111 @@ class RegisterView(View):
             raise Http404
 
         if request.user.is_authenticated:
-            return redirect('dashboard:dashboard')
-        return render(request,'users/register.html',{'form':self.form})
+            return redirect("dashboard:dashboard")
 
-    def post(self,request):
+        ctx = {
+            "form": self.form(),
+            "redirect_url": get_redirect_url(request, self.redirect_field_name),
+        }
+        return render(request, "users/register.html", ctx)
+
+    def post(self, request):
         # See comment in get() above about doing this here rather than in urls
         if not settings.ENABLE_REGISTRATION_WITHOUT_APPLICATION:
             raise Http404
 
-        form=CustomUserCreationForm(request.POST)
-        context={}
+        form = self.form(data=request.POST)
+        context = {}
         if form.is_valid():
-            context['email']=form.cleaned_data['email']
-            context['full_name']=form.cleaned_data['full_name']
-
             # If using wagtail password management
-            if 'password1' in form.cleaned_data:
-                context['password']=form.cleaned_data['password1']
-
-            site=Site.find_for_request(self.request)
-            user,created = User.objects.get_or_create_and_notify(defaults={},site=site,**context)
+            if "password1" in form.cleaned_data:
+                context["password"] = form.cleaned_data["password1"]
+
+            site = Site.find_for_request(self.request)
+            user, created = User.objects.get_or_create_and_notify(
+                email=form.cleaned_data["email"],
+                site=site,
+                redirect_url=get_redirect_url(request, self.redirect_field_name),
+                defaults={
+                    "full_name": form.cleaned_data["full_name"],
+                },
+                **context,
+            )
             if created:
-                messages.success(request,'Please check your email to activate the account.')
-        else:
-            return render(request,'users/register.html',{'form':form})
-        return render(request,'users/register.html',{'form':self.form})
+                params = {"name": user.full_name, "email": user.email}
+                # redirect to success page with params as query params
+                return HttpResponseRedirect(
+                    resolve_url("users_public:register-success")
+                    + "?"
+                    + urlencode(params)
+                )
+        return render(request, "users/register.html", {"form": form})
+
 
-@method_decorator(ratelimit(key='ip', rate=settings.DEFAULT_RATE_LIMIT, method='POST'), name='dispatch')
-@method_decorator(ratelimit(key='post:email', rate=settings.DEFAULT_RATE_LIMIT, method='POST'), name='dispatch')
+class RegistrationSuccessView(TemplateView):
+    template_name = "users/register-success.html"
+
+
+@method_decorator(
+    ratelimit(key="ip", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+@method_decorator(
+    ratelimit(key="post:email", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
 class LoginView(TwoFactorLoginView):
     form_list = (
-        ('auth', CustomAuthenticationForm),
-        ('token', AuthenticationTokenForm),
-        ('backup', BackupTokenForm),
+        ("auth", CustomAuthenticationForm),
+        ("token", AuthenticationTokenForm),
+        ("backup", BackupTokenForm),
     )
 
     def get_context_data(self, form, **kwargs):
         context_data = super(LoginView, self).get_context_data(form, **kwargs)
         context_data["is_public_site"] = True
-        if Site.find_for_request(self.request) == ApplyHomePage.objects.first().get_site():
+        context_data["redirect_url"] = get_redirect_url(
+            self.request, self.redirect_field_name
+        )
+        if (
+            Site.find_for_request(self.request)
+            == ApplyHomePage.objects.first().get_site()
+        ):
             context_data["is_public_site"] = False
         return context_data
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class AccountView(UpdateView):
     form_class = ProfileForm
-    template_name = 'users/account.html'
+    template_name = "users/account.html"
 
     def get_object(self):
         return self.request.user
 
     def form_valid(self, form):
-        updated_email = form.cleaned_data['email']
-        name = form.cleaned_data['full_name']
-        slack = form.cleaned_data.get('slack', '')
+        updated_email = form.cleaned_data["email"]
+        name = form.cleaned_data["full_name"]
+        slack = form.cleaned_data.get("slack", "")
         user = get_object_or_404(User, id=self.request.user.id)
         if updated_email and updated_email != user.email:
-            base_url = reverse('users:email_change_confirm_password')
-            query_dict = {
-                'updated_email': updated_email,
-                'name': name,
-                'slack': slack
-            }
+            base_url = reverse("users:email_change_confirm_password")
+            query_dict = {"updated_email": updated_email, "name": name, "slack": slack}
 
             signer = TimestampSigner()
             signed_value = signer.sign(dumps(query_dict))
             # Using session variables for redirect validation
             token_signer = Signer()
-            self.request.session['signed_token'] = token_signer.sign(user.email)
-            return redirect('{}?{}'.format(base_url, urlencode({'value': signed_value})))
+            self.request.session["signed_token"] = token_signer.sign(user.email)
+            return redirect(
+                "{}?{}".format(base_url, urlencode({"value": signed_value}))
+            )
         return super(AccountView, self).form_valid(form)
 
-    def get_success_url(self,):
-        return reverse_lazy('users:account')
+    def get_success_url(
+        self,
+    ):
+        return reverse_lazy("users:account")
 
     def get_context_data(self, **kwargs):
         if self.request.user.is_superuser and settings.HIJACK_ENABLE:
@@ -141,7 +189,9 @@ class AccountView(UpdateView):
         else:
             swappable_form = None
 
-        show_change_password = password_management_enabled() and self.request.user.has_usable_password(),
+        show_change_password = (
+            password_management_enabled() and self.request.user.has_usable_password(),
+        )
 
         return super().get_context_data(
             swappable_form=swappable_form,
@@ -151,76 +201,79 @@ class AccountView(UpdateView):
         )
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class EmailChangePasswordView(FormView):
     form_class = EmailChangePasswordForm
-    template_name = 'users/email_change/confirm_password.html'
-    success_url = reverse_lazy('users:confirm_link_sent')
-    title = _('Enter Password')
+    template_name = "users/email_change/confirm_password.html"
+    success_url = reverse_lazy("users:confirm_link_sent")
+    title = _("Enter Password")
 
     def get_initial(self):
         """
         Validating the redirection from account via session variable
         """
-        if 'signed_token' not in self.request.session:
+        if "signed_token" not in self.request.session:
             raise Http404
         signer = Signer()
         try:
-            signer.unsign(self.request.session['signed_token'])
+            signer.unsign(self.request.session["signed_token"])
         except BadSignature as e:
             raise Http404 from e
         return super(EmailChangePasswordView, self).get_initial()
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
+        kwargs["user"] = self.request.user
         return kwargs
 
     def form_valid(self, form):
         # Make sure redirection url is inaccessible after email is sent
-        if 'signed_token' in self.request.session:
-            del self.request.session['signed_token']
+        if "signed_token" in self.request.session:
+            del self.request.session["signed_token"]
         signer = TimestampSigner()
         try:
             unsigned_value = signer.unsign(
-                self.request.GET.get('value'),
-                max_age=settings.PASSWORD_PAGE_TIMEOUT
+                self.request.GET.get("value"), max_age=settings.PASSWORD_PAGE_TIMEOUT
             )
         except Exception:
-            messages.error(self.request, _("Password Page timed out. Try changing the email again."))
-            return redirect('users:account')
+            messages.error(
+                self.request,
+                _("Password Page timed out. Try changing the email again."),
+            )
+            return redirect("users:account")
         value = loads(unsigned_value)
         form.save(**value)
         send_confirmation_email(
             self.request.user,
-            signer.sign(dumps(value['updated_email'])),
-            updated_email=value['updated_email'],
-            site=Site.find_for_request(self.request))
+            signer.sign(dumps(value["updated_email"])),
+            updated_email=value["updated_email"],
+            site=Site.find_for_request(self.request),
+        )
         return super(EmailChangePasswordView, self).form_valid(form)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class EmailChangeDoneView(TemplateView):
-    template_name = 'users/email_change/done.html'
-    title = _('Verify Email')
+    template_name = "users/email_change/done.html"
+    title = _("Verify Email")
 
 
 @login_required()
 def become(request):
     if not settings.HIJACK_ENABLE:
-        raise Http404(_('Hijack feature is not enabled.'))
+        raise Http404(_("Hijack feature is not enabled."))
 
     if not request.user.is_superuser:
         raise PermissionDenied()
 
-    id = request.POST.get('user_pk')
+    id = request.POST.get("user_pk")
     if request.POST and id:
         target_user = User.objects.get(pk=id)
         if target_user.is_superuser:
             raise PermissionDenied()
 
         return AcquireUserView.as_view()(request)
-    return redirect('users:account')
+    return redirect("users:account")
 
 
 @login_required()
@@ -228,29 +281,31 @@ def become(request):
 def oauth(request):
     """Generic, empty view for the OAuth associations."""
 
-    return TemplateResponse(request, 'users/oauth.html', {})
+    return TemplateResponse(request, "users/oauth.html", {})
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class EmailChangeConfirmationView(TemplateView):
     def get(self, request, *args, **kwargs):
-        user = self.get_user(kwargs.get('uidb64'))
-        email = self.unsigned(kwargs.get('token'))
+        user = self.get_user(kwargs.get("uidb64"))
+        email = self.unsigned(kwargs.get("token"))
         if user and email:
             if user.email != email:
                 user.email = email
                 user.save()
-                messages.success(request, _(f"Your email has been successfully updated to {email}!"))
-            return redirect('users:account')
+                messages.success(
+                    request, _(f"Your email has been successfully updated to {email}!")
+                )
+            return redirect("users:account")
 
-        return render(request, 'users/email_change/invalid_link.html')
+        return render(request, "users/email_change/invalid_link.html")
 
     def unsigned(self, token):
         signer = TimestampSigner()
         try:
             unsigned_value = signer.unsign(
                 token,
-                max_age=datetime.timedelta(seconds=settings.PASSWORD_RESET_TIMEOUT)
+                max_age=datetime.timedelta(seconds=settings.PASSWORD_RESET_TIMEOUT),
             )
         except Exception:
             return False
@@ -263,32 +318,35 @@ class EmailChangeConfirmationView(TemplateView):
         doesn't.
         """
         try:
-            user = User.objects.get(**{
-                'pk': force_str(urlsafe_base64_decode(uidb64))
-            })
+            user = User.objects.get(**{"pk": force_str(urlsafe_base64_decode(uidb64))})
             return user
         except (TypeError, ValueError, OverflowError, User.DoesNotExist):
             return None
 
 
-class ActivationView(TemplateView):
+class ActivationView(SuccessURLAllowedHostsMixin, TemplateView):
+    redirect_field_name = "next"
+
     def get(self, request, *args, **kwargs):
-        user = self.get_user(kwargs.get('uidb64'))
+        user = self.get_user(kwargs.get("uidb64"))
 
-        if self.valid(user, kwargs.get('token')):
+        if self.valid(user, kwargs.get("token")):
             user.backend = settings.CUSTOM_AUTH_BACKEND
             login(request, user)
             if (
-                settings.WAGTAILUSERS_PASSWORD_ENABLED and
-                settings.ENABLE_REGISTRATION_WITHOUT_APPLICATION
+                settings.WAGTAILUSERS_PASSWORD_ENABLED
+                and settings.ENABLE_REGISTRATION_WITHOUT_APPLICATION
             ):
                 # In this case, the user entered a password while registering,
                 # and so they shouldn't need to activate a password
-                return redirect('users:account')
+                return redirect("users:account")
             else:
-                return redirect('users:activate_password')
+                url = reverse("users:activate_password")
+                if redirect_url := get_redirect_url(request, self.redirect_field_name):
+                    url = f"{url}?next={redirect_url}"
+                return redirect(url)
 
-        return render(request, 'users/activation/invalid.html')
+        return render(request, "users/activation/invalid.html")
 
     def valid(self, user, token):
         """
@@ -306,9 +364,7 @@ class ActivationView(TemplateView):
         doesn't.
         """
         try:
-            user = User.objects.get(**{
-                'pk': force_str(urlsafe_base64_decode(uidb64))
-            })
+            user = User.objects.get(**{"pk": force_str(urlsafe_base64_decode(uidb64))})
             return user
         except (TypeError, ValueError, OverflowError, User.DoesNotExist):
             return None
@@ -318,100 +374,170 @@ def create_password(request):
     """
     A custom view for the admin password change form used for account activation.
     """
+    redirect_url = get_redirect_url(request, redirect_field="next")
 
-    if request.method == 'POST':
+    if request.method == "POST":
         form = AdminPasswordChangeForm(request.user, request.POST)
+
         if form.is_valid():
             user = form.save()
             update_session_auth_hash(request, user)  # Important!
-            messages.success(request, 'Your password was successfully updated!')
-            return redirect('users:account')
+            messages.success(request, "Your password was successfully updated!")
+            if redirect_url:
+                return redirect(redirect_url)
+            return redirect("users:account")
         else:
-            messages.error(request, 'Please correct the errors below.')
+            messages.error(request, "Please correct the errors below.")
     else:
         form = AdminPasswordChangeForm(request.user)
-    return render(request, 'users/change_password.html', {
-        'form': form
-    })
+
+    return render(
+        request,
+        "users/change_password.html",
+        {
+            "form": form,
+            "redirect_url": redirect_url,
+        },
+    )
 
 
-@method_decorator(never_cache, name='dispatch')
-@method_decorator(login_required, name='dispatch')
+@method_decorator(
+    ratelimit(key="post:email", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+@method_decorator(
+    ratelimit(key="ip", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+class PasswordResetView(DjPasswordResetView):
+    redirect_field_name = "next"
+    email_template_name = "users/password_reset/email.txt"
+    template_name = "users/password_reset/form.html"
+    success_url = reverse_lazy("users:password_reset_done")
+
+    def get_context_data(self, **kwargs):
+        ctx = super().get_context_data(**kwargs)
+        ctx["redirect_url"] = get_redirect_url(self.request, self.redirect_field_name)
+        return ctx
+
+    def get_extra_email_context(self):
+        return {
+            "redirect_url": get_redirect_url(self.request, self.redirect_field_name),
+            "site": Site.find_for_request(self.request),
+            "org_short_name": settings.ORG_SHORT_NAME,
+            "org_long_name": settings.ORG_LONG_NAME,
+        }
+
+    def form_valid(self, form):
+        """
+        Overrides default django form_valid to pass extra context to send_email method
+        """
+        opts = {
+            "use_https": self.request.is_secure(),
+            "token_generator": self.token_generator,
+            "from_email": self.from_email,
+            "email_template_name": self.email_template_name,
+            "subject_template_name": self.subject_template_name,
+            "request": self.request,
+            "html_email_template_name": self.html_email_template_name,
+            "extra_email_context": self.get_extra_email_context(),
+        }
+        form.save(**opts)
+        return HttpResponseRedirect(self.get_success_url())
+
+
+@method_decorator(never_cache, name="dispatch")
+@method_decorator(login_required, name="dispatch")
 class TWOFASetupView(TwoFactorSetupView):
     def get_issuer(self):
         return get_current_site(self.request).name
 
     def get_context_data(self, form, **kwargs):
         context = super().get_context_data(form, **kwargs)
-        if self.steps.current == 'generator':
+        if self.steps.current == "generator":
             try:
                 username = self.request.user.get_username()
             except AttributeError:
                 username = self.request.user.username
 
-            otpauth_url = get_otpauth_url(accountname=username,
-                                          issuer=self.get_issuer(),
-                                          secret=context['secret_key'],
-                                          digits=totp_digits())
-            context.update({
-                'otpauth_url': otpauth_url,
-            })
+            otpauth_url = get_otpauth_url(
+                accountname=username,
+                issuer=self.get_issuer(),
+                secret=context["secret_key"],
+                digits=totp_digits(),
+            )
+            context.update(
+                {
+                    "otpauth_url": otpauth_url,
+                }
+            )
 
         return context
 
 
-@method_decorator(login_required, name='dispatch')
-@method_decorator(ratelimit(key='user', rate=settings.DEFAULT_RATE_LIMIT, method='POST'), name='dispatch')
+@method_decorator(login_required, name="dispatch")
+@method_decorator(
+    ratelimit(key="user", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
 class TWOFABackupTokensPasswordView(TwoFactorBackupTokensView):
     """
     Require password to see backup codes
     """
+
     form_class = TWOFAPasswordForm
-    success_url = reverse_lazy('two_factor:backup_tokens')
-    template_name = 'two_factor/core/backup_tokens_password.html'
+    success_url = reverse_lazy("two_factor:backup_tokens")
+    template_name = "two_factor/core/backup_tokens_password.html"
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
+        kwargs["user"] = self.request.user
         return kwargs
 
 
-@method_decorator(ratelimit(key='user', rate=settings.DEFAULT_RATE_LIMIT, method='POST'), name='dispatch')
-@method_decorator(login_required, name='dispatch')
+@method_decorator(
+    ratelimit(key="user", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+@method_decorator(login_required, name="dispatch")
 class TWOFADisableView(TwoFactorDisableView):
     """
     View for disabling two-factor for a user's account.
     """
-    template_name = 'two_factor/profile/disable.html'
-    success_url = reverse_lazy('users:account')
+
+    template_name = "two_factor/profile/disable.html"
+    success_url = reverse_lazy("users:account")
     form_class = TWOFAPasswordForm
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
-        kwargs['user'] = self.request.user
+        kwargs["user"] = self.request.user
         return kwargs
 
 
-@method_decorator(permission_required(change_user_perm, raise_exception=True), name='dispatch')
+@method_decorator(
+    permission_required(change_user_perm, raise_exception=True), name="dispatch"
+)
 class TWOFAAdminDisableView(FormView):
     """
     View for PasswordForm to confirm the Disable 2FA process on wagtail admin.
     """
+
     form_class = TWOFAPasswordForm
-    template_name = 'two_factor/admin/disable.html'
+    template_name = "two_factor/admin/disable.html"
     user = None
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
         # pass request's user to form to validate the password
-        kwargs['user'] = self.request.user
+        kwargs["user"] = self.request.user
         # store the user from url for redirecting to the same user's account edit page
-        self.user = get_object_or_404(User, pk=self.kwargs.get('user_id'))
+        self.user = get_object_or_404(User, pk=self.kwargs.get("user_id"))
         return kwargs
 
     def get_form(self, form_class=None):
         form = super(TWOFAAdminDisableView, self).get_form(form_class=form_class)
-        form.fields['password'].label = "Password"
+        form.fields["password"].label = "Password"
         return form
 
     def form_valid(self, form):
@@ -420,13 +546,68 @@ class TWOFAAdminDisableView(FormView):
         return redirect(self.get_success_url())
 
     def get_success_url(self):
-        return reverse('wagtailusers_users:edit',  args=[self.user.id])
+        return reverse("wagtailusers_users:edit", args=[self.user.id])
 
     def get_context_data(self, **kwargs):
         ctx = super(TWOFAAdminDisableView, self).get_context_data(**kwargs)
-        ctx['user'] = self.user
+        ctx["user"] = self.user
         return ctx
 
 
 class TWOFARequiredMessageView(TemplateView):
-    template_name = 'two_factor/core/two_factor_required.html'
+    template_name = "two_factor/core/two_factor_required.html"
+
+
+class PasswordResetConfirmView(DjPasswordResetConfirmView):
+    redirect_field_name = "next"
+    template_name = "users/password_reset/confirm.html"
+    post_reset_login = True
+    post_reset_login_backend = settings.CUSTOM_AUTH_BACKEND
+    success_url = reverse_lazy("users:account")
+
+    def get_success_url(self) -> str:
+        if next_path := get_redirect_url(self.request, self.redirect_field_name):
+            return next_path
+        return super().get_success_url()
+
+    def get_context_data(self, **kwargs: Any) -> Any:
+        context = super().get_context_data(**kwargs)
+        context["redirect_url"] = get_redirect_url(
+            self.request, self.redirect_field_name
+        )
+        return context
+
+    @method_decorator(sensitive_post_parameters())
+    @method_decorator(never_cache)
+    def dispatch(self, *args, **kwargs):
+        assert "uidb64" in kwargs and "token" in kwargs
+
+        self.validlink = False
+        self.user = self.get_user(kwargs["uidb64"])
+
+        if self.user is not None:
+            token = kwargs["token"]
+            if token == self.reset_url_token:
+                session_token = self.request.session.get(INTERNAL_RESET_SESSION_TOKEN)
+                if self.token_generator.check_token(self.user, session_token):
+                    # If the token is valid, display the password reset form.
+                    self.validlink = True
+                    return super().dispatch(*args, **kwargs)
+            else:
+                if self.token_generator.check_token(self.user, token):
+                    # Store the token in the session and redirect to the
+                    # password reset form at a URL without the token. That
+                    # avoids the possibility of leaking the token in the
+                    # HTTP Referer header.
+                    self.request.session[INTERNAL_RESET_SESSION_TOKEN] = token
+                    redirect_url = self.request.path.replace(
+                        token, self.reset_url_token
+                    )
+
+                    # Add handler for '?next' redirect parameter.
+                    if next_path := get_redirect_url(
+                        self.request, self.redirect_field_name
+                    ):
+                        redirect_url = f"{redirect_url}?next={next_path}"
+
+                    return HttpResponseRedirect(redirect_url)
diff --git a/hypha/apply/users/wagtail_hooks.py b/hypha/apply/users/wagtail_hooks.py
index eb3e6fe2cd347db0cd5e60b2369b56513b9ef3ec..9c7c1c70d54539982cfc68805520f8bff06b16ee 100644
--- a/hypha/apply/users/wagtail_hooks.py
+++ b/hypha/apply/users/wagtail_hooks.py
@@ -8,10 +8,10 @@ from .admin_views import CustomGroupViewSet, index
 from .utils import send_activation_email
 
 
-@hooks.register('register_admin_urls')
+@hooks.register("register_admin_urls")
 def register_admin_urls():
     return [
-        re_path(r'^users/$', index, name='index'),
+        re_path(r"^users/$", index, name="index"),
     ]
 
 
@@ -20,7 +20,7 @@ def register_viewset():
     return CustomGroupViewSet("groups", url_prefix="groups")
 
 
-@hooks.register('after_create_user')
+@hooks.register("after_create_user")
 def notify_after_create_user(request, user):
     messenger(
         MESSAGES.STAFF_ACCOUNT_CREATED,
@@ -32,13 +32,14 @@ def notify_after_create_user(request, user):
     site = Site.find_for_request(request)
     send_activation_email(user, site)
 
-@hooks.register('after_edit_user')
+
+@hooks.register("after_edit_user")
 def notify_after_edit_user(request, user):
-    roles = list(user.groups.values_list('name', flat=True))
+    roles = list(user.groups.values_list("name", flat=True))
     if user.is_superuser:
-        roles.append('Administrator')
+        roles.append("Administrator")
     if roles:
-        roles = ', '.join(roles)
+        roles = ", ".join(roles)
         messenger(
             MESSAGES.STAFF_ACCOUNT_EDITED,
             request=request,
diff --git a/hypha/apply/utils/admin.py b/hypha/apply/utils/admin.py
index 416f2fb2f4d2ed7b07d8e5997a866db6ba72a509..4bd8fc2c8efaeec689650ff73772d2929b263db3 100644
--- a/hypha/apply/utils/admin.py
+++ b/hypha/apply/utils/admin.py
@@ -15,11 +15,13 @@ class ListRelatedMixin:
 
     def get_queryset(self, request):
         qs = super().get_queryset(request)
-        related = [f'{form}_set__{field}' for form, field in self.related_models]
+        related = [f"{form}_set__{field}" for form, field in self.related_models]
         return qs.prefetch_related(*related)
 
     def _list_related(self, obj, form, field):
-        return ', '.join(getattr(obj, f'{form}_set').values_list(f'{field}__title', flat=True))
+        return ", ".join(
+            getattr(obj, f"{form}_set").values_list(f"{field}__title", flat=True)
+        )
 
     def used_by(self, obj):
         rows = []
@@ -27,7 +29,7 @@ class ListRelatedMixin:
             related = self._list_related(obj, form, field)
             if related:
                 rows.append(related)
-        return ', '.join(rows)
+        return ", ".join(rows)
 
 
 class RelatedFormsMixin:
@@ -38,10 +40,12 @@ class RelatedFormsMixin:
     """
 
     def application_forms(self, obj):
-
         def build_urls(application_forms):
             for application_form in application_forms:
-                url = reverse('funds_applicationform_modeladmin_edit', args=[application_form.form.id])
+                url = reverse(
+                    "funds_applicationform_modeladmin_edit",
+                    args=[application_form.form.id],
+                )
                 yield f'<a href="{url}">{application_form}</a>'
 
         urls = list(build_urls(obj.forms.all()))
@@ -49,12 +53,14 @@ class RelatedFormsMixin:
         if not urls:
             return
 
-        return mark_safe('<br />'.join(urls))
+        return mark_safe("<br />".join(urls))
 
     def review_forms(self, obj):
         def build_urls(review_forms):
             for review_form in review_forms:
-                url = reverse('review_reviewform_modeladmin_edit', args=[review_form.form.id])
+                url = reverse(
+                    "review_reviewform_modeladmin_edit", args=[review_form.form.id]
+                )
                 yield f'<a href="{url}">{review_form}</a>'
 
         urls = list(build_urls(obj.review_forms.all()))
@@ -62,12 +68,15 @@ class RelatedFormsMixin:
         if not urls:
             return
 
-        return mark_safe('<br />'.join(urls))
+        return mark_safe("<br />".join(urls))
 
     def determination_forms(self, obj):
         def build_urls(determination_forms):
             for determination_form in determination_forms:
-                url = reverse('determinations_determinationform_modeladmin_edit', args=[determination_form.form.id])
+                url = reverse(
+                    "determinations_determinationform_modeladmin_edit",
+                    args=[determination_form.form.id],
+                )
                 yield f'<a href="{url}">{determination_form}</a>'
 
         urls = list(build_urls(obj.determination_forms.all()))
@@ -75,4 +84,4 @@ class RelatedFormsMixin:
         if not urls:
             return
 
-        return mark_safe('<br />'.join(urls))
+        return mark_safe("<br />".join(urls))
diff --git a/hypha/apply/utils/apps.py b/hypha/apply/utils/apps.py
index 7a7dbfb38f292310f68497267dec47cc2612780d..1f9a3760c5f0e958f0b0318a1011a3bbfdecf937 100644
--- a/hypha/apply/utils/apps.py
+++ b/hypha/apply/utils/apps.py
@@ -2,5 +2,5 @@ from django.apps import AppConfig
 
 
 class UtilsConfig(AppConfig):
-    name = 'hypha.apply.utils'
-    label = 'apply_utils'
+    name = "hypha.apply.utils"
+    label = "apply_utils"
diff --git a/hypha/apply/utils/blocks.py b/hypha/apply/utils/blocks.py
index 843ef8ae32f8bc45a748e3b2aff7f0cfea22a63c..0f1cd2af0e16f6e974b917ea10053c34d6d9429c 100644
--- a/hypha/apply/utils/blocks.py
+++ b/hypha/apply/utils/blocks.py
@@ -19,9 +19,7 @@ from hypha.apply.utils.options import RICH_TEXT_WIDGET
 
 def find_duplicates(items):
     counted = Counter(items)
-    duplicates = [
-        name for name, count in counted.items() if count > 1
-    ]
+    duplicates = [name for name, count in counted.items() if count > 1]
     return duplicates
 
 
@@ -30,7 +28,7 @@ def prettify_names(sequence):
 
 
 def nice_field_name(name):
-    return name.title().replace('_', ' ')
+    return name.title().replace("_", " ")
 
 
 def show_admin_form_error_messages(request, form):
@@ -46,44 +44,50 @@ class RichTextFieldBlock(TextFieldBlock):
     widget = RICH_TEXT_WIDGET
 
     class Meta:
-        label = _('Rich text field')
-        icon = 'form'
+        label = _("Rich text field")
+        icon = "form"
 
     def get_searchable_content(self, value, data):
-        return bleach.clean(data or '', tags=[], strip=True)
+        return bleach.clean(data or "", tags=[], strip=True)
 
     def no_response(self):
-        return '<p>-</p>'
+        return "<p>-</p>"
 
 
 class MarkdownTextFieldBlock(TextFieldBlock):
     widget = PagedownWidget()
-    template = ''
+    template = ""
 
     class Meta:
-        label = _('Markdown text field')
-        icon = 'form'
-        template = 'stream_forms/render_markdown_field.html'
+        label = _("Markdown text field")
+        icon = "form"
+        template = "stream_forms/render_markdown_field.html"
 
     def get_searchable_content(self, value, data):
-        return bleach.clean(data or '', tags=[], strip=True)
+        return bleach.clean(data or "", tags=[], strip=True)
 
     def no_response(self):
-        return '<p>-</p>'
+        return "<p>-</p>"
 
 
 class CustomFormFieldsBlock(StreamBlock):
-    rich_text = RichTextFieldBlock(group=_('Fields'))
-    markdown_text = MarkdownTextFieldBlock(group=_('Fields'))
+    rich_text = RichTextFieldBlock(group=_("Fields"))
+    markdown_text = MarkdownTextFieldBlock(group=_("Fields"))
     required_blocks = []
     single_blocks = []
 
     def __init__(self, *args, **kwargs):
         # The space before " Required" is to make the group sort first. Ugly but easy, and it works.
-        child_blocks = [(block.name, block(group=_(' Required'))) for block in self.required_blocks]
-        child_blocks += [(block.name, block(group=_('Custom'))) for block in self.single_blocks]
+        child_blocks = [
+            (block.name, block(group=_(" Required"))) for block in self.required_blocks
+        ]
+        child_blocks += [
+            (block.name, block(group=_("Custom"))) for block in self.single_blocks
+        ]
         self.required_block_names = [block.name for block in self.required_blocks]
-        self.single_block_names = [block.name for block in self.single_blocks] + self.required_block_names
+        self.single_block_names = [
+            block.name for block in self.single_blocks
+        ] + self.required_block_names
 
         super().__init__(child_blocks, *args, **kwargs)
 
@@ -99,40 +103,52 @@ class CustomFormFieldsBlock(StreamBlock):
         missing = set(self.required_block_names) - set(block_types)
 
         duplicates = [
-            name for name in find_duplicates(block_types)
+            name
+            for name in find_duplicates(block_types)
             if name in self.single_block_names
         ]
 
         all_errors = []
         if missing:
             all_errors.append(
-                'You are missing the following required fields: {}'.format(', '.join(prettify_names(missing)))
+                "You are missing the following required fields: {}".format(
+                    ", ".join(prettify_names(missing))
+                )
             )
 
         if duplicates:
             all_errors.append(
-                'The following fields must be included only once: {}'.format(', '.join(prettify_names(duplicates)))
+                "The following fields must be included only once: {}".format(
+                    ", ".join(prettify_names(duplicates))
+                )
             )
             for i, block_name in enumerate(block_types):
                 if block_name in duplicates:
-                    self.add_error_to_child(error_dict, i, 'info', 'Duplicate field')
+                    self.add_error_to_child(error_dict, i, "info", "Duplicate field")
 
         for block in value:
-            if hasattr(block.block, 'child_blocks'):
+            if hasattr(block.block, "child_blocks"):
                 for child_block_name, child_block in block.block.child_blocks.items():
                     if child_block.required and not block.value[child_block_name]:
                         all_errors.append(
-                            '{} cannot be empty for {}'.format(child_block.label, block.block.label)
+                            "{} cannot be empty for {}".format(
+                                child_block.label, block.block.label
+                            )
                         )
-                    if isinstance(child_block, ListBlock) and child_block.child_block.required:
+                    if (
+                        isinstance(child_block, ListBlock)
+                        and child_block.child_block.required
+                    ):
                         for child_value in block.value[child_block_name]:
                             if not child_value:
                                 all_errors.append(
-                                    '{} cannot be empty for {}'.format(child_block.label, block.block.label)
+                                    "{} cannot be empty for {}".format(
+                                        child_block.label, block.block.label
+                                    )
                                 )
 
         if all_errors or error_dict:
-            error_dict['__all__'] = all_errors
+            error_dict["__all__"] = all_errors
             raise ValidationError(all_errors, params=error_dict)
 
         return value
@@ -143,7 +159,7 @@ class CustomFormFieldsBlock(StreamBlock):
             errors[child_number].data[0].params[field] = new_error
         except KeyError:
             errors[child_number] = ErrorList(
-                [ValidationError('Error', params={field: new_error})]
+                [ValidationError("Error", params={field: new_error})]
             )
 
     def to_python(self, value):
@@ -153,8 +169,8 @@ class CustomFormFieldsBlock(StreamBlock):
         """
         # If the data type is missing, fallback to a CharField
         for child_data in value:
-            if child_data['type'] not in self.child_blocks:
-                child_data['type'] = 'char'
+            if child_data["type"] not in self.child_blocks:
+                child_data["type"] = "char"
 
         return StreamValue(self, value, is_lazy=True)
 
@@ -164,33 +180,43 @@ class SingleIncludeStatic(StaticBlock):
     helps display the error in a noticeable way.
     """
 
-    def __init__(self, *args, description='', **kwargs):
+    def __init__(self, *args, description="", **kwargs):
         self.description = description
         super().__init__(*args, **kwargs)
 
     class Meta:
-        admin_text = 'Must be included in the form only once.'
+        admin_text = "Must be included in the form only once."
 
     def render_form(self, *args, **kwargs):
-        errors = kwargs.pop('errors')
+        errors = kwargs.pop("errors")
         if errors:
             # Pretend the error is a readonly input so that we get nice formatting
             # Issue discussed here: https://github.com/wagtail/wagtail/issues/4122
-            error_message = '<div class="error"><input readonly placeholder="{}"></div>'.format(errors[0])
+            error_message = (
+                '<div class="error"><input readonly placeholder="{}"></div>'.format(
+                    errors[0]
+                )
+            )
         else:
-            error_message = ''
+            error_message = ""
         form = super().render_form(*args, **kwargs)
-        form = '<br>'.join([self.description, form]) + error_message
+        form = "<br>".join([self.description, form]) + error_message
         return mark_safe(form)
 
     def deconstruct(self):
-        return ('wagtail.blocks.static_block.StaticBlock', (), {})
+        return ("wagtail.blocks.static_block.StaticBlock", (), {})
 
 
 class SingleIncludeMixin:
     def __init__(self, *args, **kwargs):
-        info_name = f'{self._meta_class.label} Field' if self._meta_class.label else f'{self.name.title()} Field'
-        child_blocks = [('info', SingleIncludeStatic(label=info_name, description=self.description))]
+        info_name = (
+            f"{self._meta_class.label} Field"
+            if self._meta_class.label
+            else f"{self.name.title()} Field"
+        )
+        child_blocks = [
+            ("info", SingleIncludeStatic(label=info_name, description=self.description))
+        ]
         super().__init__(child_blocks, *args, **kwargs)
 
 
@@ -205,5 +231,5 @@ class MustIncludeFieldBlock(SingleIncludeMixin, FormFieldBlock):
 
     def get_field_kwargs(self, struct_value):
         kwargs = super().get_field_kwargs(struct_value)
-        kwargs['required'] = True
+        kwargs["required"] = True
         return kwargs
diff --git a/hypha/apply/utils/image.py b/hypha/apply/utils/image.py
index e255d0426decc87b224150072a3bf6d3ee591cd8..8ee570333fc2da5a78f7a2d9772160be88e57ec9 100644
--- a/hypha/apply/utils/image.py
+++ b/hypha/apply/utils/image.py
@@ -4,7 +4,7 @@ from django.utils.html import format_html
 
 
 def image_url_cache_key(image_id, spec):
-    return f'image_url_cache_{image_id}_{spec}'
+    return f"image_url_cache_{image_id}_{spec}"
 
 
 def generate_image_url(image, filter_spec):
@@ -13,13 +13,14 @@ def generate_image_url(image, filter_spec):
     if url:
         return url
     from wagtail.images.views.serve import generate_signature
+
     signature = generate_signature(image.id, filter_spec)
-    url = reverse('wagtailimages_serve', args=(signature, image.id, filter_spec))
-    url += image.file.name[len('original_images/'):]
+    url = reverse("wagtailimages_serve", args=(signature, image.id, filter_spec))
+    url += image.file.name[len("original_images/") :]
     cache.set(cache_key, url)
     return url
 
 
-def generate_image_tag(image, filter_spec, html_class=''):
+def generate_image_tag(image, filter_spec, html_class=""):
     url = generate_image_url(image, filter_spec)
     return format_html(f'<img alt="{image.title}" class="{html_class}"src="{url}">')
diff --git a/hypha/apply/utils/migrations/0001_add_pdf_page_size_setting.py b/hypha/apply/utils/migrations/0001_add_pdf_page_size_setting.py
index 37620a7d1065971329e5e643c890f9159c5e5ce6..6f1ceea60f36ed8fc50c8616fdcd75f6132cb1ac 100644
--- a/hypha/apply/utils/migrations/0001_add_pdf_page_size_setting.py
+++ b/hypha/apply/utils/migrations/0001_add_pdf_page_size_setting.py
@@ -5,23 +5,49 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0045_assign_unlock_grouppagepermission'),
+        ("wagtailcore", "0045_assign_unlock_grouppagepermission"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PDFPageSettings',
+            name="PDFPageSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('download_page_size', models.CharField(choices=[('A4', 'A4'), ('legal', 'Legal'), ('letter', 'Letter')], default='legal', help_text='Page size of downloadable Project and Submission PDFs', max_length=6)),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "download_page_size",
+                    models.CharField(
+                        choices=[
+                            ("A4", "A4"),
+                            ("legal", "Legal"),
+                            ("letter", "Letter"),
+                        ],
+                        default="legal",
+                        help_text="Page size of downloadable Project and Submission PDFs",
+                        max_length=6,
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'pdf settings',
+                "verbose_name": "pdf settings",
             },
         ),
     ]
diff --git a/hypha/apply/utils/models.py b/hypha/apply/utils/models.py
index cdd22890ee9694f81ee7b327eb168dbbcd8ef693..3e4273840d2161cf091793af5b32e03b23601878 100644
--- a/hypha/apply/utils/models.py
+++ b/hypha/apply/utils/models.py
@@ -6,25 +6,25 @@ from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
 
 @register_setting
 class PDFPageSettings(BaseSiteSetting):
-    A4 = 'A4'
-    LEGAL = 'legal'
-    LETTER = 'letter'
+    A4 = "A4"
+    LEGAL = "legal"
+    LETTER = "letter"
     PAGE_SIZES = [
-        (A4, 'A4'),
-        (LEGAL, 'Legal'),
-        (LETTER, 'Letter'),
+        (A4, "A4"),
+        (LEGAL, "Legal"),
+        (LETTER, "Letter"),
     ]
 
     class Meta:
-        verbose_name = 'pdf settings'
+        verbose_name = "pdf settings"
 
     download_page_size = models.CharField(
         choices=PAGE_SIZES,
         default=LEGAL,
         max_length=6,
-        help_text=_('Page size of downloadable Project and Submission PDFs')
+        help_text=_("Page size of downloadable Project and Submission PDFs"),
     )
 
     panels = [
-        FieldPanel('download_page_size'),
+        FieldPanel("download_page_size"),
     ]
diff --git a/hypha/apply/utils/options.py b/hypha/apply/utils/options.py
index 8c7c6c8d6572fc6fae1150220a552f0adc948bdd..c89b72ea3b476e810530323782abbeb1ae1c0640 100644
--- a/hypha/apply/utils/options.py
+++ b/hypha/apply/utils/options.py
@@ -1,30 +1,36 @@
 from tinymce.widgets import TinyMCE
 
 MCE_ATTRIBUTES = {
-    'elementpath': False,
-    'branding': False,
-    'contextmenu': False,
-    'entity_encoding': 'raw',
-    'plugins': 'link table lists wordcount',
-    'toolbar1': 'undo redo | styleselect | bold italic | bullist numlist | table | link',
-    'style_formats': [
-        {'title': 'Headers', 'items': [
-            {'title': 'Header 1', 'format': 'h1'},
-            {'title': 'Header 2', 'format': 'h2'},
-            {'title': 'Header 3', 'format': 'h3'},
-        ]},
-        {'title': 'Inline', 'items': [
-            {'title': 'Bold', 'icon': 'bold', 'format': 'bold'},
-            {'title': 'Italic', 'icon': 'italic', 'format': 'italic'},
-            {'title': 'Underline', 'icon': 'underline', 'format': 'underline'},
-        ]},
+    "elementpath": False,
+    "branding": False,
+    "contextmenu": False,
+    "entity_encoding": "raw",
+    "plugins": "link table lists wordcount",
+    "toolbar1": "undo redo | styleselect | bold italic | bullist numlist | table | link",
+    "style_formats": [
+        {
+            "title": "Headers",
+            "items": [
+                {"title": "Header 1", "format": "h1"},
+                {"title": "Header 2", "format": "h2"},
+                {"title": "Header 3", "format": "h3"},
+            ],
+        },
+        {
+            "title": "Inline",
+            "items": [
+                {"title": "Bold", "icon": "bold", "format": "bold"},
+                {"title": "Italic", "icon": "italic", "format": "italic"},
+                {"title": "Underline", "icon": "underline", "format": "underline"},
+            ],
+        },
     ],
-    'relative_urls': False,
-    'browser_spellcheck': True,
-    'default_link_target': '_blank',
-    'invalid_elements': 'iframe,object,embed'
+    "relative_urls": False,
+    "browser_spellcheck": True,
+    "default_link_target": "_blank",
+    "invalid_elements": "iframe,object,embed",
 }
-MCE_ATTRIBUTES_SHORT = {**MCE_ATTRIBUTES, **{'height': 180}}
+MCE_ATTRIBUTES_SHORT = {**MCE_ATTRIBUTES, **{"height": 180}}
 
 RICH_TEXT_WIDGET = TinyMCE(mce_attrs=MCE_ATTRIBUTES)
 RICH_TEXT_WIDGET_SHORT = TinyMCE(mce_attrs=MCE_ATTRIBUTES_SHORT)
diff --git a/hypha/apply/utils/pdfs.py b/hypha/apply/utils/pdfs.py
index a2e62591fefa65675230db5ddacb98f1d81be8f5..fd9047451177e81300289d8553d4909351a7c993 100644
--- a/hypha/apply/utils/pdfs.py
+++ b/hypha/apply/utils/pdfs.py
@@ -25,17 +25,68 @@ from reportlab.platypus import (
 )
 
 STYLES = {
-    'Question': PS(fontName='MontserratBold', fontSize=14, name='Question', spaceAfter=0, spaceBefore=18, leading=21),
-    'QuestionSmall': PS(fontName='MontserratBold', fontSize=12, name='QuestionSmall', spaceAfter=0, spaceBefore=16, leading=18),
-    'Normal': PS(fontName='NotoSans', name='Normal'),
-    'Heading1': PS(fontName='NotoSansBold', fontSize=12, name='Heading1', spaceAfter=4, spaceBefore=12, leading=18),
-    'Heading2': PS(fontName='NotoSansBold', fontSize=10, name='Heading2', spaceAfter=4, spaceBefore=10, leading=15),
-    'Heading3': PS(fontName='NotoSansBold', fontSize=10, name='Heading3', spaceAfter=4, spaceBefore=10, leading=15),
-    'Heading4': PS(fontName='NotoSansBold', fontSize=10, name='Heading4', spaceAfter=4, spaceBefore=10, leading=15),
-    'Heading5': PS(fontName='NotoSansBold', fontSize=10, name='Heading5', spaceAfter=4, spaceBefore=10, leading=15),
+    "Question": PS(
+        fontName="MontserratBold",
+        fontSize=14,
+        name="Question",
+        spaceAfter=0,
+        spaceBefore=18,
+        leading=21,
+    ),
+    "QuestionSmall": PS(
+        fontName="MontserratBold",
+        fontSize=12,
+        name="QuestionSmall",
+        spaceAfter=0,
+        spaceBefore=16,
+        leading=18,
+    ),
+    "Normal": PS(fontName="NotoSans", name="Normal"),
+    "Heading1": PS(
+        fontName="NotoSansBold",
+        fontSize=12,
+        name="Heading1",
+        spaceAfter=4,
+        spaceBefore=12,
+        leading=18,
+    ),
+    "Heading2": PS(
+        fontName="NotoSansBold",
+        fontSize=10,
+        name="Heading2",
+        spaceAfter=4,
+        spaceBefore=10,
+        leading=15,
+    ),
+    "Heading3": PS(
+        fontName="NotoSansBold",
+        fontSize=10,
+        name="Heading3",
+        spaceAfter=4,
+        spaceBefore=10,
+        leading=15,
+    ),
+    "Heading4": PS(
+        fontName="NotoSansBold",
+        fontSize=10,
+        name="Heading4",
+        spaceAfter=4,
+        spaceBefore=10,
+        leading=15,
+    ),
+    "Heading5": PS(
+        fontName="NotoSansBold",
+        fontSize=10,
+        name="Heading5",
+        spaceAfter=4,
+        spaceBefore=10,
+        leading=15,
+    ),
 }
 
-font_location = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'media', 'fonts')
+font_location = os.path.join(
+    os.path.dirname(os.path.abspath(__file__)), "media", "fonts"
+)
 
 
 def font(font_name):
@@ -49,28 +100,32 @@ def prepare_fonts():
     global PREPARED_FONTS
     if PREPARED_FONTS:
         return
-    pdfmetrics.registerFont(TTFont('Montserrat', font('Montserrat-Regular.ttf')))
-    pdfmetrics.registerFont(TTFont('MontserratBold', font('Montserrat-Bold.ttf')))
-    pdfmetrics.registerFont(TTFont('MontserratItalic', font('Montserrat-Italic.ttf')))
-    pdfmetrics.registerFont(TTFont('MontserratBoldItalic', font('Montserrat-BoldItalic.ttf')))
+    pdfmetrics.registerFont(TTFont("Montserrat", font("Montserrat-Regular.ttf")))
+    pdfmetrics.registerFont(TTFont("MontserratBold", font("Montserrat-Bold.ttf")))
+    pdfmetrics.registerFont(TTFont("MontserratItalic", font("Montserrat-Italic.ttf")))
+    pdfmetrics.registerFont(
+        TTFont("MontserratBoldItalic", font("Montserrat-BoldItalic.ttf"))
+    )
     pdfmetrics.registerFontFamily(
-        'Montserrat',
-        normal='Montserrat',
-        bold='MontserratBold',
-        italic='MontserratItalic',
-        boldItalic='MontserratBoldItalic'
+        "Montserrat",
+        normal="Montserrat",
+        bold="MontserratBold",
+        italic="MontserratItalic",
+        boldItalic="MontserratBoldItalic",
     )
 
-    pdfmetrics.registerFont(TTFont('NotoSans', font('NotoSans-Regular.ttf')))
-    pdfmetrics.registerFont(TTFont('NotoSansBold', font('NotoSans-Bold.ttf')))
-    pdfmetrics.registerFont(TTFont('NotoSansItalic', font('NotoSans-Italic.ttf')))
-    pdfmetrics.registerFont(TTFont('NotoSansBoldItalic', font('NotoSans-BoldItalic.ttf')))
+    pdfmetrics.registerFont(TTFont("NotoSans", font("NotoSans-Regular.ttf")))
+    pdfmetrics.registerFont(TTFont("NotoSansBold", font("NotoSans-Bold.ttf")))
+    pdfmetrics.registerFont(TTFont("NotoSansItalic", font("NotoSans-Italic.ttf")))
+    pdfmetrics.registerFont(
+        TTFont("NotoSansBoldItalic", font("NotoSans-BoldItalic.ttf"))
+    )
     pdfmetrics.registerFontFamily(
-        'NotoSans',
-        normal='NotoSans',
-        bold='NotoSansBold',
-        italic='NotoSansItalic',
-        boldItalic='NotoSansBoldItalic'
+        "NotoSans",
+        normal="NotoSans",
+        bold="NotoSansBold",
+        italic="NotoSansItalic",
+        boldItalic="NotoSansBoldItalic",
     )
     PREPARED_FONTS = True
 
@@ -87,11 +142,23 @@ def do_nothing(doc, canvas):
 
 class ReportDocTemplate(BaseDocTemplate):
     def build(self, flowables, onFirstPage=do_nothing, onLaterPages=do_nothing):
-        frame = Frame(self.leftMargin, self.bottomMargin, self.width, self.height, id='normal')
-        self.addPageTemplates([
-            PageTemplate(id='Header', autoNextPageTemplate='Main', frames=frame, onPage=onFirstPage, pagesize=self.pagesize),
-            PageTemplate(id='Main', frames=frame, onPage=onLaterPages, pagesize=self.pagesize),
-        ])
+        frame = Frame(
+            self.leftMargin, self.bottomMargin, self.width, self.height, id="normal"
+        )
+        self.addPageTemplates(
+            [
+                PageTemplate(
+                    id="Header",
+                    autoNextPageTemplate="Main",
+                    frames=frame,
+                    onPage=onFirstPage,
+                    pagesize=self.pagesize,
+                ),
+                PageTemplate(
+                    id="Main", frames=frame, onPage=onLaterPages, pagesize=self.pagesize
+                ),
+            ]
+        )
         super().build(flowables)
 
 
@@ -108,8 +175,8 @@ def make_pdf(title, sections, pagesize):
 
     story = []
     for section in sections:
-        story.extend(section['content'])
-        story.append(NextPageTemplate('Header'))
+        story.extend(section["content"])
+        story.append(NextPageTemplate("Header"))
         story.append(PageBreak())
 
     current_section = None
@@ -122,9 +189,9 @@ def make_pdf(title, sections, pagesize):
         title_spacer = draw_title_block(
             canvas,
             doc,
-            current_section['title'],
+            current_section["title"],
             title,
-            current_section['meta'],
+            current_section["meta"],
             page_width,
             page_height,
         )
@@ -137,7 +204,7 @@ def make_pdf(title, sections, pagesize):
         spacer = draw_header(
             canvas,
             doc,
-            current_section['title'],
+            current_section["title"],
             title,
             page_width,
             page_height,
@@ -166,9 +233,9 @@ def draw_header(canvas, doc, page_title, title, page_width, page_height):
 
     # only count title - assume 1 line of title in header
     total_height = (
-        doc.topMargin +
-        1.5 * (len(split_title) - 1) * title_size +
-        title_size / 2  # bottom padding
+        doc.topMargin
+        + 1.5 * (len(split_title) - 1) * title_size
+        + title_size / 2  # bottom padding
     )
 
     canvas.setFillColor(DARK_GREY)
@@ -182,9 +249,9 @@ def draw_header(canvas, doc, page_title, title, page_width, page_height):
     )
 
     pos = (
-        (page_height - doc.topMargin) +  # bottom of top margin
-        title_size / 2 +  # spacing below page title
-        1.5 * 1 * title_size  # text
+        (page_height - doc.topMargin)
+        + title_size / 2  # bottom of top margin
+        + 1.5 * 1 * title_size  # spacing below page title  # text
     )
 
     canvas.setFillColor(white)
@@ -223,14 +290,16 @@ def draw_title_block(canvas, doc, page_title, title, meta, page_width, page_heig
 
     canvas.setFont("MontserratBold", meta_size)
     canvas.setFillColor(white)
-    meta_text = '  |  '.join(str(text) for text in meta)
+    meta_text = "  |  ".join(str(text) for text in meta)
     split_meta = split_text(canvas, meta_text, text_width)
 
     total_height = (
-        doc.topMargin +
-        page_title_size + page_title_size * 3 / 4 +  # page title + spaceing
-        len(split_title) * (title_size + title_size / 2) +  # title + spacing
-        (1.5 * len(split_meta) + 3) * meta_size  # 1.5 per text line + 3 for spacing
+        doc.topMargin
+        + page_title_size
+        + page_title_size * 3 / 4
+        + len(split_title) * (title_size + title_size / 2)  # page title + spaceing
+        + (1.5 * len(split_meta) + 3)  # title + spacing
+        * meta_size  # 1.5 per text line + 3 for spacing
     )
 
     canvas.setFillColor(DARK_GREY)
@@ -295,52 +364,54 @@ def handle_block(block, custom_style=None):
         if isinstance(tag, NavigableString):
             text = tag.strip()
             if text:
-                paragraphs.append(Paragraph(text, styles['Normal']))
-        elif tag.name in {'ul', 'ol'}:
-            style = styles['Normal']
-            if tag.name == 'ul':
-                bullet = 'bullet'
-            elif tag.name == 'ol':
-                bullet = '1'
+                paragraphs.append(Paragraph(text, styles["Normal"]))
+        elif tag.name in {"ul", "ol"}:
+            style = styles["Normal"]
+            if tag.name == "ul":
+                bullet = "bullet"
+            elif tag.name == "ol":
+                bullet = "1"
 
             paragraphs.append(
                 ListFlowable(
                     [
                         ListItem(Paragraph(bullet_item.get_text(), style))
-                        for bullet_item in tag.find_all('li')
+                        for bullet_item in tag.find_all("li")
                     ],
                     bulletType=bullet,
                 )
             )
-        elif tag.name in {'table'}:
+        elif tag.name in {"table"}:
             paragraphs.append(
                 Table(
                     [
                         [
-                            Paragraph(cell.get_text(), styles['Normal'])
-                            for cell in row.find_all({'td', 'th'})
+                            Paragraph(cell.get_text(), styles["Normal"])
+                            for cell in row.find_all({"td", "th"})
                         ]
-                        for row in tag.find_all('tr')
+                        for row in tag.find_all("tr")
                     ],
-                    colWidths='*',
-                    style=TableStyle([
-                        ('VALIGN', (0, 0), (-1, -1), 'TOP'),
-                        ('LINEABOVE', (0, 0), (-1, -1), 1, DARK_GREY),
-                    ]),
+                    colWidths="*",
+                    style=TableStyle(
+                        [
+                            ("VALIGN", (0, 0), (-1, -1), "TOP"),
+                            ("LINEABOVE", (0, 0), (-1, -1), 1, DARK_GREY),
+                        ]
+                    ),
                 )
             )
         else:
             style = None
-            if tag.name in {'p'}:
-                style = styles['Normal']
-            elif tag.name == 'h2':
-                style = styles['Heading2']
-            elif tag.name == 'h3':
-                style = styles['Heading3']
-            elif tag.name == 'h4':
-                style = styles['Heading4']
-            elif tag.name == 'h5':
-                style = styles['Heading5']
+            if tag.name in {"p"}:
+                style = styles["Normal"]
+            elif tag.name == "h2":
+                style = styles["Heading2"]
+            elif tag.name == "h3":
+                style = styles["Heading3"]
+            elif tag.name == "h4":
+                style = styles["Heading4"]
+            elif tag.name == "h5":
+                style = styles["Heading5"]
 
             if style:
                 text = tag.get_text()
@@ -355,29 +426,37 @@ def draw_submission_content(content):
     prepare_fonts()
     paragraphs = []
 
-    for section in BeautifulSoup(content, "html5lib").find_all('section'):
-        question_text = section.select_one('.question').get_text()
-        question = Paragraph(question_text, STYLES['Question'])
+    for section in BeautifulSoup(content, "html5lib").find_all("section"):
+        question_text = section.select_one(".question").get_text()
+        question = Paragraph(question_text, STYLES["Question"])
 
         # Keep the question and the first block of the answer together
         # this keeps 1 line answers tidy and ensures that bigger responses break
         # sooner instead of waiting to fill an entire page. There may still be issues
-        first_answer, *rest = handle_block(section.select_one('.answer'))
-        paragraphs.extend([
-            KeepTogether([
-                question,
-                first_answer,
-            ]),
-            *rest
-        ])
+        first_answer, *rest = handle_block(section.select_one(".answer"))
+        paragraphs.extend(
+            [
+                KeepTogether(
+                    [
+                        question,
+                        first_answer,
+                    ]
+                ),
+                *rest,
+            ]
+        )
     return paragraphs
 
 
 def draw_project_content(content):
     prepare_fonts()
     paragraphs = []
-    for section in BeautifulSoup(content, "html5lib").find_all(class_='simplified__wrapper'):
-        flowables = handle_block(section, custom_style={"Heading3": "Question", "Heading5": "QuestionSmall"})
+    for section in BeautifulSoup(content, "html5lib").find_all(
+        class_="simplified__wrapper"
+    ):
+        flowables = handle_block(
+            section, custom_style={"Heading3": "Question", "Heading5": "QuestionSmall"}
+        )
         paragraphs.extend(flowables)
 
     return paragraphs
diff --git a/hypha/apply/utils/storage.py b/hypha/apply/utils/storage.py
index a8476cdef13c696e6bbd9c83d112a055e763b9a4..30ec9f11106c2bba084224db469858aac0a16f44 100644
--- a/hypha/apply/utils/storage.py
+++ b/hypha/apply/utils/storage.py
@@ -4,7 +4,7 @@ from django.core.files.storage import get_storage_class
 from django.http import FileResponse
 from django.views.generic import View
 
-private_file_storage = getattr(settings, 'PRIVATE_FILE_STORAGE', None)
+private_file_storage = getattr(settings, "PRIVATE_FILE_STORAGE", None)
 PrivateStorage = get_storage_class(private_file_storage)
 
 
@@ -17,6 +17,7 @@ class PrivateMediaView(LoginRequiredMixin, View):
     based on the file being served, this class will only ensure that the file
     is not made public to unauthenticated users.
     """
+
     storage = PrivateStorage()
 
     def get_media(self, *args, **kwargs):
diff --git a/hypha/apply/utils/templates/apply/404.html b/hypha/apply/utils/templates/apply/404.html
index d460a095e1acc6021ccfde4699225de960ca86e9..233889d1a7d394b075930ca1512af849047bb2e3 100644
--- a/hypha/apply/utils/templates/apply/404.html
+++ b/hypha/apply/utils/templates/apply/404.html
@@ -6,8 +6,8 @@
 {% block body_class %}template-404{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-large">
-    <h1>{{ settings.utils.SystemMessagesSettings.title_404 }}</h1>
-    <div class="rich-text">{{ settings.utils.SystemMessagesSettings.body_404|richtext }}</div>
-</div>
+    <div class="wrapper wrapper--small wrapper--inner-space-large">
+        <h1>{{ settings.utils.SystemMessagesSettings.title_404 }}</h1>
+        <div class="rich-text">{{ settings.utils.SystemMessagesSettings.body_404|richtext }}</div>
+    </div>
 {% endblock %}
diff --git a/hypha/apply/utils/templatetags/apply_tags.py b/hypha/apply/utils/templatetags/apply_tags.py
index c010e4d6cefb172eecdce993a6aff3e292da214b..fd1028c89e9d44f3740915a2aa0049606be95785 100644
--- a/hypha/apply/utils/templatetags/apply_tags.py
+++ b/hypha/apply/utils/templatetags/apply_tags.py
@@ -1,4 +1,6 @@
+import babel.numbers
 from django import template
+from django.conf import settings
 
 register = template.Library()
 
@@ -7,3 +9,18 @@ register = template.Library()
 @register.filter
 def model_verbose_name(instance):
     return instance._meta.verbose_name.title()
+
+
+@register.filter
+def format_number_as_currency(amount):
+    try:
+        float(str(amount).replace(",", ""))
+        return babel.numbers.format_currency(
+            str(amount).replace(",", ""),
+            settings.CURRENCY_CODE,
+            locale=settings.CURRENCY_LOCALE,
+        )
+    except ValueError:
+        return babel.numbers.get_currency_symbol(
+            settings.CURRENCY_CODE, locale=settings.CURRENCY_LOCALE
+        )
diff --git a/hypha/apply/utils/testing/tests.py b/hypha/apply/utils/testing/tests.py
index 256066ac81db5a4f92beccead2f3f66433ba4b20..796fda6b34a70e8d8b6eddc7cd23a5b5c6ca73a6 100644
--- a/hypha/apply/utils/testing/tests.py
+++ b/hypha/apply/utils/testing/tests.py
@@ -6,11 +6,11 @@ from django.urls import reverse
 request_factory = RequestFactory()
 
 
-def make_request(user=None, data=None, method='get', site=None):
+def make_request(user=None, data=None, method="get", site=None):
     user = user or AnonymousUser()
     data = data or {}
     method = getattr(request_factory, method)
-    request = method('', data)
+    request = method("", data)
     request.user = user
     request.site = site
     request.session = {}
@@ -18,7 +18,7 @@ def make_request(user=None, data=None, method='get', site=None):
     return request
 
 
-@override_settings(ROOT_URLCONF='hypha.apply.urls')
+@override_settings(ROOT_URLCONF="hypha.apply.urls")
 class BaseViewTestCase(TestCase):
     """
     Provides a basic framework for working with views. It works on the
@@ -35,8 +35,9 @@ class BaseViewTestCase(TestCase):
     user_factory:() => User = Callable which will return a User object. If no
     user_factory is defined an anonymous user will be user
     """
-    url_name = ''
-    base_view_name = ''
+
+    url_name = ""
+    base_view_name = ""
     user_factory = None
     user = None
 
@@ -56,14 +57,16 @@ class BaseViewTestCase(TestCase):
     def url(self, instance, view_name=None, absolute=True, url_kwargs=None):
         view = view_name or self.base_view_name
         full_url_name = self.url_name.format(view)
-        kwargs_method = f'get_{view}_kwargs'
+        kwargs_method = f"get_{view}_kwargs"
         if hasattr(self, kwargs_method):
             kwargs = getattr(self, kwargs_method)(instance)
         else:
             kwargs = self.get_kwargs(instance)
         if url_kwargs:
             kwargs.update(url_kwargs)
-        return self.url_from_pattern(full_url_name, kwargs, secure=True, absolute=absolute)
+        return self.url_from_pattern(
+            full_url_name, kwargs, secure=True, absolute=absolute
+        )
 
     def absolute_url(self, location, secure=True):
         request = self.factory.get(location, secure=secure)
@@ -77,11 +80,20 @@ class BaseViewTestCase(TestCase):
         return request.path
 
     def get_page(self, instance=None, view_name=None, url_kwargs=None):
-        return self.client.get(self.url(instance, view_name, url_kwargs=url_kwargs), secure=True, follow=True)
+        return self.client.get(
+            self.url(instance, view_name, url_kwargs=url_kwargs),
+            secure=True,
+            follow=True,
+        )
 
     def post_page(self, instance=None, data=None, view_name=None, url_kwargs=None):
         data = data or {}
-        return self.client.post(self.url(instance, view_name, url_kwargs=url_kwargs), data, secure=True, follow=True)
+        return self.client.post(
+            self.url(instance, view_name, url_kwargs=url_kwargs),
+            data,
+            secure=True,
+            follow=True,
+        )
 
     def refresh(self, instance):
         return instance.__class__.objects.get(id=instance.id)
diff --git a/hypha/apply/utils/tests/test_views.py b/hypha/apply/utils/tests/test_views.py
index d4c750c3d080908cfcc105a1083166dd893e74e7..866bfce2ad2c2b6ce31696c345925a9e98ecd88f 100644
--- a/hypha/apply/utils/tests/test_views.py
+++ b/hypha/apply/utils/tests/test_views.py
@@ -13,7 +13,7 @@ class DelegatedView(DelegatedViewMixin, PatchedUpdateView):
     model = int  # pretend int is a model for the isinstance check
 
     def get_parent_kwargs(self):
-        return {'instance': 3}
+        return {"instance": 3}
 
 
 class TestDelegatedViewMixin(TestCase):
diff --git a/hypha/apply/utils/views.py b/hypha/apply/utils/views.py
index 351d1b560fd274f19e42771d9ea12e054f2fd3d3..2262ba1c57e552939655082c82b7c76e752b8f8f 100644
--- a/hypha/apply/utils/views.py
+++ b/hypha/apply/utils/views.py
@@ -16,13 +16,13 @@ from wagtail.admin.views.pages.delete import delete
 from wagtail.models import Page
 
 
-def page_not_found(request, exception=None, template_name='apply/404.html'):
+def page_not_found(request, exception=None, template_name="apply/404.html"):
     if not request.user.is_authenticated:
-        template_name = '404.html'
+        template_name = "404.html"
     return defaults.page_not_found(request, exception, template_name)
 
 
-@method_decorator(login_required, name='dispatch')
+@method_decorator(login_required, name="dispatch")
 class ViewDispatcher(View):
     admin_view: View = None
     reviewer_view: View = None
@@ -50,8 +50,11 @@ class ViewDispatcher(View):
     def contracting_check(self, request):
         return request.user.is_contracting
 
+    def applicant_check(self, request):
+        return request.user.is_applicant
+
     def dispatch(self, request, *args, **kwargs):
-        view = self.applicant_view
+        view = None
 
         if self.admin_check(request):
             view = self.admin_view
@@ -65,6 +68,8 @@ class ViewDispatcher(View):
             view = self.finance_view
         elif self.contracting_check(request):
             view = self.contracting_view
+        elif self.applicant_check(request):
+            view = self.applicant_view
 
         if view:
             return view.as_view()(request, *args, **kwargs)
@@ -77,7 +82,8 @@ class DelegatableBase(ContextMixin):
     `DelegateableViews` objects should contain form views that inherit from `DelegatedViewMixin`
     and `FormView`
     """
-    form_prefix = 'form-submitted-'
+
+    form_prefix = "form-submitted-"
 
     def __init__(self, *args, **kwargs):
         self._form_views = {
@@ -104,8 +110,8 @@ class DelegatableBase(ContextMixin):
 
     def post(self, request, *args, **kwargs):
         # Information to pretend we originate from this view
-        kwargs['context'] = self.get_context_data()
-        kwargs['template_names'] = self.get_template_names()
+        kwargs["context"] = self.get_context_data()
+        kwargs["template_names"] = self.get_template_names()
 
         for form_key, form_view in self._form_views.items():
             if form_key in request.POST:
@@ -118,14 +124,14 @@ class DelegatableBase(ContextMixin):
 class DelegateableView(DelegatableBase):
     def get_form_kwargs(self):
         return {
-            'user': self.request.user,
-            'instance': self.object,
+            "user": self.request.user,
+            "instance": self.object,
         }
 
     def post(self, request, *args, **kwargs):
         self.object = self.get_object()
 
-        kwargs['object'] = self.object
+        kwargs["object"] = self.object
 
         return super().post(request, *args, **kwargs)
 
@@ -133,7 +139,7 @@ class DelegateableView(DelegatableBase):
 class DelegateableListView(DelegatableBase):
     def get_form_kwargs(self):
         return {
-            'user': self.request.user,
+            "user": self.request.user,
         }
 
     def post(self, request, *args, **kwargs):
@@ -156,7 +162,7 @@ class DelegatedViewMixin(View):
         # value we work with on the class.
         # If we don't have self.object, bind the parent instance to it. This value will then
         # be used by the form. Any further calls to get_object will get a new instance of the object
-        if not hasattr(self, 'object'):
+        if not hasattr(self, "object"):
             parent_object = self.get_parent_object()
             if isinstance(parent_object, self.model):
                 return parent_object
@@ -164,14 +170,14 @@ class DelegatedViewMixin(View):
         return super().get_object()
 
     def get_template_names(self):
-        return self.kwargs['template_names']
+        return self.kwargs["template_names"]
 
     def get_form_name(self):
         return self.context_name
 
     def get_form_kwargs(self):
         form_kwargs = super().get_form_kwargs()
-        form_kwargs['user'] = self.request.user
+        form_kwargs["user"] = self.request.user
         form_kwargs.update(**self.get_parent_kwargs())
         return form_kwargs
 
@@ -179,10 +185,10 @@ class DelegatedViewMixin(View):
         try:
             return self.parent.get_form_kwargs()
         except AttributeError:
-            return self.kwargs['parent'].get_form_kwargs()
+            return self.kwargs["parent"].get_form_kwargs()
 
     def get_parent_object(self):
-        return self.get_parent_kwargs()['instance']
+        return self.get_parent_kwargs()["instance"]
 
     def get_form(self, *args, **kwargs):
         form = super().get_form(*args, **kwargs)
@@ -191,8 +197,8 @@ class DelegatedViewMixin(View):
 
     def get_context_data(self, **kwargs):
         # Use the previous context but override the validated form
-        form = kwargs.pop('form')
-        kwargs.update(self.kwargs['context'])
+        form = kwargs.pop("form")
+        kwargs.update(self.kwargs["context"])
         kwargs.update(**{self.context_name: form})
         return super().get_context_data(**kwargs)
 
@@ -206,9 +212,9 @@ class DelegatedViewMixin(View):
         # We do not want to bind any forms generated this way
         # pretend we are doing a get request to avoid passing data to forms
         old_method = None
-        if self.request.method in ('POST', 'PUT'):
+        if self.request.method in ("POST", "PUT"):
             old_method = self.request.method
-            self.request.method = 'GET'
+            self.request.method = "GET"
 
         form = self.get_form()
 
@@ -219,12 +225,13 @@ class DelegatedViewMixin(View):
     def get_success_url(self):
         query = self.request.GET.urlencode()
         if query:
-            query = '?' + query
+            query = "?" + query
         return self.request.path + query
 
 
-class CreateOrUpdateView(SingleObjectTemplateResponseMixin, ModelFormMixin, ProcessFormView):
-
+class CreateOrUpdateView(
+    SingleObjectTemplateResponseMixin, ModelFormMixin, ProcessFormView
+):
     def get(self, request, *args, **kwargs):
         try:
             self.object = self.get_object()
@@ -257,7 +264,10 @@ def custom_wagtail_page_delete(request, page_id):
         protected_details = ", ".join([str(obj) for obj in e.protected_objects])
         page = get_object_or_404(Page, id=page_id).specific
         parent_id = page.get_parent().id
-        messages.warning(request, _("Page '{0}' can't be deleted because is in use in '{1}'.").format(
-            page.get_admin_display_title(), protected_details
-        ))
-        return redirect('wagtailadmin_explore', parent_id)
+        messages.warning(
+            request,
+            _("Page '{0}' can't be deleted because is in use in '{1}'.").format(
+                page.get_admin_display_title(), protected_details
+            ),
+        )
+        return redirect("wagtailadmin_explore", parent_id)
diff --git a/hypha/cookieconsent/apps.py b/hypha/cookieconsent/apps.py
index 52e1ffa5e05f700a5914c128af0a0761de9dfabf..c23e09aefb5d16b2b9e5e48463fc3a9fa5d41ab4 100644
--- a/hypha/cookieconsent/apps.py
+++ b/hypha/cookieconsent/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class CookieconsentConfig(AppConfig):
-    name = 'hypha.cookieconsent'
+    name = "hypha.cookieconsent"
diff --git a/hypha/cookieconsent/context_processors.py b/hypha/cookieconsent/context_processors.py
index c945eb6a663fc43ef93789e247c2be5f2d196ff2..3f0fe2ecb690c04ffb214bcaa99dcf8c7a381001 100644
--- a/hypha/cookieconsent/context_processors.py
+++ b/hypha/cookieconsent/context_processors.py
@@ -1,8 +1,6 @@
-
-
 def cookies_accepted(request):
     cookieconsent = False
-    if request.COOKIES.get('cookieconsent', 'decline') == 'accept':
+    if request.COOKIES.get("cookieconsent", "decline") == "accept":
         cookieconsent = True
 
-    return {'COOKIES_ACCEPTED': cookieconsent}
+    return {"COOKIES_ACCEPTED": cookieconsent}
diff --git a/hypha/cookieconsent/migrations/0001_initial.py b/hypha/cookieconsent/migrations/0001_initial.py
index 66364089fc6200564f97655fcf12e68ce689d153..93ea2db74dab3498f5f71592ff3e76946d1a0a64 100644
--- a/hypha/cookieconsent/migrations/0001_initial.py
+++ b/hypha/cookieconsent/migrations/0001_initial.py
@@ -6,25 +6,57 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0045_assign_unlock_grouppagepermission'),
+        ("wagtailcore", "0045_assign_unlock_grouppagepermission"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='CookieConsentSettings',
+            name="CookieConsentSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('cookieconsent_active', models.BooleanField(default=False, verbose_name='Activate cookie concent feature')),
-                ('cookieconsent_title', models.CharField(default='Your cookie settings', max_length=255, verbose_name='cookie concent title')),
-                ('cookieconsent_message', wagtail.fields.RichTextField(default='<p>This website deploys cookies for basic functionality and to keep it secure. These cookies are strictly necessary. Optional analysis cookies which provide us with statistical information about the use of the website may also be deployed, but only with your consent. Please review our <a href="/data-privacy-policy/">Privacy &amp; Data Policy</a> for more information.</p>', verbose_name='cookie concent message')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "cookieconsent_active",
+                    models.BooleanField(
+                        default=False, verbose_name="Activate cookie concent feature"
+                    ),
+                ),
+                (
+                    "cookieconsent_title",
+                    models.CharField(
+                        default="Your cookie settings",
+                        max_length=255,
+                        verbose_name="cookie concent title",
+                    ),
+                ),
+                (
+                    "cookieconsent_message",
+                    wagtail.fields.RichTextField(
+                        default='<p>This website deploys cookies for basic functionality and to keep it secure. These cookies are strictly necessary. Optional analysis cookies which provide us with statistical information about the use of the website may also be deployed, but only with your consent. Please review our <a href="/data-privacy-policy/">Privacy &amp; Data Policy</a> for more information.</p>',
+                        verbose_name="cookie concent message",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Cookie consent settings',
+                "verbose_name": "Cookie consent settings",
             },
         ),
     ]
diff --git a/hypha/cookieconsent/models.py b/hypha/cookieconsent/models.py
index 789d70c679a78d18e7c8135b15fadba6d6d7cbe0..60708c674299dcb98b2484386110ccb9f77d2dd3 100644
--- a/hypha/cookieconsent/models.py
+++ b/hypha/cookieconsent/models.py
@@ -9,7 +9,7 @@ from hypha.core.wagtail.admin.registry import register_public_site_setting
 @register_public_site_setting
 class CookieConsentSettings(BaseSiteSetting):
     class Meta:
-        verbose_name = 'Cookie consent settings'
+        verbose_name = "Cookie consent settings"
 
     cookieconsent_active = models.BooleanField(
         "Activate cookie concent feature",
@@ -17,20 +17,23 @@ class CookieConsentSettings(BaseSiteSetting):
     )
 
     cookieconsent_title = models.CharField(
-        'cookie concent title',
+        "cookie concent title",
         max_length=255,
-        default='Your cookie settings',
+        default="Your cookie settings",
     )
 
     cookieconsent_message = RichTextField(
-        'cookie concent message',
+        "cookie concent message",
         default='<p>This website deploys cookies for basic functionality and to keep it secure. These cookies are strictly necessary. Optional analysis cookies which provide us with statistical information about the use of the website may also be deployed, but only with your consent. Please review our <a href="/data-privacy-policy/">Privacy &amp; Data Policy</a> for more information.</p>',
     )
 
     panels = [
-        MultiFieldPanel([
-            FieldPanel('cookieconsent_active'),
-            FieldPanel('cookieconsent_title'),
-            FieldPanel('cookieconsent_message'),
-        ], 'cookie banner'),
+        MultiFieldPanel(
+            [
+                FieldPanel("cookieconsent_active"),
+                FieldPanel("cookieconsent_title"),
+                FieldPanel("cookieconsent_message"),
+            ],
+            "cookie banner",
+        ),
     ]
diff --git a/hypha/cookieconsent/static/js/cookieconsent.js b/hypha/cookieconsent/static/js/cookieconsent.js
index 29395bc30ca784e41a4025a977e85d18a51c7771..943fe3a371eaf84c6621e427833052d65faffa47 100644
--- a/hypha/cookieconsent/static/js/cookieconsent.js
+++ b/hypha/cookieconsent/static/js/cookieconsent.js
@@ -1,38 +1,38 @@
 (function () {
+    "use strict";
 
-    'use strict';
+    if (typeof Cookies !== "undefined") {
+        const cookieconsent = document.querySelector(".cookieconsent");
 
-    if (typeof Cookies !== 'undefined') {
-        const cookieconsent = document.querySelector('.cookieconsent');
-
-        if (typeof Cookies.get('cookieconsent') === 'undefined' && cookieconsent) {
-            cookieconsent.classList.add('js-cookieconsent-open');
+        if (
+            typeof Cookies.get("cookieconsent") === "undefined" &&
+            cookieconsent
+        ) {
+            cookieconsent.classList.add("js-cookieconsent-open");
         }
 
         const cookie_buttons = Array.prototype.slice.call(
-            document.querySelectorAll('button[data-consent]')
+            document.querySelectorAll("button[data-consent]")
         );
-        const sitedomain = window.location.hostname.split('.').slice(-2);
-        const cookiedomain = sitedomain.join('.');
+        const sitedomain = window.location.hostname.split(".").slice(-2);
+        const cookiedomain = sitedomain.join(".");
         let cookie_options = [];
-        cookie_options['domain'] = cookiedomain;
-        cookie_options['sameSite'] = 'strict';
-        cookie_options['expires'] = 365;
-        if (window.location.protocol === 'https:') {
-            cookie_options['secure'] = true;
+        cookie_options["domain"] = cookiedomain;
+        cookie_options["sameSite"] = "strict";
+        cookie_options["expires"] = 365;
+        if (window.location.protocol === "https:") {
+            cookie_options["secure"] = true;
         }
 
         cookie_buttons.forEach(function (button) {
-            button.addEventListener('click', function () {
-                if (button.getAttribute('data-consent') == 'true') {
-                    Cookies.set('cookieconsent', 'accept', cookie_options);
-                }
-                else {
-                    Cookies.set('cookieconsent', 'decline', cookie_options);
+            button.addEventListener("click", function () {
+                if (button.getAttribute("data-consent") == "true") {
+                    Cookies.set("cookieconsent", "accept", cookie_options);
+                } else {
+                    Cookies.set("cookieconsent", "decline", cookie_options);
                 }
-                cookieconsent.classList.remove('js-cookieconsent-open');
-            })
+                cookieconsent.classList.remove("js-cookieconsent-open");
+            });
         });
     }
-
 })();
diff --git a/hypha/cookieconsent/templates/includes/banner.html b/hypha/cookieconsent/templates/includes/banner.html
index bf48f1649c2c6998c2aba0e10071154d5b650971..0f490280f4587165d4d65aee019f7d41547e2280 100644
--- a/hypha/cookieconsent/templates/includes/banner.html
+++ b/hypha/cookieconsent/templates/includes/banner.html
@@ -1,16 +1,16 @@
 {% load i18n wagtailcore_tags %}
 
 {% if show_banner %}
-<div class="wrapper wrapper--cookieconsent cookieconsent">
-    <div class="wrapper wrapper--small">
-        <h2 class="cookieconsent__title">{% trans title %}</h2>
-        <div class="cookieconsent__message rich-text">
-            {{ message|richtext }}
-        </div>
-        <div class="cookieconsent__actions">
-            <button class="button button--cookieconsent button--decline" title="{% trans 'Decline tracking cookies.' %}" type="button" data-consent="false">{% trans 'Decline' %}</button>
-            <button class="button button--cookieconsent button--accept button--left-space" title="{% trans 'Accept tracking cookies.' %}" type="button" data-consent="true">{% trans 'Accept' %}</button>
+    <div class="wrapper wrapper--cookieconsent cookieconsent">
+        <div class="wrapper wrapper--small">
+            <h2 class="cookieconsent__title">{% trans title %}</h2>
+            <div class="cookieconsent__message rich-text">
+                {{ message|richtext }}
+            </div>
+            <div class="cookieconsent__actions">
+                <button class="button button--cookieconsent button--decline" title="{% trans 'Decline tracking cookies.' %}" type="button" data-consent="false">{% trans 'Decline' %}</button>
+                <button class="button button--cookieconsent button--accept button--left-space" title="{% trans 'Accept tracking cookies.' %}" type="button" data-consent="true">{% trans 'Accept' %}</button>
+            </div>
         </div>
     </div>
-</div>
 {% endif %}
diff --git a/hypha/cookieconsent/templatetags/cookieconsent_tags.py b/hypha/cookieconsent/templatetags/cookieconsent_tags.py
index 7e202b391b83e3dfebfbff97ec239fe5bb909f21..6b9960f64e7efe1287d787deb22237494bd69d03 100644
--- a/hypha/cookieconsent/templatetags/cookieconsent_tags.py
+++ b/hypha/cookieconsent/templatetags/cookieconsent_tags.py
@@ -6,15 +6,18 @@ from ..models import CookieConsentSettings
 register = template.Library()
 
 
-@register.inclusion_tag('includes/banner.html', takes_context=True)
+@register.inclusion_tag("includes/banner.html", takes_context=True)
 def cookie_banner(context):
-    request = context['request']
+    request = context["request"]
     site = Site.find_for_request(request)
     cookieconsent_settings = CookieConsentSettings.for_site(site=site)
-    show_banner = cookieconsent_settings.cookieconsent_active and not request.COOKIES.get('cookieconsent')
+    show_banner = (
+        cookieconsent_settings.cookieconsent_active
+        and not request.COOKIES.get("cookieconsent")
+    )
 
     return {
-        'show_banner': show_banner,
-        'title': cookieconsent_settings.cookieconsent_title,
-        'message': cookieconsent_settings.cookieconsent_message,
+        "show_banner": show_banner,
+        "title": cookieconsent_settings.cookieconsent_title,
+        "message": cookieconsent_settings.cookieconsent_message,
     }
diff --git a/hypha/core/apps.py b/hypha/core/apps.py
index a0f8d29fd4b06dd6257cc4e70363cf4b76073109..ecc488a2c3c2c09c490f3a3cca300c69bbb820db 100644
--- a/hypha/core/apps.py
+++ b/hypha/core/apps.py
@@ -7,6 +7,6 @@ class CoreAppConfig(AppConfig):
 
     def ready(self):
         from . import components  # noqa
+
         component.register("adminbar", component=components.AdminBar)
         component.register("dropdown_menu", component=components.DropdownMenu)
-
diff --git a/hypha/core/components.py b/hypha/core/components.py
index 166b65c693ea24668e70e96c10acd12005661c31..c8bfd01de03e3ae6d71f972e692830e78582590b 100644
--- a/hypha/core/components.py
+++ b/hypha/core/components.py
@@ -13,6 +13,4 @@ class DropdownMenu(component.Component):
     template_name = "components/dropdown-menu.html"
 
     def get_context_data(self, **kwargs) -> dict:
-        return {
-            'id': str(uuid.uuid4())
-        }
+        return {"id": str(uuid.uuid4())}
diff --git a/hypha/core/context_processors.py b/hypha/core/context_processors.py
index 6c578eba5240f2ad44c950c609244f8d44d8b8c4..88467023a0dfd2fa03284d77eb4c5cfe2c0ebbe7 100644
--- a/hypha/core/context_processors.py
+++ b/hypha/core/context_processors.py
@@ -5,18 +5,18 @@ from hypha.apply.home.models import ApplyHomePage
 
 def global_vars(request):
     return {
-        'APPLY_SITE': ApplyHomePage.objects.first().get_site(),
-        'ORG_LONG_NAME': settings.ORG_LONG_NAME,
-        'ORG_SHORT_NAME': settings.ORG_SHORT_NAME,
-        'ORG_EMAIL': settings.ORG_EMAIL,
-        'ORG_GUIDE_URL': settings.ORG_GUIDE_URL,
-        'ORG_URL': settings.ORG_URL,
-        'CURRENCY_SYMBOL': settings.CURRENCY_SYMBOL,
-        'GOOGLE_OAUTH2': settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY,
-        'ENABLE_REGISTRATION_WITHOUT_APPLICATION': settings.ENABLE_REGISTRATION_WITHOUT_APPLICATION,
-        'SENTRY_TRACES_SAMPLE_RATE': settings.SENTRY_TRACES_SAMPLE_RATE,
-        'SENTRY_ENVIRONMENT': settings.SENTRY_ENVIRONMENT,
-        'SENTRY_DENY_URLS': settings.SENTRY_DENY_URLS,
-        'SENTRY_DEBUG': settings.SENTRY_DEBUG,
-        'SENTRY_PUBLIC_KEY': settings.SENTRY_PUBLIC_KEY,
+        "APPLY_SITE": ApplyHomePage.objects.first().get_site(),
+        "ORG_LONG_NAME": settings.ORG_LONG_NAME,
+        "ORG_SHORT_NAME": settings.ORG_SHORT_NAME,
+        "ORG_EMAIL": settings.ORG_EMAIL,
+        "ORG_GUIDE_URL": settings.ORG_GUIDE_URL,
+        "ORG_URL": settings.ORG_URL,
+        "GOOGLE_OAUTH2": settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY,
+        "ENABLE_REGISTRATION_WITHOUT_APPLICATION": settings.ENABLE_REGISTRATION_WITHOUT_APPLICATION,
+        "ENABLE_GOOGLE_TRANSLATE": settings.ENABLE_GOOGLE_TRANSLATE,
+        "SENTRY_TRACES_SAMPLE_RATE": settings.SENTRY_TRACES_SAMPLE_RATE,
+        "SENTRY_ENVIRONMENT": settings.SENTRY_ENVIRONMENT,
+        "SENTRY_DENY_URLS": settings.SENTRY_DENY_URLS,
+        "SENTRY_DEBUG": settings.SENTRY_DEBUG,
+        "SENTRY_PUBLIC_KEY": settings.SENTRY_PUBLIC_KEY,
     }
diff --git a/hypha/core/mail.py b/hypha/core/mail.py
index 11e432c50aff1a452ef69fdfae1efecbbf91a718..418d3ddf3a87f7ecff3db4be6a1ad008f4ab6782 100644
--- a/hypha/core/mail.py
+++ b/hypha/core/mail.py
@@ -17,7 +17,7 @@ def remove_extra_empty_lines(text: str) -> str:
     """Removes extra blank lines and spaces from markdown generated
     using Django templates. Do this for readably of markdown itself.
     """
-    return re.sub(r'\n\s*\n', '\n\r', text)
+    return re.sub(r"\n\s*\n", "\n\r", text)
 
 
 @contextmanager
@@ -43,7 +43,7 @@ class MarkdownMail(object):
     Adds `Auto-Submitted` header.
     """
 
-    template_name = ''
+    template_name = ""
 
     def __init__(self, template_name: str):
         self._email = None
@@ -61,7 +61,7 @@ class MarkdownMail(object):
         if not isinstance(to, (list, tuple)):
             to = [to]
 
-        lang = context.get('lang', None) or settings.LANGUAGE_CODE
+        lang = context.get("lang", None) or settings.LANGUAGE_CODE
 
         with language(lang):
             rendered_template = self._render_template(context)
@@ -70,15 +70,15 @@ class MarkdownMail(object):
 
         email = EmailMultiAlternatives(**kwargs)
         email.body = body_txt
-        email.attach_alternative(body_html, 'text/html')
+        email.attach_alternative(body_html, "text/html")
 
         email.to = to
 
         return email
 
     def send(self, to: str | List[str], context, **kwargs):
-        kwargs.setdefault('headers', {})
-        kwargs['headers'].update({'Auto-Submitted': 'auto-generated'})
+        kwargs.setdefault("headers", {})
+        kwargs["headers"].update({"Auto-Submitted": "auto-generated"})
 
         email = self.make_email_object(to, context, **kwargs)
         return email.send()
diff --git a/hypha/core/management/commands/initialize.py b/hypha/core/management/commands/initialize.py
index 2e6963fcae27e0badc594e66cf3d24c3afbaa3b3..6cda557cf1c13e5ff306cf516c1737cb09a41dcd 100644
--- a/hypha/core/management/commands/initialize.py
+++ b/hypha/core/management/commands/initialize.py
@@ -6,18 +6,27 @@ from wagtail.models import Site
 
 
 class Command(BaseCommand):
-    help = "Run this to initialize this project. Set a superuser and wagtail sites domain."
+    help = (
+        "Run this to initialize this project. Set a superuser and wagtail sites domain."
+    )
 
     @transaction.atomic
     def handle(self, *args, **options):
-
-        click.echo("Provide the details below to initialize Hypha. Press enter to keep the default value.\n")
-
-        PUBLIC_SITE_DOMAIN = click.prompt("Domain of public site ", default="hypha.test")
-        APPLY_SITE_DOMAIN = click.prompt("Domain of apply site ", default="apply.hypha.test")
-        SUPER_ADMIN_EMAIL = click.prompt("Superadmin Email ", default="superadmin@hypha.test")
+        click.echo(
+            "Provide the details below to initialize Hypha. Press enter to keep the default value.\n"
+        )
+
+        PUBLIC_SITE_DOMAIN = click.prompt(
+            "Domain of public site ", default="hypha.test"
+        )
+        APPLY_SITE_DOMAIN = click.prompt(
+            "Domain of apply site ", default="apply.hypha.test"
+        )
+        SUPER_ADMIN_EMAIL = click.prompt(
+            "Superadmin Email ", default="superadmin@hypha.test"
+        )
         SUPER_ADMIN_PASSWORD = click.prompt("Superadmin Password ", default="hypha123")
-        SITE_PORT = click.prompt("Site port", default="8090")
+        SITE_PORT = click.prompt("Site port", default="9001")
 
         User = get_user_model()
 
@@ -27,20 +36,25 @@ class Command(BaseCommand):
             user.set_password(SUPER_ADMIN_PASSWORD)
         except User.DoesNotExist:
             User.objects.create_superuser(
-                email=SUPER_ADMIN_EMAIL,
-                password=SUPER_ADMIN_PASSWORD
+                email=SUPER_ADMIN_EMAIL, password=SUPER_ADMIN_PASSWORD
             )
-        click.secho(f">>> Created superuser with email {SUPER_ADMIN_EMAIL}.", fg="green")
+        click.secho(
+            f">>> Created superuser with email {SUPER_ADMIN_EMAIL}.", fg="green"
+        )
 
         # Set site port and domain
-        click.secho(f">>> Set public site to {PUBLIC_SITE_DOMAIN}:{SITE_PORT}", fg="green")
-        site_apply = Site.objects.get(id=2)
-        site_apply.hostname = PUBLIC_SITE_DOMAIN
-        site_apply.port = SITE_PORT
-        site_apply.save()
-
-        click.secho(f">>> Set apply site to {APPLY_SITE_DOMAIN}:{SITE_PORT}", fg="green")
-        site_public = Site.objects.get(id=3)
-        site_public.hostname = APPLY_SITE_DOMAIN
+        click.secho(
+            f">>> Set public site to {PUBLIC_SITE_DOMAIN}:{SITE_PORT}", fg="green"
+        )
+        site_public = Site.objects.get(id=2)
+        site_public.hostname = PUBLIC_SITE_DOMAIN
         site_public.port = SITE_PORT
         site_public.save()
+
+        click.secho(
+            f">>> Set apply site to {APPLY_SITE_DOMAIN}:{SITE_PORT}", fg="green"
+        )
+        site_apply = Site.objects.get(id=3)
+        site_apply.hostname = APPLY_SITE_DOMAIN
+        site_apply.port = SITE_PORT
+        site_apply.save()
diff --git a/hypha/core/management/commands/wagtailsiteupdate.py b/hypha/core/management/commands/wagtailsiteupdate.py
index 204942be0415374169201321473f1c900575a2f2..b342fd781f0d87065f51fe431841be69ebfb2e5f 100644
--- a/hypha/core/management/commands/wagtailsiteupdate.py
+++ b/hypha/core/management/commands/wagtailsiteupdate.py
@@ -7,20 +7,22 @@ class Command(BaseCommand):
     help = "Wagtail site update script. Requires a public hostname, a apply hostname and a port number in that order."
 
     def add_arguments(self, parser):
-        parser.add_argument('public', type=str, help='Hostname for the public site.')
-        parser.add_argument('apply', type=str, help='Hostname for the apply site.')
-        parser.add_argument('port', type=int, help='Port to use for all sites.')
+        parser.add_argument("public", type=str, help="Hostname for the public site.")
+        parser.add_argument("apply", type=str, help="Hostname for the apply site.")
+        parser.add_argument("port", type=int, help="Port to use for all sites.")
 
     @transaction.atomic
     def handle(self, *args, **options):
         site_apply = Site.objects.get(id=2)
-        site_apply.hostname = options['apply']
-        site_apply.port = options['port']
+        site_apply.hostname = options["apply"]
+        site_apply.port = options["port"]
         site_apply.save()
 
         site_public = Site.objects.get(id=3)
-        site_public.hostname = options['public']
-        site_public.port = options['port']
+        site_public.hostname = options["public"]
+        site_public.port = options["port"]
         site_public.save()
 
-        self.stdout.write(f"Updated the public site to {options['public']}:{options['port']} and the apply site to {options['apply']}:{options['port']}.")
+        self.stdout.write(
+            f"Updated the public site to {options['public']}:{options['port']} and the apply site to {options['apply']}:{options['port']}."
+        )
diff --git a/hypha/core/migrations/0001_wagtail_4_reference_index_dependency.py b/hypha/core/migrations/0001_wagtail_4_reference_index_dependency.py
index 247fb641b0d73b7c710499a7a99535be3564e340..f2ce7c1f4feaf57bb0b56503d8240b7b9618cfbe 100644
--- a/hypha/core/migrations/0001_wagtail_4_reference_index_dependency.py
+++ b/hypha/core/migrations/0001_wagtail_4_reference_index_dependency.py
@@ -15,5 +15,4 @@ class Migration(migrations.Migration):
         ("wagtailcore", "0078_referenceindex"),
     ]
 
-    operations = [
-    ]
+    operations = []
diff --git a/hypha/core/templates/components/admin_bar.html b/hypha/core/templates/components/admin_bar.html
index dc8fbc52302a166a0a492114433774a84ddd1b6f..05b8a1e632801fa31be0b5b815eb6a29fb903a98 100644
--- a/hypha/core/templates/components/admin_bar.html
+++ b/hypha/core/templates/components/admin_bar.html
@@ -1,9 +1,10 @@
-{% load components %}
+{% load components i18n %}
 
-<div class="admin-bar">
+<div class="admin-bar bg-arsenic text-white">
     <div class="admin-bar__inner items-center md:flex md:justify-between">
         <div>
-            <h1 class="text-2xl mb-0 font-bold md:text-3xl md:m-0">{% render_slot slots.header %}</h1>
+            {% render_slot slots.back_link %}
+            <h1 class="text-2xl mb-0 md:text-3xl md:m-0">{% render_slot slots.header %}</h1>
             {% if slots.sub_heading %}<p class="text-sm hidden md:block m-0">{% render_slot slots.sub_heading %}</p>{% endif %}
         </div>
 
diff --git a/hypha/core/templates/components/dropdown-menu.html b/hypha/core/templates/components/dropdown-menu.html
index f964a89d40cba1bdfa25273dcd8ad5e2854a15ab..b05fddbaa5ea2653fbdcd45acaed7a6575d22f8c 100644
--- a/hypha/core/templates/components/dropdown-menu.html
+++ b/hypha/core/templates/components/dropdown-menu.html
@@ -1,20 +1,20 @@
 {% load heroicons %}
 <div
     x-data="{
-        open: false,
-        toggle() {
+            open: false,
+            toggle() {
             if (this.open) {
-                return this.close()
+            return this.close()
             }
             this.$refs.button.focus()
             this.open = true
-        },
-        close(focusAfter) {
+            },
+            close(focusAfter) {
             if (! this.open) return
             this.open = false
             focusAfter && focusAfter.focus()
-        }
-    }"
+            }
+            }"
     x-on:keydown.escape.prevent.stop="close($refs.button)"
     x-on:focusin.window="! $refs.panel.contains($event.target) && close()"
     x-id="['dropdown-button']"
@@ -41,14 +41,14 @@
 
     <!-- Panel -->
     <div class="m-4 z-20 border min-w-max fixed top-0 left-0 right-0 md:text-sm md:m-0 md:mt-1 md:absolute md:left-auto {% if attributes.position == 'right' %}md:right-0{% else %} md:right-auto{% endif %} md:top-auto md:bottom-auto bg-white divide-y divide-gray-100 rounded-lg shadow-lg"
-        role="menu"
-        x-ref="panel"
-        x-show="open"
-        x-trap="open"
-        x-transition.origin.top
-        @click.away="open = false"
-        :id="$id('dropdown-button')"
-        x-cloak
+         role="menu"
+         x-ref="panel"
+         x-show="open"
+         x-trap="open"
+         x-transition.origin.top
+         @click.away="open = false"
+         :id="$id('dropdown-button')"
+         x-cloak
     >
         {% if attributes.heading %}
             <header class="subheading border-b px-3 py-2 flex justify-between items-center gap-2">
@@ -60,26 +60,26 @@
         {% endif %}
 
         {% if attributes.enable_search %}
-        <filter-input aria-owns="dd-content-{{ id }}" class='py-3 px-3 border-b flex grow'>
-            <label for="search-{{ id }}" class="sr-only">Filter {{ attributes.title }}</label>
-            <input type="text"
-                autofocus
-                id="search-{{ id }}"
-                @keydown.down="$focus.next()"
-                placeholder="Filter {{ attributes.title }}"
-                class="grow p-2 md:py-1 text-inherit font-normal w-max text-gray-900 border border-gray-300 rounded focus:ring-blue-500 focus:border-blue-500">
-        </filter-input>
+            <filter-input aria-owns="dd-content-{{ id }}" class='py-3 px-3 border-b flex grow'>
+                <label for="search-{{ id }}" class="sr-only">Filter {{ attributes.title }}</label>
+                <input type="text"
+                       autofocus
+                       id="search-{{ id }}"
+                       @keydown.down="$focus.next()"
+                       placeholder="Filter {{ attributes.title }}"
+                       class="grow p-2 md:py-1 text-inherit font-normal w-max text-gray-900 border border-gray-300 rounded focus:ring-blue-500 focus:border-blue-500">
+            </filter-input>
         {% endif %}
 
         <div id="dd-content-{{ id }}" class="font-semibold text-inherit md:w-[300px]"
-            @keydown.down="$focus.next()"
-            @keydown.up="$focus.previous()"
+             @keydown.down="$focus.next()"
+             @keydown.up="$focus.previous()"
         >
             {% render_slot slots.inner_block %}
             {% if slots.url %}
                 <div role="status" class="flex justify-center items-center py-4">
                     <svg aria-hidden="true" width="8" height="8" class="w-8 h-8 mr-2 text-gray-200 animate-spin dark:text-gray-600 fill-blue-600"
-                        viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
+                         viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
                         <path
                             d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z"
                             fill="currentColor" />
diff --git a/hypha/core/templates/core/wagtail/panels/inline_panel_readonly.html b/hypha/core/templates/core/wagtail/panels/inline_panel_readonly.html
index ed10e8224c03a19a223de37b54e716453b0bc382..da14b94e9bfb39756614dcc034bda3f44280630d 100644
--- a/hypha/core/templates/core/wagtail/panels/inline_panel_readonly.html
+++ b/hypha/core/templates/core/wagtail/panels/inline_panel_readonly.html
@@ -17,11 +17,11 @@
 
     {% for child in self.children %}
         <li data-inline-panel-child id="inline_child_{{ child.form.prefix }}" data-contentpath-disabled>
-        {{ child.render_form_content }}
+            {{ child.render_form_content }}
         </li>
     {% empty %}
-    <li>
-    ---
-    </li>
+        <li>
+            ---
+        </li>
     {% endfor %}
 </ul>
diff --git a/hypha/core/templatetags/querystrings.py b/hypha/core/templatetags/querystrings.py
index a0e83e4c7d500b5e9e9ff62e607f950a0431697e..40d98f9d20b05a604dce910c6e63755f95ca2f95 100644
--- a/hypha/core/templatetags/querystrings.py
+++ b/hypha/core/templatetags/querystrings.py
@@ -8,7 +8,7 @@ register = template.Library()
 
 @register.simple_tag(takes_context=True)
 def get_query(context, param):
-    url = context.get('request').get_full_path()
+    url = context.get("request").get_full_path()
     parsed_url = urlparse(url)
     captured_value = parse_qs(parsed_url.query)
 
@@ -36,11 +36,13 @@ def modify_query(context, *params_to_remove, **params_to_change):
     """Renders a link with modified current query parameters"""
     only_query_string = False
     if "only_query_string" in params_to_remove:
-        params_to_remove = [param for param in params_to_remove if param != "only_query_string"]
+        params_to_remove = [
+            param for param in params_to_remove if param != "only_query_string"
+        ]
         only_query_string = True
     query_params = []
     for key, value_list in context["request"].GET.lists():
-        if  key not in params_to_remove:
+        if key not in params_to_remove:
             # don't add key-value pairs for params_to_remove
             if key in params_to_change:
                 # update values for keys in params_to_change
@@ -64,7 +66,9 @@ def add_to_query(context, *params_to_remove, **params_to_add):
     """Renders a link with modified current query parameters"""
     only_query_string = False
     if "only_query_string" in params_to_remove:
-        params_to_remove = [param for param in params_to_remove if param != "only_query_string"]
+        params_to_remove = [
+            param for param in params_to_remove if param != "only_query_string"
+        ]
         only_query_string = True
     query_params = []
     # go through current query params..
diff --git a/hypha/core/tests/test_utils.py b/hypha/core/tests/test_utils.py
index c5b6d79e4ee097883ecebe662b231121c7c9d15f..7256d4f6871d89293eae5965cd54fe607d80b045 100644
--- a/hypha/core/tests/test_utils.py
+++ b/hypha/core/tests/test_utils.py
@@ -15,7 +15,7 @@ Cell1  | Cell2""",
 ]
 
 
-@pytest.mark.parametrize('test_input,expected', markdown_test_dataset)
+@pytest.mark.parametrize("test_input,expected", markdown_test_dataset)
 def test_markdown_to_html(test_input, expected):
-    output = markdown_to_html(test_input).replace('\n', '').replace('  ', '')
+    output = markdown_to_html(test_input).replace("\n", "").replace("  ", "")
     assert output == expected
diff --git a/hypha/core/utils.py b/hypha/core/utils.py
index 506091ca90387ba7e1f6747e9a6cb6b74ee21b9c..0b3ac7295d14483d15ed9cf009e2e57f08d3a058 100644
--- a/hypha/core/utils.py
+++ b/hypha/core/utils.py
@@ -18,7 +18,7 @@ def markdown_to_html(text: str) -> str:
     md = mistune.create_markdown(
         escape=False,
         hard_wrap=True,
-        renderer='html',
-        plugins=['strikethrough', 'footnotes', 'table'],
+        renderer="html",
+        plugins=["strikethrough", "footnotes", "table"],
     )
     return md(text)
diff --git a/hypha/core/wagtail_hooks.py b/hypha/core/wagtail_hooks.py
index 2961b275a583c0f1d5939a5ffab7bb63a8697dfb..4a16b4bda8de9fce50f060a8cf8d3e2d6aaa7a87 100644
--- a/hypha/core/wagtail_hooks.py
+++ b/hypha/core/wagtail_hooks.py
@@ -4,13 +4,13 @@ from wagtail.admin.menu import Menu
 from wagtail.admin.wagtail_hooks import SettingsMenuItem
 
 public_site_settings_menu = Menu(
-    register_hook_name='register_public_site_setting_menu_item',
-    construct_hook_name='construct_public_site_settings_menu',
+    register_hook_name="register_public_site_setting_menu_item",
+    construct_hook_name="construct_public_site_settings_menu",
 )
 
 
-@hooks.register('register_admin_menu_item')
+@hooks.register("register_admin_menu_item")
 def register_public_site_settings_menu():
     return SettingsMenuItem(
-        _('Public Site'), public_site_settings_menu, icon_name='list-ul', order=9999
+        _("Public Site"), public_site_settings_menu, icon_name="list-ul", order=9999
     )
diff --git a/hypha/images/migrations/0001_initial.py b/hypha/images/migrations/0001_initial.py
index 3143ac9a86a44ccb119a45d739f8a8b7e4531ff5..35a32abb9b5e64ae5130e3753d2ee7c71ef61a18 100644
--- a/hypha/images/migrations/0001_initial.py
+++ b/hypha/images/migrations/0001_initial.py
@@ -12,55 +12,136 @@ import wagtail.search.index
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0032_add_bulk_delete_page_permission'),
+        ("wagtailcore", "0032_add_bulk_delete_page_permission"),
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('taggit', '0002_auto_20150616_2121'),
+        ("taggit", "0002_auto_20150616_2121"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='CustomImage',
+            name="CustomImage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.CharField(max_length=255, verbose_name='title')),
-                ('file', models.ImageField(height_field='height', upload_to=wagtail.images.models.get_upload_to, verbose_name='file', width_field='width')),
-                ('width', models.IntegerField(editable=False, verbose_name='width')),
-                ('height', models.IntegerField(editable=False, verbose_name='height')),
-                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created at')),
-                ('focal_point_x', models.PositiveIntegerField(blank=True, null=True)),
-                ('focal_point_y', models.PositiveIntegerField(blank=True, null=True)),
-                ('focal_point_width', models.PositiveIntegerField(blank=True, null=True)),
-                ('focal_point_height', models.PositiveIntegerField(blank=True, null=True)),
-                ('file_size', models.PositiveIntegerField(editable=False, null=True)),
-                ('alt', models.CharField(blank=True, max_length=255)),
-                ('credit', models.CharField(blank=True, max_length=255)),
-                ('collection', models.ForeignKey(default=wagtail.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Collection', verbose_name='collection')),
-                ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')),
-                ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.CharField(max_length=255, verbose_name="title")),
+                (
+                    "file",
+                    models.ImageField(
+                        height_field="height",
+                        upload_to=wagtail.images.models.get_upload_to,
+                        verbose_name="file",
+                        width_field="width",
+                    ),
+                ),
+                ("width", models.IntegerField(editable=False, verbose_name="width")),
+                ("height", models.IntegerField(editable=False, verbose_name="height")),
+                (
+                    "created_at",
+                    models.DateTimeField(
+                        auto_now_add=True, db_index=True, verbose_name="created at"
+                    ),
+                ),
+                ("focal_point_x", models.PositiveIntegerField(blank=True, null=True)),
+                ("focal_point_y", models.PositiveIntegerField(blank=True, null=True)),
+                (
+                    "focal_point_width",
+                    models.PositiveIntegerField(blank=True, null=True),
+                ),
+                (
+                    "focal_point_height",
+                    models.PositiveIntegerField(blank=True, null=True),
+                ),
+                ("file_size", models.PositiveIntegerField(editable=False, null=True)),
+                ("alt", models.CharField(blank=True, max_length=255)),
+                ("credit", models.CharField(blank=True, max_length=255)),
+                (
+                    "collection",
+                    models.ForeignKey(
+                        default=wagtail.models.get_root_collection_id,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="+",
+                        to="wagtailcore.Collection",
+                        verbose_name="collection",
+                    ),
+                ),
+                (
+                    "tags",
+                    taggit.managers.TaggableManager(
+                        blank=True,
+                        help_text=None,
+                        through="taggit.TaggedItem",
+                        to="taggit.Tag",
+                        verbose_name="tags",
+                    ),
+                ),
+                (
+                    "uploaded_by_user",
+                    models.ForeignKey(
+                        blank=True,
+                        editable=False,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        to=settings.AUTH_USER_MODEL,
+                        verbose_name="uploaded by user",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
             bases=(wagtail.search.index.Indexed, models.Model),
         ),
         migrations.CreateModel(
-            name='Rendition',
+            name="Rendition",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('filter_spec', models.CharField(db_index=True, max_length=255)),
-                ('file', models.ImageField(height_field='height', upload_to=wagtail.images.models.get_rendition_upload_to, width_field='width')),
-                ('width', models.IntegerField(editable=False)),
-                ('height', models.IntegerField(editable=False)),
-                ('focal_point_key', models.CharField(blank=True, default='', editable=False, max_length=16)),
-                ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='renditions', to='images.CustomImage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("filter_spec", models.CharField(db_index=True, max_length=255)),
+                (
+                    "file",
+                    models.ImageField(
+                        height_field="height",
+                        upload_to=wagtail.images.models.get_rendition_upload_to,
+                        width_field="width",
+                    ),
+                ),
+                ("width", models.IntegerField(editable=False)),
+                ("height", models.IntegerField(editable=False)),
+                (
+                    "focal_point_key",
+                    models.CharField(
+                        blank=True, default="", editable=False, max_length=16
+                    ),
+                ),
+                (
+                    "image",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="renditions",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
         ),
         migrations.AlterUniqueTogether(
-            name='rendition',
-            unique_together={('image', 'filter_spec', 'focal_point_key')},
+            name="rendition",
+            unique_together={("image", "filter_spec", "focal_point_key")},
         ),
     ]
diff --git a/hypha/images/migrations/0002_customimage_file_hash.py b/hypha/images/migrations/0002_customimage_file_hash.py
index 8a24374d99544af569bc6153db9ce9b6606e1992..cc26e9f7a410b3584ddb1c0ad7e35d2092549112 100644
--- a/hypha/images/migrations/0002_customimage_file_hash.py
+++ b/hypha/images/migrations/0002_customimage_file_hash.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
+        ("images", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='customimage',
-            name='file_hash',
+            model_name="customimage",
+            name="file_hash",
             field=models.CharField(blank=True, editable=False, max_length=40),
         ),
     ]
diff --git a/hypha/images/migrations/0003_customimage_drupal_id.py b/hypha/images/migrations/0003_customimage_drupal_id.py
index c9257618b34d675ff985d5cf5346b697840ae432..264316b717ef152921953b9e095190619144516c 100644
--- a/hypha/images/migrations/0003_customimage_drupal_id.py
+++ b/hypha/images/migrations/0003_customimage_drupal_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0002_customimage_file_hash'),
+        ("images", "0002_customimage_file_hash"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='customimage',
-            name='drupal_id',
+            model_name="customimage",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/images/migrations/0004_alter_customimage_file_hash.py b/hypha/images/migrations/0004_alter_customimage_file_hash.py
index f248cf31ee2275472a0a2a9f7ffbbcd323646801..85b6f987d23cc7daf34d2b609138af3ca1ef9356 100644
--- a/hypha/images/migrations/0004_alter_customimage_file_hash.py
+++ b/hypha/images/migrations/0004_alter_customimage_file_hash.py
@@ -4,15 +4,16 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0003_customimage_drupal_id'),
+        ("images", "0003_customimage_drupal_id"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='customimage',
-            name='file_hash',
-            field=models.CharField(blank=True, db_index=True, editable=False, max_length=40),
+            model_name="customimage",
+            name="file_hash",
+            field=models.CharField(
+                blank=True, db_index=True, editable=False, max_length=40
+            ),
         ),
     ]
diff --git a/hypha/images/migrations/0005_auto_20230214_0658.py b/hypha/images/migrations/0005_auto_20230214_0658.py
index 74c49eba3acb32c37b07256b5fd750d5b8c4739c..09f0b6a8d46aa1b9b9701672d75bf06cdad3e1f2 100644
--- a/hypha/images/migrations/0005_auto_20230214_0658.py
+++ b/hypha/images/migrations/0005_auto_20230214_0658.py
@@ -5,20 +5,28 @@ import wagtail.images.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0004_alter_customimage_file_hash'),
+        ("images", "0004_alter_customimage_file_hash"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='customimage',
-            name='file',
-            field=wagtail.images.models.WagtailImageField(height_field='height', upload_to=wagtail.images.models.get_upload_to, verbose_name='file', width_field='width'),
+            model_name="customimage",
+            name="file",
+            field=wagtail.images.models.WagtailImageField(
+                height_field="height",
+                upload_to=wagtail.images.models.get_upload_to,
+                verbose_name="file",
+                width_field="width",
+            ),
         ),
         migrations.AlterField(
-            model_name='rendition',
-            name='file',
-            field=wagtail.images.models.WagtailImageField(height_field='height', upload_to=wagtail.images.models.get_rendition_upload_to, width_field='width'),
+            model_name="rendition",
+            name="file",
+            field=wagtail.images.models.WagtailImageField(
+                height_field="height",
+                upload_to=wagtail.images.models.get_rendition_upload_to,
+                width_field="width",
+            ),
         ),
     ]
diff --git a/hypha/images/models.py b/hypha/images/models.py
index 6ae7525cc31db60d8da87d69d63b9453b59ddebf..129b0faf8f7ec812b53ae624a8a1c02935a7770e 100644
--- a/hypha/images/models.py
+++ b/hypha/images/models.py
@@ -11,8 +11,8 @@ class CustomImage(AbstractImage):
     credit = models.CharField(max_length=255, blank=True)
 
     admin_form_fields = Image.admin_form_fields + (
-        'alt',
-        'credit',
+        "alt",
+        "credit",
     )
 
     # When you save the image, check if alt text has been set. If not, set it as the title.
@@ -25,12 +25,8 @@ class CustomImage(AbstractImage):
 
 class Rendition(AbstractRendition):
     image = models.ForeignKey(
-        'CustomImage',
-        related_name='renditions',
-        on_delete=models.CASCADE
+        "CustomImage", related_name="renditions", on_delete=models.CASCADE
     )
 
     class Meta:
-        unique_together = (
-            ('image', 'filter_spec', 'focal_point_key'),
-        )
+        unique_together = (("image", "filter_spec", "focal_point_key"),)
diff --git a/hypha/locale/django.pot b/hypha/locale/django.pot
index 017918187732a76dbd82708646a7741ab498fb0c..6716df74c453b52eedd574890361f618de3ca44d 100644
--- a/hypha/locale/django.pot
+++ b/hypha/locale/django.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-13 09:19+0000\n"
+"POT-Creation-Date: 2023-08-11 09:49+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,508 +18,510 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: hypha/apply/activity/adapters/activity_feed.py:20
+#: hypha/apply/activity/adapters/activity_feed.py:21
 #, python-brace-format
 msgid "Submitted {source.title} for {source.page.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:21
 #: hypha/apply/activity/adapters/activity_feed.py:22
+#: hypha/apply/activity/adapters/activity_feed.py:23
 msgid "Edited"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:23
-#: hypha/apply/activity/adapters/activity_feed.py:37
+#: hypha/apply/activity/adapters/activity_feed.py:24
+#: hypha/apply/activity/adapters/activity_feed.py:38
 #, python-brace-format
 msgid "Lead changed from {old_lead} to {source.lead}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:24
+#: hypha/apply/activity/adapters/activity_feed.py:25
 #, python-brace-format
 msgid "Batch Lead changed to {new_lead}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:25
+#: hypha/apply/activity/adapters/activity_feed.py:26
 #, python-brace-format
 msgid "Sent a determination. Outcome: {determination.clean_outcome}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:27
+#: hypha/apply/activity/adapters/activity_feed.py:28
 msgid "Invited to submit a proposal"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:31
+#: hypha/apply/activity/adapters/activity_feed.py:32
 msgid "Submitted a review"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:32
+#: hypha/apply/activity/adapters/activity_feed.py:33
 msgid "Opened the submission while still sealed"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:34
+#: hypha/apply/activity/adapters/activity_feed.py:35
 #, python-brace-format
 msgid ""
 "{user} {opinion.opinion_display}s with {opinion.review.author}s review of "
 "{source}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:35
+#: hypha/apply/activity/adapters/activity_feed.py:36
 msgid "Created"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:36
+#: hypha/apply/activity/adapters/activity_feed.py:37
 #, python-brace-format
 msgid "Progressed from {old_stage} to {source.status_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:38
+#: hypha/apply/activity/adapters/activity_feed.py:39
 msgid "Requested approval"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:39
-#: hypha/apply/determinations/options.py:12
+#: hypha/apply/activity/adapters/activity_feed.py:40
+#: hypha/apply/determinations/options.py:12 hypha/apply/projects/utils.py:116
 msgid "Approved"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:40
+#: hypha/apply/activity/adapters/activity_feed.py:41
 #, python-brace-format
 msgid "Requested changes for acceptance: \"{comment}\""
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:41
+#: hypha/apply/activity/adapters/activity_feed.py:42
 msgid "Submitted Contract Documents"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:42
+#: hypha/apply/activity/adapters/activity_feed.py:43
 #, python-brace-format
 msgid "Uploaded a {contract.state} contract"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:43
+#: hypha/apply/activity/adapters/activity_feed.py:44
 msgid "Approved contract"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:45
-msgid "Invoice created"
+#: hypha/apply/activity/adapters/activity_feed.py:46
+#: hypha/apply/projects/views/payment.py:218
+msgid "Invoice added"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:46
+#: hypha/apply/activity/adapters/activity_feed.py:47
 msgid "Submitted a report"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:49
-#: hypha/apply/activity/adapters/django_messages.py:21
+#: hypha/apply/activity/adapters/activity_feed.py:50
+#: hypha/apply/activity/adapters/django_messages.py:20
 msgid "Reporting disabled"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:52
-#: hypha/apply/activity/adapters/slack.py:73
+#: hypha/apply/activity/adapters/activity_feed.py:53
+#: hypha/apply/activity/adapters/slack.py:72
 #, python-brace-format
 msgid "{user} has archived the submission: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:53
-#: hypha/apply/activity/adapters/slack.py:74
+#: hypha/apply/activity/adapters/activity_feed.py:54
+#: hypha/apply/activity/adapters/slack.py:73
 #, python-brace-format
 msgid "{user} has unarchived the submission: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:83
+#: hypha/apply/activity/adapters/activity_feed.py:89
 msgid "Reviewers updated."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:85
-#: hypha/apply/activity/adapters/activity_feed.py:170
-#: hypha/apply/activity/adapters/slack.py:182
+#: hypha/apply/activity/adapters/activity_feed.py:91
+#: hypha/apply/activity/adapters/activity_feed.py:176
+#: hypha/apply/activity/adapters/slack.py:180
 msgid "Added:"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:89
-#: hypha/apply/activity/adapters/activity_feed.py:174
-#: hypha/apply/activity/adapters/slack.py:186
+#: hypha/apply/activity/adapters/activity_feed.py:95
+#: hypha/apply/activity/adapters/activity_feed.py:180
+#: hypha/apply/activity/adapters/slack.py:184
 msgid "Removed:"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:95
+#: hypha/apply/activity/adapters/activity_feed.py:101
 msgid "Batch Reviewers Updated."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:98
+#: hypha/apply/activity/adapters/activity_feed.py:104
 #, python-brace-format
 msgid "{user} as {name}."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:115
+#: hypha/apply/activity/adapters/activity_feed.py:121
 #, python-brace-format
 msgid "Successfully deleted submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:122
+#: hypha/apply/activity/adapters/activity_feed.py:128
 #, python-brace-format
 msgid "Successfully archived submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:128
+#: hypha/apply/activity/adapters/activity_feed.py:134
 #, python-brace-format
 msgid "Progressed from {old_display} to {new_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:168
+#: hypha/apply/activity/adapters/activity_feed.py:174
 msgid "Partners updated."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:182
+#: hypha/apply/activity/adapters/activity_feed.py:188
 #, python-brace-format
 msgid ""
 "Updated reporting frequency. New schedule is: {new_schedule} starting on "
 "{schedule_start}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:192
+#: hypha/apply/activity/adapters/activity_feed.py:198
 #, python-brace-format
-msgid "Updated Invoice status to: {status}."
+msgid "Updated Invoice status to: {invoice_status}."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:230
+#: hypha/apply/activity/adapters/activity_feed.py:246
 #, python-brace-format
 msgid "Screening decision from {old_status} to {new_status}"
 msgstr ""
 
 #: hypha/apply/activity/adapters/django_messages.py:17
-msgid "Successfully uploaded document"
-msgstr ""
-
-#: hypha/apply/activity/adapters/django_messages.py:18
 msgid "Successfully removed document"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:22
+#: hypha/apply/activity/adapters/django_messages.py:21
 msgid "Reminder created"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:23
+#: hypha/apply/activity/adapters/django_messages.py:22
 msgid "Reminder deleted"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:28
-#: hypha/apply/activity/adapters/slack.py:207
+#: hypha/apply/activity/adapters/django_messages.py:27
+#: hypha/apply/activity/adapters/slack.py:205
 #, python-brace-format
 msgid "{user} as {name},"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:34
+#: hypha/apply/activity/adapters/django_messages.py:33
 #, python-brace-format
 msgid "Batch reviewers added: {reviewers_text} to "
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:39
+#: hypha/apply/activity/adapters/django_messages.py:38
 #, python-brace-format
 msgid ""
 "Successfully updated reporting frequency. They will now report "
 "{new_schedule} starting on {schedule_start}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:43
+#: hypha/apply/activity/adapters/django_messages.py:42
 #, python-brace-format
 msgid "Successfully skipped a Report for {start_date} to {end_date}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:45
+#: hypha/apply/activity/adapters/django_messages.py:44
 #, python-brace-format
 msgid "Successfully unskipped a Report for {start_date} to {end_date}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:64
+#: hypha/apply/activity/adapters/django_messages.py:63
 #, python-brace-format
 msgid "Successfully determined as {outcome}: "
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:75
+#: hypha/apply/activity/adapters/emails.py:77
 #, python-brace-format
 msgid "Application ready to review: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:82
+#: hypha/apply/activity/adapters/emails.py:84
 msgid "Multiple applications are now ready for your review"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:85
+#: hypha/apply/activity/adapters/emails.py:87
 #, python-brace-format
 msgid "Reminder: Application ready to review: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:88
+#: hypha/apply/activity/adapters/emails.py:90
 #, python-brace-format
 msgid "Project is waiting for approval: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:90
+#: hypha/apply/activity/adapters/emails.py:92
 #, python-brace-format
 msgid "Contract uploaded for the project: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:92
+#: hypha/apply/activity/adapters/emails.py:94
 #, python-brace-format
 msgid "Contract Documents required approval for the project: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:96
+#: hypha/apply/activity/adapters/emails.py:101
 #, python-brace-format
 msgid "Project is waiting for the contract: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:98
+#: hypha/apply/activity/adapters/emails.py:103
 #, python-brace-format
 msgid "Project is ready for invoicing: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:100
+#: hypha/apply/activity/adapters/emails.py:105
 #, python-brace-format
 msgid "Project status has changed to {source.status}: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:102
+#: hypha/apply/activity/adapters/emails.py:107
 msgid "Project has been rejected, please update and resubmit"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:106
+#: hypha/apply/activity/adapters/emails.py:109
+#, python-brace-format
+msgid "Project documents are ready to be assigned for approval: {source.title}"
+msgstr ""
+
+#: hypha/apply/activity/adapters/emails.py:113
 #, python-brace-format
 msgid "Your application to {org_long_name}: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:109
+#: hypha/apply/activity/adapters/emails.py:116
 #, python-brace-format
 msgid "Your {org_long_name} Project: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:33
+#: hypha/apply/activity/adapters/slack.py:32
 #, python-brace-format
 msgid ""
 "A new submission has been submitted for {source.page.title}: <{link}|{source."
 "title}> by {user}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:34
+#: hypha/apply/activity/adapters/slack.py:33
 #, python-brace-format
 msgid ""
 "The lead of <{link}|{source.title}> has been updated from {old_lead} to "
 "{source.lead} by {user}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:36
+#: hypha/apply/activity/adapters/slack.py:35
 #, python-brace-format
 msgid ""
 "A new {comment.visibility} comment has been posted on <{link}|{source.title}"
 "> by {user}"
 msgstr ""
 
+#: hypha/apply/activity/adapters/slack.py:36
 #: hypha/apply/activity/adapters/slack.py:37
-#: hypha/apply/activity/adapters/slack.py:38
 #, python-brace-format
 msgid "{user} has edited <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:41
+#: hypha/apply/activity/adapters/slack.py:40
 #, python-brace-format
 msgid "{user} has updated the partners on <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:42
+#: hypha/apply/activity/adapters/slack.py:41
 #, python-brace-format
 msgid ""
 "{user} has updated the status of <{link}|{source.title}>: {old_phase."
 "display_name} → {source.phase}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:46
+#: hypha/apply/activity/adapters/slack.py:45
 #, python-brace-format
 msgid "A proposal has been submitted for review: <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:47
+#: hypha/apply/activity/adapters/slack.py:46
 #, python-brace-format
 msgid ""
 "<{link}|{source.title}> by {source.user} has been invited to submit a "
 "proposal"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:48
+#: hypha/apply/activity/adapters/slack.py:47
 #, python-brace-format
 msgid ""
 "{user} has submitted a review for <{link}|{source.title}>. Outcome: {review."
 "outcome},  Score: {review.get_score_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:50
+#: hypha/apply/activity/adapters/slack.py:49
 #, python-brace-format
 msgid "{user} has opened the sealed submission: <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:51
+#: hypha/apply/activity/adapters/slack.py:50
 #, python-brace-format
 msgid ""
 "{user} {opinion.opinion_display}s with {opinion.review.author}s review of "
 "<{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:53
+#: hypha/apply/activity/adapters/slack.py:52
 #, python-brace-format
 msgid "{user} has deleted {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:54
+#: hypha/apply/activity/adapters/slack.py:53
 #, python-brace-format
 msgid "{user} has deleted {review.author} review for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:55
+#: hypha/apply/activity/adapters/slack.py:54
 #, python-brace-format
 msgid "{user} has created a Project: <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:56
+#: hypha/apply/activity/adapters/slack.py:55
 #, python-brace-format
 msgid ""
 "The lead of project <{link}|{source.title}> has been updated from {old_lead} "
 "to {source.lead} by {user}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:57
+#: hypha/apply/activity/adapters/slack.py:56
 #, python-brace-format
 msgid "{user} has edited {review.author} review for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:58
+#: hypha/apply/activity/adapters/slack.py:57
 #, python-brace-format
 msgid "{user} has requested approval on project <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:59
+#: hypha/apply/activity/adapters/slack.py:58
 #, python-brace-format
 msgid "{user} has approved project <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:60
+#: hypha/apply/activity/adapters/slack.py:59
 #, python-brace-format
 msgid ""
 "{user} has requested changes for project acceptance on <{link}|{source.title}"
 ">"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:61
+#: hypha/apply/activity/adapters/slack.py:60
 #, python-brace-format
 msgid "{user} has uploaded a contract for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:62
+#: hypha/apply/activity/adapters/slack.py:61
 #, python-brace-format
 msgid ""
 "{user} has submitted the contracting document for project <{link}|{source."
 "title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:63
+#: hypha/apply/activity/adapters/slack.py:62
 #, python-brace-format
 msgid "{user} has approved contract for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:64
+#: hypha/apply/activity/adapters/slack.py:63
 #, python-brace-format
 msgid "{user} has created invoice for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:65
+#: hypha/apply/activity/adapters/slack.py:64
 #, python-brace-format
 msgid ""
 "{user} has changed the status of <{link_related}|invoice> on <{link}|{source."
 "title}> to {invoice.status_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:66
+#: hypha/apply/activity/adapters/slack.py:65
 #, python-brace-format
 msgid "{user} has deleted invoice from <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:67
+#: hypha/apply/activity/adapters/slack.py:66
 #, python-brace-format
 msgid "{user} has updated invoice for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:68
+#: hypha/apply/activity/adapters/slack.py:67
 #, python-brace-format
 msgid "{user} has submitted a report for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:70
+#: hypha/apply/activity/adapters/slack.py:69
 #, python-brace-format
 msgid "{user} has created a new account for <{link}|{source}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:71
+#: hypha/apply/activity/adapters/slack.py:70
 #, python-brace-format
 msgid ""
 "{user} has edited account for <{link}|{source}> that now has following "
 "roles: {roles}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:176
+#: hypha/apply/activity/adapters/slack.py:174
 #, python-brace-format
 msgid "{user} has updated the reviewers on <{link}|{title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:195
+#: hypha/apply/activity/adapters/slack.py:193
 #, python-brace-format
 msgid "{user} has batch changed lead to {new_lead} on: {submissions_text}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:213
+#: hypha/apply/activity/adapters/slack.py:211
 #, python-brace-format
 msgid ""
 "{user} has batch added {reviewers_text} as reviewers on: {submissions_text}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:233
+#: hypha/apply/activity/adapters/slack.py:231
 #, python-brace-format
 msgid "{user} has transitioned the following submissions: {submissions_links}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:243
+#: hypha/apply/activity/adapters/slack.py:241
 #, python-brace-format
 msgid ""
 "A determination for <{link}|{submission_title}> was sent by email. Outcome: "
 "{determination_outcome}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:250
+#: hypha/apply/activity/adapters/slack.py:248
 #, python-brace-format
 msgid ""
 "A determination for <{link}|{submission_title}> was saved without sending an "
 "email. Outcome: {determination_outcome}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:266
+#: hypha/apply/activity/adapters/slack.py:264
 #, python-brace-format
 msgid "Determinations of {outcome} was sent for: {submissions_links}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:275
+#: hypha/apply/activity/adapters/slack.py:273
 #, python-brace-format
 msgid "{user} has deleted submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:282
+#: hypha/apply/activity/adapters/slack.py:280
 #, python-brace-format
 msgid "{user} has archived submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:296
+#: hypha/apply/activity/adapters/slack.py:294
 #, python-brace-format
 msgid ""
 "<{link}|{title}> is ready for review. The following are assigned as "
 "reviewers: {reviewers}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/utils.py:32
+#: hypha/apply/activity/adapters/utils.py:43
 #, python-brace-format
 msgid " as {role}"
 msgstr ""
@@ -548,7 +550,7 @@ msgstr ""
 msgid "Activities Summary - "
 msgstr ""
 
-#: hypha/apply/activity/models.py:157
+#: hypha/apply/activity/models.py:168
 msgid "verb"
 msgstr ""
 
@@ -677,114 +679,118 @@ msgid "approved project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:38
-msgid "approved paf"
+msgid "assign paf approver"
 msgstr ""
 
 #: hypha/apply/activity/options.py:39
-msgid "transitioned project"
+msgid "approved paf"
 msgstr ""
 
 #: hypha/apply/activity/options.py:40
-msgid "requested project change"
+msgid "transitioned project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:41
-msgid "submitted contract documents"
+msgid "requested project change"
 msgstr ""
 
 #: hypha/apply/activity/options.py:42
-msgid "uploaded document to project"
+msgid "submitted contract documents"
 msgstr ""
 
 #: hypha/apply/activity/options.py:43
-msgid "removed document from project"
+msgid "uploaded document to project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:44
-msgid "uploaded contract to project"
+msgid "removed document from project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:45
-msgid "approved contract"
+msgid "uploaded contract to project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:46
-msgid "created invoice for project"
+msgid "approved contract"
 msgstr ""
 
 #: hypha/apply/activity/options.py:47
-msgid "updated invoice status"
+msgid "created invoice for project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:48
-msgid "approve invoice"
+msgid "updated invoice status"
 msgstr ""
 
 #: hypha/apply/activity/options.py:49
-msgid "deleted invoice"
+msgid "approve invoice"
 msgstr ""
 
 #: hypha/apply/activity/options.py:50
-msgid "sent project to compliance"
+msgid "deleted invoice"
 msgstr ""
 
 #: hypha/apply/activity/options.py:51
-msgid "updated invoice"
+msgid "sent project to compliance"
 msgstr ""
 
 #: hypha/apply/activity/options.py:52
-msgid "submitted report"
+msgid "updated invoice"
 msgstr ""
 
 #: hypha/apply/activity/options.py:53
-msgid "skipped report"
+msgid "submitted report"
 msgstr ""
 
 #: hypha/apply/activity/options.py:54
-msgid "changed report frequency"
+msgid "skipped report"
 msgstr ""
 
 #: hypha/apply/activity/options.py:55
-msgid "disabled reporting"
+msgid "changed report frequency"
 msgstr ""
 
 #: hypha/apply/activity/options.py:56
-msgid "notified report"
+msgid "disabled reporting"
 msgstr ""
 
 #: hypha/apply/activity/options.py:57
-msgid "created reminder"
+msgid "notified report"
 msgstr ""
 
 #: hypha/apply/activity/options.py:58
-msgid "deleted reminder"
+msgid "created reminder"
 msgstr ""
 
 #: hypha/apply/activity/options.py:59
-msgid "reminder to review"
+msgid "deleted reminder"
 msgstr ""
 
 #: hypha/apply/activity/options.py:60
-msgid "batch deleted submissions"
+msgid "reminder to review"
 msgstr ""
 
 #: hypha/apply/activity/options.py:61
-msgid "batch archive submissions"
+msgid "batch deleted submissions"
 msgstr ""
 
 #: hypha/apply/activity/options.py:62
-msgid "created new account"
+msgid "batch archive submissions"
 msgstr ""
 
 #: hypha/apply/activity/options.py:63
-msgid "edited account"
+msgid "created new account"
 msgstr ""
 
 #: hypha/apply/activity/options.py:64
-msgid "archived submission"
+msgid "edited account"
 msgstr ""
 
 #: hypha/apply/activity/options.py:65
+msgid "archived submission"
+msgstr ""
+
+#: hypha/apply/activity/options.py:66
 msgid "unarchived submission"
 msgstr ""
 
@@ -794,29 +800,32 @@ msgstr ""
 
 #: hypha/apply/activity/templates/activity/include/comment_form.html:5
 #: hypha/apply/determinations/templates/determinations/base_determination_form.html:50
-#: hypha/apply/funds/views.py:1198 hypha/apply/funds/workflow.py:202
-#: hypha/apply/funds/workflow.py:230 hypha/apply/funds/workflow.py:273
-#: hypha/apply/funds/workflow.py:329 hypha/apply/funds/workflow.py:355
-#: hypha/apply/funds/workflow.py:393 hypha/apply/funds/workflow.py:431
-#: hypha/apply/funds/workflow.py:484 hypha/apply/funds/workflow.py:512
-#: hypha/apply/funds/workflow.py:572 hypha/apply/funds/workflow.py:610
-#: hypha/apply/funds/workflow.py:663 hypha/apply/funds/workflow.py:690
-#: hypha/apply/funds/workflow.py:732 hypha/apply/funds/workflow.py:779
-#: hypha/apply/funds/workflow.py:805 hypha/apply/funds/workflow.py:846
-#: hypha/apply/funds/workflow.py:885
+#: hypha/apply/funds/views.py:1163 hypha/apply/funds/workflow.py:217
+#: hypha/apply/funds/workflow.py:245 hypha/apply/funds/workflow.py:288
+#: hypha/apply/funds/workflow.py:344 hypha/apply/funds/workflow.py:370
+#: hypha/apply/funds/workflow.py:408 hypha/apply/funds/workflow.py:446
+#: hypha/apply/funds/workflow.py:499 hypha/apply/funds/workflow.py:527
+#: hypha/apply/funds/workflow.py:587 hypha/apply/funds/workflow.py:625
+#: hypha/apply/funds/workflow.py:678 hypha/apply/funds/workflow.py:705
+#: hypha/apply/funds/workflow.py:747 hypha/apply/funds/workflow.py:794
+#: hypha/apply/funds/workflow.py:820 hypha/apply/funds/workflow.py:861
+#: hypha/apply/funds/workflow.py:900
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:25
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:150
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:221
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:220
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:241
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:260
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:210
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:220
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:235
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:259
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:283
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:298
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:308
 #: hypha/apply/projects/templates/application_projects/report_form.html:46
 #: hypha/apply/projects/templates/application_projects/report_form.html:66
 #: hypha/apply/projects/templates/application_projects/vendor_form.html:27
-#: hypha/apply/projects/views/project.py:1041
 #: hypha/apply/review/templates/review/review_edit_form.html:42
 #: hypha/apply/review/templates/review/review_form.html:43
+#: hypha/apply/users/templates/users/change_password.html:42
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:35
+#: hypha/apply/users/templates/users/register.html:25
 msgid "Submit"
 msgstr ""
 
@@ -831,12 +840,11 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:64
 #: hypha/apply/determinations/templates/determinations/determination_detail.html:25
 #: hypha/apply/funds/templates/funds/admin/widgets/read_only.html:2
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:95
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:39
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:107
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:40
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:74
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:78
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:106
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:60
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:98
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:126
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:4
 #: hypha/apply/projects/templates/application_projects/report_detail.html:59
 #: hypha/apply/projects/templates/application_projects/vendor_detail.html:23
@@ -845,7 +853,6 @@ msgid "Edit"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/include/listing_base.html:21
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:85
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:34
 msgid "Last edited"
 msgstr ""
@@ -854,9 +861,13 @@ msgstr ""
 msgid "updated"
 msgstr ""
 
+#: hypha/apply/activity/templates/activity/include/listing_base.html:53
+msgid "View "
+msgstr ""
+
 #: hypha/apply/activity/templates/activity/include/notifications_dropdown.html:6
 #: hypha/apply/activity/templates/activity/notifications.html:8
-#: hypha/templates/base-apply.html:119
+#: hypha/templates/base-apply.html:143
 msgid "Notifications"
 msgstr ""
 
@@ -870,19 +881,19 @@ msgid "made a comment"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/notifications.html:11
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:92
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:104
 #: hypha/apply/users/templates/wagtailusers/users/results.html:40
 msgid "Filter"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/notifications.html:18
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:44
-#: hypha/apply/projects/templates/application_projects/project_detail.html:86
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:49
+#: hypha/apply/projects/templates/application_projects/project_detail.html:78
 msgid "Communications"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/notifications.html:22
-#: hypha/apply/projects/templates/application_projects/project_detail.html:101
+#: hypha/apply/projects/templates/application_projects/project_detail.html:93
 msgid "Activity Feed"
 msgstr ""
 
@@ -921,34 +932,16 @@ msgid ""
 "inquiries, please email us at %(ORG_EMAIL)s"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/base.html:2
-#: hypha/apply/users/templates/users/activation/email.txt:2
-#: hypha/apply/users/templates/users/email_change/confirm_email.txt:2
-#, python-format
-msgid "Dear %(user)s,"
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/base.html:8
-#, python-format
-msgid ""
-"Kind Regards,\n"
-"The %(ORG_SHORT_NAME)s Team"
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:4
-#: hypha/apply/activity/templates/messages/email/ready_to_review.html:4
-msgid "Dear Reviewer,"
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:7
-msgid "New applications have been added to your review list."
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:7
+msgid "Project documents are ready to be assigned for approval."
 msgstr ""
 
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:9
 #: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:10
 #: hypha/apply/activity/templates/messages/email/contract_uploaded.html:15
 #: hypha/apply/activity/templates/messages/email/invoice_approved.html:9
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:16
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:9
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:17
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:10
 #: hypha/apply/activity/templates/messages/email/paf_for_approval.html:9
 #: hypha/apply/activity/templates/messages/email/partners_update_applicant.html:9
 #: hypha/apply/activity/templates/messages/email/partners_update_partner.html:9
@@ -964,10 +957,11 @@ msgstr ""
 msgid "Title"
 msgstr ""
 
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:10
 #: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:11
 #: hypha/apply/activity/templates/messages/email/contract_uploaded.html:16
 #: hypha/apply/activity/templates/messages/email/invoice_approved.html:10
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:10
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:11
 #: hypha/apply/activity/templates/messages/email/paf_for_approval.html:10
 #: hypha/apply/activity/templates/messages/email/partners_update_applicant.html:10
 #: hypha/apply/activity/templates/messages/email/partners_update_partner.html:10
@@ -985,6 +979,48 @@ msgstr ""
 msgid "Link"
 msgstr ""
 
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:11
+#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:11
+#: hypha/apply/activity/templates/messages/email/project_final_approval.html:11
+#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:12
+#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:11
+msgid "Original Submission"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:13
+#: hypha/apply/activity/templates/messages/email/invoice_approved.html:13
+#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:13
+#: hypha/apply/activity/templates/messages/email/project_final_approval.html:13
+#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:14
+#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:13
+#: hypha/apply/activity/templates/messages/email/submit_contract_documents.html:14
+#, python-format
+msgid "Please contact %(lead)s - %(email)s if you have any questions."
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/base.html:2
+#: hypha/apply/users/templates/users/activation/email.txt:2
+#: hypha/apply/users/templates/users/email_change/confirm_email.txt:2
+#, python-format
+msgid "Dear %(user)s,"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/base.html:8
+#, python-format
+msgid ""
+"Kind Regards,\n"
+"The %(ORG_SHORT_NAME)s Team"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:4
+#: hypha/apply/activity/templates/messages/email/ready_to_review.html:4
+msgid "Dear Reviewer,"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:7
+msgid "New applications have been added to your review list."
+msgstr ""
+
 #: hypha/apply/activity/templates/messages/email/comment.html:4
 #, python-format
 msgid "There has been a new comment on \"%(title)s\" by %(user)s."
@@ -1059,39 +1095,29 @@ msgstr ""
 msgid "Project"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_approved.html:13
-#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:13
-#: hypha/apply/activity/templates/messages/email/project_final_approval.html:13
-#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:14
-#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:13
-#: hypha/apply/activity/templates/messages/email/submit_contract_documents.html:14
-#, python-format
-msgid "Please contact %(lead)s - %(email)s if you have any questions."
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:5
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:6
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:6
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:7
 #, python-format
 msgid ""
 "An %(ORG_SHORT_NAME)s staff member has updated your invoice for %(title)s "
 "for period %(date_from)s to %(date_to)s."
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:7
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:7
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:8
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:8
 #, python-format
-msgid "It is now %(status)s."
+msgid "It is now %(invoice_status)s."
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:10
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:11
 msgid "The staff member left this comment"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:15
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:16
 msgid "Invoice Link"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:17
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:18
 msgid "Project Link"
 msgstr ""
 
@@ -1100,13 +1126,6 @@ msgstr ""
 msgid "A Project is awaiting your review."
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:11
-#: hypha/apply/activity/templates/messages/email/project_final_approval.html:11
-#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:12
-#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:11
-msgid "Original Submission"
-msgstr ""
-
 #: hypha/apply/activity/templates/messages/email/partners_update_applicant.html:5
 msgid "New partner(s) has been added to your submission."
 msgstr ""
@@ -1303,8 +1322,8 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/activity/templates/messages/email/vendor_setup_needed.html:11
-#: hypha/apply/funds/tables.py:545
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:139
+#: hypha/apply/funds/tables.py:571
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:135
 msgid "Submission"
 msgstr ""
 
@@ -1324,7 +1343,7 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:32
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:33
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:55
-#: hypha/apply/funds/tables.py:476
+#: hypha/apply/funds/tables.py:497
 msgid "Active"
 msgstr ""
 
@@ -1340,7 +1359,7 @@ msgstr ""
 msgid "No Screening"
 msgstr ""
 
-#: hypha/apply/api/v1/filters.py:43 hypha/apply/funds/tables.py:292
+#: hypha/apply/api/v1/filters.py:43 hypha/apply/funds/tables.py:307
 msgid "Category"
 msgstr ""
 
@@ -1365,7 +1384,7 @@ msgid "Multi select"
 msgstr ""
 
 #: hypha/apply/categories/blocks.py:30 hypha/apply/funds/blocks.py:30
-#: hypha/apply/funds/blocks.py:53 hypha/apply/funds/blocks.py:102
+#: hypha/apply/funds/blocks.py:61 hypha/apply/funds/blocks.py:110
 #: hypha/apply/stream_forms/blocks.py:36
 msgid "Label"
 msgstr ""
@@ -1375,7 +1394,7 @@ msgid "Leave blank to use the default Category label"
 msgstr ""
 
 #: hypha/apply/categories/blocks.py:35 hypha/apply/funds/blocks.py:31
-#: hypha/apply/funds/blocks.py:54 hypha/apply/funds/blocks.py:103
+#: hypha/apply/funds/blocks.py:62 hypha/apply/funds/blocks.py:111
 #: hypha/apply/stream_forms/blocks.py:37
 msgid "Help text"
 msgstr ""
@@ -1397,6 +1416,8 @@ msgid "Keep the name short, ideally one word."
 msgstr ""
 
 #: hypha/apply/categories/models.py:56
+#: hypha/apply/funds/templates/funds/includes/submission-list-item.html:25
+#: hypha/apply/funds/templates/funds/includes/submission-list-item.html:34
 msgid "Archived"
 msgstr ""
 
@@ -1445,7 +1466,7 @@ msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html:17
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:16
-#: hypha/apply/home/templates/apply_home/includes/apply_listing.html:29
+#: hypha/apply/home/templates/apply_home/includes/apply_listing.html:31
 #: hypha/templates/includes/apply_button.html:2
 msgid "Apply"
 msgstr ""
@@ -1461,15 +1482,11 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:48
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:37
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:55
-#: hypha/apply/funds/tables.py:71
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:84
+#: hypha/apply/funds/tables.py:90
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:96
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:33
 #: hypha/apply/funds/templates/funds/includes/revision_diff_table.html:4
-#: hypha/apply/projects/models/payment.py:31 hypha/apply/projects/tables.py:20
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:18
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:27
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:88
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:97
+#: hypha/apply/projects/models/payment.py:30 hypha/apply/projects/tables.py:20
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:47
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:58
 msgid "Submitted"
@@ -1479,11 +1496,11 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:48
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:37
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:55
-#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:9
+#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:10
 #: hypha/apply/determinations/templates/determinations/includes/determination_block.html:9
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:19
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:84
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:85
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:96
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:97
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:33
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:34
 #: hypha/apply/funds/templates/funds/tables/table.html:30
@@ -1518,7 +1535,7 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html:57
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:69
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:58
-#: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:75
+#: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:82
 msgid "Submission history"
 msgstr ""
 
@@ -1540,7 +1557,7 @@ msgid "No submissions"
 msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:36
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:103
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:110
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:35
 msgid "Your previous reviews"
 msgstr ""
@@ -1551,6 +1568,13 @@ msgstr ""
 msgid "Apply admin"
 msgstr ""
 
+#: hypha/apply/dashboard/templates/dashboard/contracting_dashboard.html:27
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:81
+#: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:89
+#: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:75
+msgid "PAF waiting for assignee"
+msgstr ""
+
 #: hypha/apply/dashboard/templates/dashboard/dashboard.html:15
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:12
 #: hypha/apply/users/templates/two_factor/_base.html:7
@@ -1572,16 +1596,16 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:23
 #: hypha/apply/funds/templates/funds/includes/status-block.html:9
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:55
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:183
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:33
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:103
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:169
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:34
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:105
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:66
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:57
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:62
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:87
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:115
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:129
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:181
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:77
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:82
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:107
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:135
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:149
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:200
 msgid "View"
 msgstr ""
 
@@ -1597,25 +1621,25 @@ msgstr ""
 msgid "Requests for invoices requiring your attention"
 msgstr ""
 
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:81
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:88
 msgid "Your projects"
 msgstr ""
 
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:87
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:109
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:94
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:116
 #: hypha/apply/dashboard/templates/dashboard/includes/flagged.html:12
 #: hypha/apply/dashboard/templates/dashboard/includes/submissions-waiting-for-review.html:13
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:41
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:28
-#: hypha/apply/funds/templates/funds/submissions_overview.html:43
-#: hypha/apply/funds/templates/funds/submissions_overview.html:53
+#: hypha/apply/funds/templates/funds/submissions_overview.html:54
+#: hypha/apply/funds/templates/funds/submissions_overview.html:64
 #: hypha/apply/projects/templates/application_projects/overview.html:34
 #: hypha/apply/projects/templates/application_projects/overview.html:48
 #: hypha/apply/projects/templates/application_projects/overview.html:63
 msgid "Show all"
 msgstr ""
 
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:96
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:103
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:34
 msgid "Active Invoices"
 msgstr ""
@@ -1666,7 +1690,7 @@ msgid "Awaiting your approval"
 msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html:6
-msgid "PAF waiting for approval"
+msgid "PAF waiting for internal approval"
 msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html:21
@@ -1731,7 +1755,7 @@ msgstr ""
 #: hypha/apply/determinations/blocks.py:77
 #: hypha/apply/determinations/blocks.py:78
 #: hypha/apply/determinations/blocks.py:79
-#: hypha/apply/determinations/blocks.py:80 hypha/apply/funds/blocks.py:194
+#: hypha/apply/determinations/blocks.py:80 hypha/apply/funds/blocks.py:202
 #: hypha/apply/review/blocks.py:160 hypha/apply/review/blocks.py:161
 #: hypha/apply/review/blocks.py:162 hypha/apply/review/blocks.py:163
 #: hypha/apply/review/blocks.py:164 hypha/apply/review/blocks.py:165
@@ -1760,7 +1784,7 @@ msgstr ""
 
 #: hypha/apply/determinations/forms.py:172
 #: hypha/apply/determinations/forms.py:253
-#: hypha/apply/determinations/forms.py:524
+#: hypha/apply/determinations/forms.py:529
 #: hypha/apply/determinations/models.py:108
 #: hypha/apply/determinations/templates/determinations/determination_detail.html:12
 #: hypha/apply/determinations/templates/determinations/determination_detail.html:20
@@ -1851,25 +1875,30 @@ msgid "Rationale and appropriateness questions and comments"
 msgstr ""
 
 #: hypha/apply/determinations/forms.py:360
-#: hypha/apply/determinations/views.py:357
+#: hypha/apply/determinations/views.py:360
 msgid "-- No proposal form selected -- "
 msgstr ""
 
-#: hypha/apply/determinations/forms.py:362
-#: hypha/apply/determinations/views.py:359
-msgid "Proposal Form"
+#: hypha/apply/determinations/forms.py:361
+#: hypha/apply/determinations/views.py:361
+msgid "Select the proposal form only for determination approval"
 msgstr ""
 
-#: hypha/apply/determinations/forms.py:364
-#: hypha/apply/determinations/views.py:361
+#: hypha/apply/determinations/forms.py:363
+#: hypha/apply/determinations/views.py:363
 msgid "Select the proposal form to use for proposal stage."
 msgstr ""
 
+#: hypha/apply/determinations/forms.py:365
+#: hypha/apply/determinations/views.py:365
+msgid "Proposal Form"
+msgstr ""
+
 #: hypha/apply/determinations/models.py:116
 #: hypha/apply/determinations/templates/determinations/includes/determination_block.html:7
-#: hypha/apply/funds/workflow.py:207 hypha/apply/funds/workflow.py:334
-#: hypha/apply/funds/workflow.py:489 hypha/apply/funds/workflow.py:668
-#: hypha/apply/projects/models/project.py:68 hypha/apply/review/models.py:164
+#: hypha/apply/funds/workflow.py:222 hypha/apply/funds/workflow.py:349
+#: hypha/apply/funds/workflow.py:504 hypha/apply/funds/workflow.py:683
+#: hypha/apply/projects/models/project.py:76 hypha/apply/review/models.py:164
 msgid "Draft"
 msgstr ""
 
@@ -1896,7 +1925,7 @@ msgid "Concept note"
 msgstr ""
 
 #: hypha/apply/determinations/models.py:244
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:51
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:71
 msgid "Proposal"
 msgstr ""
 
@@ -1908,10 +1937,10 @@ msgstr ""
 msgid "Proposal form"
 msgstr ""
 
-#: hypha/apply/determinations/options.py:10 hypha/apply/funds/workflow.py:317
-#: hypha/apply/funds/workflow.py:471 hypha/apply/funds/workflow.py:650
-#: hypha/apply/funds/workflow.py:771 hypha/apply/funds/workflow.py:925
-#: hypha/apply/funds/workflow.py:1159
+#: hypha/apply/determinations/options.py:10 hypha/apply/funds/workflow.py:332
+#: hypha/apply/funds/workflow.py:486 hypha/apply/funds/workflow.py:665
+#: hypha/apply/funds/workflow.py:786 hypha/apply/funds/workflow.py:940
+#: hypha/apply/funds/workflow.py:1174
 msgid "Dismissed"
 msgstr ""
 
@@ -1946,8 +1975,8 @@ msgstr ""
 #: hypha/apply/determinations/templates/determinations/determination_form.html:8
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:9
 #: hypha/apply/funds/templates/funds/revisions_compare.html:8
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:12
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:12
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:13
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:13
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:12
 #: hypha/apply/review/templates/review/review_detail.html:11
 #: hypha/apply/review/templates/review/review_edit_form.html:8
@@ -1959,7 +1988,7 @@ msgstr ""
 #: hypha/apply/determinations/templates/determinations/base_determination_form.html:48
 #: hypha/apply/funds/templates/funds/application_base.html:68
 #: hypha/apply/funds/templates/funds/applicationsubmission_form.html:36
-#: hypha/apply/funds/views.py:1199
+#: hypha/apply/funds/views.py:1164
 #: hypha/apply/projects/templates/application_projects/project_approval_form.html:67
 #: hypha/apply/review/templates/review/review_edit_form.html:40
 #: hypha/apply/review/templates/review/review_form.html:41
@@ -1979,7 +2008,7 @@ msgid "submission"
 msgstr ""
 
 #: hypha/apply/determinations/templates/determinations/batch_determination_form.html:20
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:117
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:116
 msgid "as"
 msgstr ""
 
@@ -2020,7 +2049,7 @@ msgstr ""
 msgid "Determinations"
 msgstr ""
 
-#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:12
+#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:13
 #: hypha/apply/determinations/templates/determinations/includes/determination_block.html:12
 msgid "Awaiting determination"
 msgstr ""
@@ -2072,7 +2101,7 @@ msgstr ""
 msgid "There is a draft determination you do not have permission to edit."
 msgstr ""
 
-#: hypha/apply/determinations/views.py:430
+#: hypha/apply/determinations/views.py:438
 #, python-brace-format
 msgid ""
 "A determination of \"{current}\" exists but you tried to progress as "
@@ -2108,7 +2137,7 @@ msgstr ""
 msgid "Labs"
 msgstr ""
 
-#: hypha/apply/funds/admin_helpers.py:86 hypha/apply/funds/tables.py:477
+#: hypha/apply/funds/admin_helpers.py:86 hypha/apply/funds/tables.py:498
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:13
 #: hypha/apply/funds/templates/funds/includes/round-block.html:13
 #: hypha/templates/includes/relatedcontent_card.html:8
@@ -2147,16 +2176,21 @@ msgstr ""
 msgid "Requested amount"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:53
+#: hypha/apply/funds/blocks.py:55
+#: hypha/apply/funds/templates/funds/includes/rendered_answers.html:35
+msgid "Organization name"
+msgstr ""
+
+#: hypha/apply/funds/blocks.py:61
 msgid "What email address should we use to contact you?"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:55
+#: hypha/apply/funds/blocks.py:63
 msgid ""
 "We will use this email address to communicate with you about your proposal."
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:71
+#: hypha/apply/funds/blocks.py:79
 #: hypha/apply/funds/templates/funds/includes/rendered_answers.html:29
 #: hypha/apply/funds/templates/funds/includes/revision_diff_table.html:17
 #: hypha/apply/projects/models/vendor.py:20
@@ -2165,97 +2199,95 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:102
+#: hypha/apply/funds/blocks.py:110
 msgid "What is your name?"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:104
+#: hypha/apply/funds/blocks.py:112
 msgid "We will use this name when we communicate with you about your proposal."
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:107 hypha/apply/users/models.py:180
+#: hypha/apply/funds/blocks.py:115 hypha/apply/users/models.py:183
 msgid "Full name"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:193 hypha/apply/stream_forms/blocks.py:466
+#: hypha/apply/funds/blocks.py:201 hypha/apply/stream_forms/blocks.py:466
 #: hypha/apply/stream_forms/blocks.py:467
 #: hypha/apply/stream_forms/blocks.py:482
 #: hypha/apply/stream_forms/blocks.py:483 hypha/apply/utils/blocks.py:84
 msgid "Custom"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:62 hypha/apply/funds/forms.py:81
+#: hypha/apply/funds/forms.py:61 hypha/apply/funds/forms.py:80
 msgid "Take action"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:144 hypha/apply/projects/forms/project.py:350
+#: hypha/apply/funds/forms.py:143 hypha/apply/projects/forms/project.py:395
 #, python-brace-format
 msgid "Update lead from {lead} to"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:181
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:30
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:32
+#: hypha/apply/funds/forms.py:180
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:35
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:37
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:20
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:59
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:28
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:61
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:40
 #: hypha/apply/funds/templates/funds/submission_sealed.html:14
 #: hypha/apply/funds/templates/funds/submissions_by_round.html:10
-#: hypha/apply/projects/filters.py:28 hypha/apply/projects/filters.py:42
+#: hypha/apply/projects/filters.py:33 hypha/apply/projects/filters.py:47
 #: hypha/apply/projects/tables.py:42
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:25
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:25
-#: hypha/apply/projects/templates/application_projects/project_detail.html:45
-#: hypha/apply/projects/templates/application_projects/project_detail.html:54
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:25
+#: hypha/apply/projects/templates/application_projects/project_detail.html:37
+#: hypha/apply/projects/templates/application_projects/project_detail.html:46
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:18
 msgid "Lead"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:251 hypha/apply/funds/forms.py:384
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:125
+#: hypha/apply/funds/forms.py:228 hypha/apply/funds/forms.py:350
 msgid "External Reviewers"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:329
+#: hypha/apply/funds/forms.py:295
 msgid "Can't unassign, just change, because review already submitted"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:334 hypha/apply/funds/forms.py:429
+#: hypha/apply/funds/forms.py:300 hypha/apply/funds/forms.py:393
 msgid "Users cannot be assigned to multiple roles."
 msgstr ""
 
-#: hypha/apply/funds/forms.py:416
-msgid "Only Lead can change the External Reviewers"
-msgstr ""
-
-#: hypha/apply/funds/forms.py:419
+#: hypha/apply/funds/forms.py:383
 msgid ""
-"External Reviewers cannot be selected because of the application workflow"
+"Make sure all submissions support external reviewers and you are lead for "
+"all the selected submissions."
 msgstr ""
 
-#: hypha/apply/funds/forms.py:478
-msgid "-- No reviewer selected --"
+#: hypha/apply/funds/forms.py:413
+msgid "---"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:480
+#: hypha/apply/funds/forms.py:415
 #, python-brace-format
 msgid "{role_name} Reviewer"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:495
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:58
+#: hypha/apply/funds/forms.py:430
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:60
 msgid "Partners"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:556
+#: hypha/apply/funds/forms.py:491
 msgid "Meta terms"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:559
+#: hypha/apply/funds/forms.py:494
 msgid "Meta terms are hierarchical in nature."
 msgstr ""
 
-#: hypha/apply/funds/models/__init__.py:36 hypha/apply/funds/tables.py:74
+#: hypha/apply/funds/models/__init__.py:36 hypha/apply/funds/tables.py:93
 #: hypha/apply/projects/tables.py:41 hypha/apply/projects/tables.py:66
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:26
 msgid "Fund"
 msgstr ""
 
@@ -2388,7 +2420,7 @@ msgstr ""
 msgid "Only one Yes and No screening decision can be set as default."
 msgstr ""
 
-#: hypha/apply/funds/models/submissions.py:486
+#: hypha/apply/funds/models/submissions.py:435
 msgid "submit time"
 msgstr ""
 
@@ -2416,100 +2448,100 @@ msgstr ""
 msgid "Confirmation email"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:72
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:23
-#: hypha/apply/projects/filters.py:27 hypha/apply/projects/filters.py:43
+#: hypha/apply/funds/tables.py:91
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:35
+#: hypha/apply/projects/filters.py:32 hypha/apply/projects/filters.py:48
 #: hypha/apply/projects/tables.py:65
 #: hypha/apply/projects/templates/application_projects/includes/invoices.html:20
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:29
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:90
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:99
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:20
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:19
-#: hypha/public/partner/tables.py:51 hypha/public/partner/tables.py:97
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:30
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:91
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:101
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:21
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:30
+#: hypha/public/partner/tables.py:54 hypha/public/partner/tables.py:100
 msgid "Status"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:73
+#: hypha/apply/funds/tables.py:92
 msgid "Type"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:75
+#: hypha/apply/funds/tables.py:94
 msgid "Comments"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:76
+#: hypha/apply/funds/tables.py:95
 #: hypha/apply/funds/templates/funds/tables/table.html:22
 #: hypha/apply/review/templates/review/review_detail.html:11
 msgid "Last updated"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:90
+#: hypha/apply/funds/tables.py:109
 msgid "No submissions available"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:136 hypha/apply/funds/tables.py:289
+#: hypha/apply/funds/tables.py:155 hypha/apply/funds/tables.py:304
 msgid "Screening"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:170
+#: hypha/apply/funds/tables.py:190
 msgid "Role"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:274
+#: hypha/apply/funds/tables.py:289
 msgid "Statuses"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:286 hypha/apply/funds/tables.py:380
-#: hypha/apply/funds/tables.py:474 hypha/apply/funds/tables.py:508
-#: hypha/apply/projects/filters.py:26 hypha/apply/projects/filters.py:41
+#: hypha/apply/funds/tables.py:301 hypha/apply/funds/tables.py:401
+#: hypha/apply/funds/tables.py:495 hypha/apply/funds/tables.py:529
+#: hypha/apply/projects/filters.py:31 hypha/apply/projects/filters.py:46
 #: hypha/public/home/models.py:124
 msgid "Funds"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:287 hypha/apply/funds/tables.py:379
-#: hypha/apply/funds/tables.py:513
+#: hypha/apply/funds/tables.py:302 hypha/apply/funds/tables.py:400
+#: hypha/apply/funds/tables.py:534
 #: hypha/apply/funds/templates/funds/rounds.html:5
 #: hypha/apply/funds/templates/funds/rounds.html:15
 msgid "Rounds"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:288 hypha/apply/funds/tables.py:475
+#: hypha/apply/funds/tables.py:303 hypha/apply/funds/tables.py:496
 msgid "Leads"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:289
+#: hypha/apply/funds/tables.py:304
 msgid "No Status"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:290 hypha/apply/funds/tables.py:503
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:57
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:33
+#: hypha/apply/funds/tables.py:305 hypha/apply/funds/tables.py:524
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:59
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:45
 msgid "Reviewers"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:295
+#: hypha/apply/funds/tables.py:310
 msgid "Terms"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:408
+#: hypha/apply/funds/tables.py:429
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:20
 msgid "Determined"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:528
+#: hypha/apply/funds/tables.py:549
 msgid "Reviewer"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:541 hypha/apply/funds/tables.py:556
+#: hypha/apply/funds/tables.py:562 hypha/apply/funds/tables.py:596
 msgid "No reviews available"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:560
+#: hypha/apply/funds/tables.py:600
 msgid "Staff"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:568
+#: hypha/apply/funds/tables.py:608
 msgid "No staff available"
 msgstr ""
 
@@ -2529,7 +2561,7 @@ msgstr ""
 msgid "Continue"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/application_base.html:19
+#: hypha/apply/funds/templates/funds/application_base.html:20
 msgid ""
 "There were some errors with your form. Please amend the fields highlighted "
 "below"
@@ -2580,11 +2612,23 @@ msgid ""
 "An e-mail with more information has been sent to the address you entered."
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/application_base_landing.html:18
+#: hypha/apply/funds/templates/funds/application_base_landing.html:19
 #, python-format
 msgid ""
-"If you do not receive an e-mail within 15 minutes please check your\n"
-"spam folder and contact %(email)s for further assistance."
+"If you do not receive an e-mail within 15 minutes please check your spam "
+"folder and contact %(email)s for further assistance."
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/application_base_landing.html:27
+msgid "Go to my dashboard."
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/application_base_landing.html:29
+#: hypha/apply/users/templates/users/login.html:43
+#: hypha/apply/users/templates/users/password_reset/complete.html:13
+#: hypha/apply/users/templates/users/password_reset/form.html:33
+#: hypha/apply/users/templates/users/register.html:29
+msgid "Log in"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:3
@@ -2593,7 +2637,7 @@ msgid "Revisions for %(title)s"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:8
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:64
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:66
 msgid "Revisions"
 msgstr ""
 
@@ -2609,12 +2653,12 @@ msgid "Compare"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html:10
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:2
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:3
 #: hypha/apply/funds/templates/funds/includes/generic_primary_actions.html:5
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:45
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:67
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:10
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:146
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:150
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:154
 msgid "Actions to take"
 msgstr ""
 
@@ -2624,7 +2668,7 @@ msgstr ""
 msgid "Reviews & assignees"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html:52
+#: hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html:59
 msgid "View all"
 msgstr ""
 
@@ -2653,67 +2697,76 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/create_project_form.html:8
 #: hypha/apply/funds/templates/funds/includes/unarchive_submission_form.html:5
 #: hypha/apply/funds/templates/funds/reminder_confirm_delete.html:18
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:232
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:31
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:230
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:32
 #: hypha/apply/review/templates/review/review_confirm_delete.html:18
 msgid "Confirm"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:8
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:10
 msgid "This submission is sealed"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:15
-msgid "This submission is archived."
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:22
+msgid "Back to submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:40
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:45
 msgid "Submission details"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:57
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:62
 msgid "Activity feed"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:61
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:66
 msgid "View message log"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:77
+msgid "This submission has been archived."
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:89
 msgid "Congratulations!"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:78
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:90
 #, python-format
 msgid "Your %(stage)s application has been accepted."
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:79
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:91
 #, python-format
 msgid "Start your %(stage)s application."
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:89
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:97
+#: hypha/apply/funds/templates/submissions/all.html:289
+msgid "Updated"
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:101
 #: hypha/apply/funds/templates/funds/includes/batch_delete_submission_form.html:14
 #: hypha/apply/funds/templates/funds/includes/delegated_form_base.html:33
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:38
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:47
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:67
-#: hypha/apply/projects/views/payment.py:224
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:50
+#: hypha/apply/funds/templates/submissions/all.html:446
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:48
+#: hypha/apply/projects/views/payment.py:238
 #: hypha/apply/review/templates/review/review_detail.html:34
 msgid "Delete"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:140
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:152
 msgid "Related submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:142
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:146
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:154
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:158
 msgid "View linked"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:151
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:163
 msgid "Past Submissions"
 msgstr ""
 
@@ -2729,16 +2782,16 @@ msgid "Editing"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:13
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:9
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:9
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:10
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:10
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:9
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:19
 #: hypha/apply/projects/templates/application_projects/project_approval_form.html:8
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:19
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:12
 #: hypha/apply/projects/templates/application_projects/report_detail.html:10
 #: hypha/apply/projects/templates/application_projects/report_form.html:14
 #: hypha/apply/projects/templates/application_projects/vendor_detail.html:10
-msgid "Back to project"
+msgid "View project page"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:26
@@ -2755,65 +2808,65 @@ msgstr ""
 msgid "List of Submissions summary"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:9
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:11
 #: hypha/apply/funds/templates/funds/includes/unarchive_submission_form.html:3
 msgid "Unarchive Submission"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:20
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:22
 #: hypha/apply/funds/templates/funds/includes/create_project_form.html:3
 msgid "Create Project"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:26
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:28
 #: hypha/apply/funds/templates/funds/includes/screening_form.html:4
 msgid "Screen application"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:30
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:32
 msgid "Complete draft determination"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:35
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:37
 #: hypha/apply/funds/templates/funds/includes/generic_primary_actions.html:8
 msgid "Complete draft review"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:39
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:41
 msgid "Assign reviewers"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:46
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:48
 #: hypha/apply/funds/templates/funds/includes/generic_primary_actions.html:15
 msgid "View determination"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:51
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:53
 #: hypha/apply/funds/templates/funds/includes/progress_form.html:4
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:173
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:169
 msgid "Update status"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:54
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:56
 msgid "Assign"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:63
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:65
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:16
 msgid "More actions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:66
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:68
 #: hypha/apply/funds/templates/funds/includes/meta_terms_block.html:3
 msgid "Meta Terms"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:68
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:70
 #: hypha/apply/funds/templates/funds/includes/create_reminder_form.html:3
 msgid "Create Reminder"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:70
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:74
 #: hypha/apply/funds/templates/funds/includes/archive_submission_form.html:3
 msgid "Archive Submission"
 msgstr ""
@@ -2837,7 +2890,8 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/batch_archive_submission_form.html:14
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:43
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:55
+#: hypha/apply/funds/templates/submissions/all.html:434
 msgid "Archive"
 msgstr ""
 
@@ -2856,13 +2910,13 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/batch_progress_form.html:3
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:59
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:66
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:41
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:277
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:60
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:67
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:60
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:316
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:28
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:167
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:171
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:175
 msgid "Update Status"
 msgstr ""
 
@@ -2873,8 +2927,9 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/update_meta_terms_form.html:4
 #: hypha/apply/funds/templates/funds/includes/update_partner_form.html:4
 #: hypha/apply/funds/templates/funds/includes/update_reviewer_form.html:4
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-reviewers.html:50
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:22
-#: hypha/apply/projects/templates/application_projects/project_detail.html:50
+#: hypha/apply/projects/templates/application_projects/project_detail.html:42
 msgid "Update"
 msgstr ""
 
@@ -2895,13 +2950,11 @@ msgid "A lead is required to create a project, select the lead below."
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/create_reminder_form.html:4
-#: hypha/apply/projects/templates/application_projects/invoice_form.html:4
-#: hypha/apply/projects/templates/application_projects/invoice_form.html:11
 msgid "Create"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/delegated_form_base.html:28
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:85
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:97
 #: hypha/apply/projects/templates/application_projects/includes/report_frequency_config.html:68
 msgid "Close"
 msgstr ""
@@ -2926,13 +2979,13 @@ msgid "You have no %(type)s rounds or labs assigned to you."
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/progress_form.html:5
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:65
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:66
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:27
 msgid "Current status"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/progress_form.html:6
-#: hypha/apply/funds/workflow.py:761
+#: hypha/apply/funds/workflow.py:776
 msgid "Progress"
 msgstr ""
 
@@ -2970,7 +3023,7 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/rendered_answers.html:24
 #: hypha/apply/funds/templates/funds/includes/revision_diff_table.html:11
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:53
-#: hypha/apply/projects/templates/application_projects/project_detail.html:122
+#: hypha/apply/projects/templates/application_projects/project_detail.html:114
 msgid "E-mail"
 msgstr ""
 
@@ -3018,6 +3071,10 @@ msgstr ""
 msgid "Screening options"
 msgstr ""
 
+#: hypha/apply/funds/templates/funds/includes/submission-list-item.html:23
+msgid "Archived Submission"
+msgstr ""
+
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:4
 msgid "Amounts"
 msgstr ""
@@ -3029,16 +3086,17 @@ msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:6
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:13
-#: hypha/apply/funds/workflow.py:302 hypha/apply/funds/workflow.py:456
-#: hypha/apply/funds/workflow.py:635 hypha/apply/funds/workflow.py:910
-#: hypha/apply/funds/workflow.py:1155
+#: hypha/apply/funds/workflow.py:317 hypha/apply/funds/workflow.py:471
+#: hypha/apply/funds/workflow.py:650 hypha/apply/funds/workflow.py:925
+#: hypha/apply/funds/workflow.py:1170
 msgid "Accepted"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:11
-#: hypha/apply/funds/templates/funds/submissions.html:5
+#: hypha/apply/funds/templates/funds/submissions.html:6
 #: hypha/apply/funds/templates/funds/submissions_overview.html:4
 #: hypha/apply/funds/templates/funds/submissions_overview.html:9
+#: hypha/apply/funds/templates/submissions/all.html:7
 msgid "Submissions"
 msgstr ""
 
@@ -3048,18 +3106,21 @@ msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:18
 #: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:5
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:19
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:25
 #: hypha/apply/funds/templates/funds/reviewer_leaderboard_detail.html:5
-#: hypha/apply/funds/templates/funds/staff_assignments.html:19
-#: hypha/apply/funds/templates/funds/submissions_overview.html:18
-#: hypha/apply/funds/templates/funds/submissions_result.html:17
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:110
+#: hypha/apply/funds/templates/funds/staff_assignments.html:22
+#: hypha/apply/funds/templates/funds/submissions_overview.html:28
+#: hypha/apply/funds/templates/funds/submissions_result.html:20
 #: hypha/apply/review/templates/review/review_list.html:4
 #: hypha/apply/review/templates/review/review_list.html:12
 msgid "Reviews"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:20
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:19
+#: hypha/apply/funds/templates/funds/staff_assignments.html:16
+#: hypha/apply/funds/templates/funds/submissions_overview.html:18
+#: hypha/apply/funds/templates/funds/submissions_result.html:14
 msgid "All"
 msgstr ""
 
@@ -3071,41 +3132,46 @@ msgstr ""
 msgid "Your avg. score"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:14
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:17
+#: hypha/apply/funds/templates/funds/submissions.html:17
+msgid "Try newer version"
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:26
 msgid "Selected"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:54
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:66
 msgid "Hide archived"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:56
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:68
 msgid "Show archived"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:60
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:63
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:72
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:75
 msgid "Filters"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:66
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:73
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:78
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:85
 msgid "Search"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:72
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:84
 msgid "submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:73
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:85
 msgid "Search input"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:83
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:95
 msgid "Clear"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:84
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:96
 msgid "Filter by"
 msgstr ""
 
@@ -3114,7 +3180,7 @@ msgid "Are you sure you want to Unarchive this submission."
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/update_lead_form.html:3
-#: hypha/apply/projects/templates/application_projects/project_detail.html:49
+#: hypha/apply/projects/templates/application_projects/project_detail.html:41
 msgid "Assign Lead"
 msgstr ""
 
@@ -3144,23 +3210,23 @@ msgstr ""
 msgid "Track and explore the reviews"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:16
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:22
 #: hypha/apply/funds/templates/funds/staff_assignments.html:5
 #: hypha/apply/funds/templates/funds/staff_assignments.html:10
-#: hypha/apply/funds/templates/funds/staff_assignments.html:16
-#: hypha/apply/funds/templates/funds/submissions_overview.html:15
-#: hypha/apply/funds/templates/funds/submissions_result.html:14
+#: hypha/apply/funds/templates/funds/staff_assignments.html:19
+#: hypha/apply/funds/templates/funds/submissions_overview.html:23
+#: hypha/apply/funds/templates/funds/submissions_result.html:17
 msgid "Staff assignments"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:22
-#: hypha/apply/funds/templates/funds/staff_assignments.html:22
-#: hypha/apply/funds/templates/funds/submissions_overview.html:21
-#: hypha/apply/funds/templates/funds/submissions_result.html:20
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:28
+#: hypha/apply/funds/templates/funds/staff_assignments.html:25
+#: hypha/apply/funds/templates/funds/submissions_overview.html:32
+#: hypha/apply/funds/templates/funds/submissions_result.html:23
 msgid "Results"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:30
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:36
 msgid "All reviewers"
 msgstr ""
 
@@ -3211,12 +3277,13 @@ msgstr ""
 msgid "View application"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions.html:9
-#: hypha/apply/funds/templates/funds/submissions_overview.html:38
+#: hypha/apply/funds/templates/funds/submissions.html:11
+#: hypha/apply/funds/templates/funds/submissions_overview.html:49
+#: hypha/apply/funds/templates/submissions/all.html:12
 msgid "All Submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions.html:10
+#: hypha/apply/funds/templates/funds/submissions.html:20
 msgid "Search and filter all submissions"
 msgstr ""
 
@@ -3228,7 +3295,7 @@ msgstr ""
 msgid "Track and explore recent submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_overview.html:49
+#: hypha/apply/funds/templates/funds/submissions_overview.html:60
 #: hypha/apply/funds/templates/funds/submissions_staff_flagged.html:6
 msgid "Staff Flagged Submissions"
 msgstr ""
@@ -3242,27 +3309,27 @@ msgstr ""
 msgid "Track and explore submission results"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:29
+#: hypha/apply/funds/templates/funds/submissions_result.html:32
 msgid "Summary"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:33
+#: hypha/apply/funds/templates/funds/submissions_result.html:36
 msgid "Filter submissions to calculate values"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:36
+#: hypha/apply/funds/templates/funds/submissions_result.html:39
 msgid "Number of submission"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:37
+#: hypha/apply/funds/templates/funds/submissions_result.html:40
 msgid "Average value"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:38
+#: hypha/apply/funds/templates/funds/submissions_result.html:41
 msgid "Total value"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:41
+#: hypha/apply/funds/templates/funds/submissions_result.html:44
 msgid "Some submissions lack values and are not included."
 msgstr ""
 
@@ -3320,268 +3387,425 @@ msgstr ""
 msgid "next"
 msgstr ""
 
-#: hypha/apply/funds/views.py:246 hypha/apply/funds/views.py:278
-#: hypha/apply/funds/views.py:299 hypha/apply/funds/views.py:320
-#: hypha/apply/projects/views/project.py:316
+#: hypha/apply/funds/templates/submissions/all.html:17
+msgid "View older version"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:40
+msgid "Your assigned submissions"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:52
+msgid "Your flagged submissions"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:64
+msgid "Awaiting your review"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:84
+msgid "Search Submissions"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:304
+msgid "All statuses"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:330
+#: hypha/apply/funds/templates/submissions/submenu/change-status.html:22
+msgid "No statuses found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:10
+#, python-format
+msgid ""
+"Are you sure you want to assign \"%(user_title)s\" as lead of the selected "
+"submissions?"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:11
+#, python-format
+msgid "Assign %(user_title)s as lead."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:19
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:23
+msgid "No lead found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/category.html:11
+msgid "All Categories"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/category.html:41
+msgid "No categories found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/category.html:45
+msgid "No categories found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/change-status.html:10
+#, python-format
+msgid ""
+"Are you sure you want to change the status of the selected submissions to "
+"\"%(value)s\"?"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/change-status.html:18
+msgid "No status found for currently selected submissions."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/funds.html:11
+msgid "All Funds &amp; Labs"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/funds.html:35
+msgid "No funds found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/funds.html:39
+msgid "No funds found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/leads.html:10
+msgid "All Leads"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/leads.html:32
+msgid "No leads found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/leads.html:36
+msgid "No leads found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/meta-terms.html:10
+msgid "All Meta Terms"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/meta-terms.html:42
+msgid "No meta terms found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/meta-terms.html:46
+msgid "No meta terms found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/reviewers.html:10
+msgid "All Reviewers"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/reviewers.html:41
+msgid "No reviewers found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/reviewers.html:45
+msgid "No reviewers found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/rounds.html:14
+msgid "All Rounds"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/rounds.html:86
+msgid "No rounds available"
+msgstr ""
+
+#: hypha/apply/funds/views.py:217 hypha/apply/funds/views.py:244
+#: hypha/apply/funds/views.py:263 hypha/apply/funds/views.py:282
+#: hypha/apply/projects/views/project.py:349
 msgid "Sorry something went wrong"
 msgstr ""
 
-#: hypha/apply/funds/views.py:363
+#: hypha/apply/funds/views.py:325
 msgid "Failed to update: "
 msgstr ""
 
-#: hypha/apply/funds/views.py:604 hypha/apply/funds/views.py:607
-#: hypha/apply/funds/views.py:640 hypha/apply/funds/views.py:643
+#: hypha/apply/funds/views.py:565 hypha/apply/funds/views.py:568
+#: hypha/apply/funds/views.py:601 hypha/apply/funds/views.py:604
 msgid "No Round or Lab found matching the query"
 msgstr ""
 
-#: hypha/apply/funds/views.py:667
+#: hypha/apply/funds/views.py:628
 msgid "No statuses match the requested value"
 msgstr ""
 
-#: hypha/apply/funds/views.py:741
+#: hypha/apply/funds/views.py:702
 msgid "Project Created!"
 msgstr ""
 
-#: hypha/apply/funds/views.py:1299
+#: hypha/apply/funds/views.py:1264
 msgid "Submission saved successfully"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:215 hypha/apply/funds/workflow.py:259
-#: hypha/apply/funds/workflow.py:342 hypha/apply/funds/workflow.py:380
-#: hypha/apply/funds/workflow.py:417 hypha/apply/funds/workflow.py:497
-#: hypha/apply/funds/workflow.py:559 hypha/apply/funds/workflow.py:596
-#: hypha/apply/funds/workflow.py:676 hypha/apply/funds/workflow.py:719
-#: hypha/apply/funds/workflow.py:792 hypha/apply/funds/workflow.py:833
-#: hypha/apply/funds/workflow.py:871
+#: hypha/apply/funds/views_beta.py:40
+msgid "No screening"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:200
+msgid "Newest"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:201
+msgid "Oldest"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:202
+msgid "Most Commented"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:203
+msgid "Least Commented"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:204
+msgid "Recently Updated"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:205
+msgid "Least Recently Updated"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:206
+msgid "Best Match"
+msgstr ""
+
+#: hypha/apply/funds/workflow.py:230 hypha/apply/funds/workflow.py:274
+#: hypha/apply/funds/workflow.py:357 hypha/apply/funds/workflow.py:395
+#: hypha/apply/funds/workflow.py:432 hypha/apply/funds/workflow.py:512
+#: hypha/apply/funds/workflow.py:574 hypha/apply/funds/workflow.py:611
+#: hypha/apply/funds/workflow.py:691 hypha/apply/funds/workflow.py:734
+#: hypha/apply/funds/workflow.py:807 hypha/apply/funds/workflow.py:848
+#: hypha/apply/funds/workflow.py:886
 msgid "Request More Information"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:216 hypha/apply/funds/workflow.py:343
-#: hypha/apply/funds/workflow.py:499 hypha/apply/funds/workflow.py:677
-#: hypha/apply/funds/workflow.py:793
+#: hypha/apply/funds/workflow.py:231 hypha/apply/funds/workflow.py:358
+#: hypha/apply/funds/workflow.py:514 hypha/apply/funds/workflow.py:692
+#: hypha/apply/funds/workflow.py:808
 msgid "Open Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:217 hypha/apply/funds/workflow.py:234
-#: hypha/apply/funds/workflow.py:260 hypha/apply/funds/workflow.py:277
-#: hypha/apply/funds/workflow.py:344 hypha/apply/funds/workflow.py:382
-#: hypha/apply/funds/workflow.py:418 hypha/apply/funds/workflow.py:501
-#: hypha/apply/funds/workflow.py:561 hypha/apply/funds/workflow.py:597
+#: hypha/apply/funds/workflow.py:232 hypha/apply/funds/workflow.py:249
+#: hypha/apply/funds/workflow.py:275 hypha/apply/funds/workflow.py:292
+#: hypha/apply/funds/workflow.py:359 hypha/apply/funds/workflow.py:397
+#: hypha/apply/funds/workflow.py:433 hypha/apply/funds/workflow.py:516
+#: hypha/apply/funds/workflow.py:576 hypha/apply/funds/workflow.py:612
 msgid "Ready For Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:218 hypha/apply/funds/workflow.py:235
-#: hypha/apply/funds/workflow.py:262 hypha/apply/funds/workflow.py:278
-#: hypha/apply/funds/workflow.py:291 hypha/apply/funds/workflow.py:420
-#: hypha/apply/funds/workflow.py:445 hypha/apply/funds/workflow.py:599
-#: hypha/apply/funds/workflow.py:624 hypha/apply/funds/workflow.py:874
-#: hypha/apply/funds/workflow.py:899
+#: hypha/apply/funds/workflow.py:233 hypha/apply/funds/workflow.py:250
+#: hypha/apply/funds/workflow.py:277 hypha/apply/funds/workflow.py:293
+#: hypha/apply/funds/workflow.py:306 hypha/apply/funds/workflow.py:435
+#: hypha/apply/funds/workflow.py:460 hypha/apply/funds/workflow.py:614
+#: hypha/apply/funds/workflow.py:639 hypha/apply/funds/workflow.py:889
+#: hypha/apply/funds/workflow.py:914
 msgid "Accept but additional info required"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:219 hypha/apply/funds/workflow.py:236
-#: hypha/apply/funds/workflow.py:263 hypha/apply/funds/workflow.py:279
-#: hypha/apply/funds/workflow.py:292 hypha/apply/funds/workflow.py:309
-#: hypha/apply/funds/workflow.py:421 hypha/apply/funds/workflow.py:446
-#: hypha/apply/funds/workflow.py:463 hypha/apply/funds/workflow.py:600
-#: hypha/apply/funds/workflow.py:625 hypha/apply/funds/workflow.py:642
-#: hypha/apply/funds/workflow.py:875 hypha/apply/funds/workflow.py:900
-#: hypha/apply/funds/workflow.py:917
+#: hypha/apply/funds/workflow.py:234 hypha/apply/funds/workflow.py:251
+#: hypha/apply/funds/workflow.py:278 hypha/apply/funds/workflow.py:294
+#: hypha/apply/funds/workflow.py:307 hypha/apply/funds/workflow.py:324
+#: hypha/apply/funds/workflow.py:436 hypha/apply/funds/workflow.py:461
+#: hypha/apply/funds/workflow.py:478 hypha/apply/funds/workflow.py:615
+#: hypha/apply/funds/workflow.py:640 hypha/apply/funds/workflow.py:657
+#: hypha/apply/funds/workflow.py:890 hypha/apply/funds/workflow.py:915
+#: hypha/apply/funds/workflow.py:932
 #: hypha/cookieconsent/templates/includes/banner.html:12
 msgid "Accept"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:220 hypha/apply/funds/workflow.py:237
-#: hypha/apply/funds/workflow.py:264 hypha/apply/funds/workflow.py:280
-#: hypha/apply/funds/workflow.py:293 hypha/apply/funds/workflow.py:345
-#: hypha/apply/funds/workflow.py:384 hypha/apply/funds/workflow.py:422
-#: hypha/apply/funds/workflow.py:447 hypha/apply/funds/workflow.py:502
-#: hypha/apply/funds/workflow.py:524 hypha/apply/funds/workflow.py:537
-#: hypha/apply/funds/workflow.py:548 hypha/apply/funds/workflow.py:563
-#: hypha/apply/funds/workflow.py:601 hypha/apply/funds/workflow.py:626
-#: hypha/apply/funds/workflow.py:680 hypha/apply/funds/workflow.py:694
-#: hypha/apply/funds/workflow.py:723 hypha/apply/funds/workflow.py:748
-#: hypha/apply/funds/workflow.py:782 hypha/apply/funds/workflow.py:796
-#: hypha/apply/funds/workflow.py:811 hypha/apply/funds/workflow.py:837
-#: hypha/apply/funds/workflow.py:876 hypha/apply/funds/workflow.py:901
+#: hypha/apply/funds/workflow.py:235 hypha/apply/funds/workflow.py:252
+#: hypha/apply/funds/workflow.py:279 hypha/apply/funds/workflow.py:295
+#: hypha/apply/funds/workflow.py:308 hypha/apply/funds/workflow.py:360
+#: hypha/apply/funds/workflow.py:399 hypha/apply/funds/workflow.py:437
+#: hypha/apply/funds/workflow.py:462 hypha/apply/funds/workflow.py:517
+#: hypha/apply/funds/workflow.py:539 hypha/apply/funds/workflow.py:552
+#: hypha/apply/funds/workflow.py:563 hypha/apply/funds/workflow.py:578
+#: hypha/apply/funds/workflow.py:616 hypha/apply/funds/workflow.py:641
+#: hypha/apply/funds/workflow.py:695 hypha/apply/funds/workflow.py:709
+#: hypha/apply/funds/workflow.py:738 hypha/apply/funds/workflow.py:763
+#: hypha/apply/funds/workflow.py:797 hypha/apply/funds/workflow.py:811
+#: hypha/apply/funds/workflow.py:826 hypha/apply/funds/workflow.py:852
+#: hypha/apply/funds/workflow.py:891 hypha/apply/funds/workflow.py:916
 msgid "Dismiss"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:222 hypha/apply/funds/workflow.py:347
-#: hypha/apply/funds/workflow.py:504 hypha/apply/funds/workflow.py:682
+#: hypha/apply/funds/workflow.py:237 hypha/apply/funds/workflow.py:362
+#: hypha/apply/funds/workflow.py:519 hypha/apply/funds/workflow.py:697
 msgid "Need screening"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:223 hypha/apply/funds/workflow.py:348
-#: hypha/apply/funds/workflow.py:505
+#: hypha/apply/funds/workflow.py:238 hypha/apply/funds/workflow.py:363
+#: hypha/apply/funds/workflow.py:520
 msgid "Application Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:239 hypha/apply/funds/workflow.py:282
-#: hypha/apply/funds/workflow.py:360 hypha/apply/funds/workflow.py:398
-#: hypha/apply/funds/workflow.py:436 hypha/apply/funds/workflow.py:517
-#: hypha/apply/funds/workflow.py:577 hypha/apply/funds/workflow.py:615
-#: hypha/apply/funds/workflow.py:698 hypha/apply/funds/workflow.py:738
-#: hypha/apply/funds/workflow.py:813 hypha/apply/funds/workflow.py:852
-#: hypha/apply/funds/workflow.py:890
+#: hypha/apply/funds/workflow.py:254 hypha/apply/funds/workflow.py:297
+#: hypha/apply/funds/workflow.py:375 hypha/apply/funds/workflow.py:413
+#: hypha/apply/funds/workflow.py:451 hypha/apply/funds/workflow.py:532
+#: hypha/apply/funds/workflow.py:592 hypha/apply/funds/workflow.py:630
+#: hypha/apply/funds/workflow.py:713 hypha/apply/funds/workflow.py:753
+#: hypha/apply/funds/workflow.py:828 hypha/apply/funds/workflow.py:867
+#: hypha/apply/funds/workflow.py:905
 msgid "More information required"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:247 hypha/apply/funds/workflow.py:368
-#: hypha/apply/funds/workflow.py:406 hypha/apply/funds/workflow.py:535
-#: hypha/apply/funds/workflow.py:546 hypha/apply/funds/workflow.py:585
-#: hypha/apply/funds/workflow.py:706 hypha/apply/funds/workflow.py:821
-#: hypha/apply/funds/workflow.py:860
+#: hypha/apply/funds/workflow.py:262 hypha/apply/funds/workflow.py:383
+#: hypha/apply/funds/workflow.py:421 hypha/apply/funds/workflow.py:550
+#: hypha/apply/funds/workflow.py:561 hypha/apply/funds/workflow.py:600
+#: hypha/apply/funds/workflow.py:721 hypha/apply/funds/workflow.py:836
+#: hypha/apply/funds/workflow.py:875
 msgid "Close Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:248 hypha/apply/funds/workflow.py:369
-#: hypha/apply/funds/workflow.py:523 hypha/apply/funds/workflow.py:536
-#: hypha/apply/funds/workflow.py:707
+#: hypha/apply/funds/workflow.py:263 hypha/apply/funds/workflow.py:384
+#: hypha/apply/funds/workflow.py:538 hypha/apply/funds/workflow.py:551
+#: hypha/apply/funds/workflow.py:722
 msgid "Need screening (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:250 hypha/apply/funds/workflow.py:371
-#: hypha/apply/funds/workflow.py:539 hypha/apply/funds/workflow.py:710
-#: hypha/apply/funds/workflow.py:824 hypha/apply/funds/workflow.py:1131
+#: hypha/apply/funds/workflow.py:265 hypha/apply/funds/workflow.py:386
+#: hypha/apply/funds/workflow.py:554 hypha/apply/funds/workflow.py:725
+#: hypha/apply/funds/workflow.py:839 hypha/apply/funds/workflow.py:1146
 msgid "Internal Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:251 hypha/apply/funds/workflow.py:372
-#: hypha/apply/funds/workflow.py:540 hypha/apply/funds/workflow.py:551
-#: hypha/apply/funds/workflow.py:711 hypha/apply/funds/workflow.py:825
+#: hypha/apply/funds/workflow.py:266 hypha/apply/funds/workflow.py:387
+#: hypha/apply/funds/workflow.py:555 hypha/apply/funds/workflow.py:566
+#: hypha/apply/funds/workflow.py:726 hypha/apply/funds/workflow.py:840
 #, python-brace-format
 msgid "{org_short_name} Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:261 hypha/apply/funds/workflow.py:721
+#: hypha/apply/funds/workflow.py:276 hypha/apply/funds/workflow.py:736
 msgid "Open Review (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:266 hypha/apply/funds/workflow.py:386
-#: hypha/apply/funds/workflow.py:424 hypha/apply/funds/workflow.py:565
-#: hypha/apply/funds/workflow.py:603 hypha/apply/funds/workflow.py:725
-#: hypha/apply/funds/workflow.py:839 hypha/apply/funds/workflow.py:878
+#: hypha/apply/funds/workflow.py:281 hypha/apply/funds/workflow.py:401
+#: hypha/apply/funds/workflow.py:439 hypha/apply/funds/workflow.py:580
+#: hypha/apply/funds/workflow.py:618 hypha/apply/funds/workflow.py:740
+#: hypha/apply/funds/workflow.py:854 hypha/apply/funds/workflow.py:893
 msgid "Ready For Discussion"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:290 hypha/apply/funds/workflow.py:310
-#: hypha/apply/funds/workflow.py:407 hypha/apply/funds/workflow.py:444
-#: hypha/apply/funds/workflow.py:464 hypha/apply/funds/workflow.py:586
-#: hypha/apply/funds/workflow.py:623 hypha/apply/funds/workflow.py:643
-#: hypha/apply/funds/workflow.py:746 hypha/apply/funds/workflow.py:861
-#: hypha/apply/funds/workflow.py:898 hypha/apply/funds/workflow.py:918
+#: hypha/apply/funds/workflow.py:305 hypha/apply/funds/workflow.py:325
+#: hypha/apply/funds/workflow.py:422 hypha/apply/funds/workflow.py:459
+#: hypha/apply/funds/workflow.py:479 hypha/apply/funds/workflow.py:601
+#: hypha/apply/funds/workflow.py:638 hypha/apply/funds/workflow.py:658
+#: hypha/apply/funds/workflow.py:761 hypha/apply/funds/workflow.py:876
+#: hypha/apply/funds/workflow.py:913 hypha/apply/funds/workflow.py:933
 msgid "Ready For Discussion (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:295 hypha/apply/funds/workflow.py:449
-#: hypha/apply/funds/workflow.py:628 hypha/apply/funds/workflow.py:1151
+#: hypha/apply/funds/workflow.py:310 hypha/apply/funds/workflow.py:464
+#: hypha/apply/funds/workflow.py:643 hypha/apply/funds/workflow.py:1166
 msgid "Ready for Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:303 hypha/apply/funds/workflow.py:457
-#: hypha/apply/funds/workflow.py:636
+#: hypha/apply/funds/workflow.py:318 hypha/apply/funds/workflow.py:472
+#: hypha/apply/funds/workflow.py:651
 msgid "Application Outcome"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:312 hypha/apply/funds/workflow.py:466
-#: hypha/apply/funds/workflow.py:645 hypha/apply/funds/workflow.py:920
+#: hypha/apply/funds/workflow.py:327 hypha/apply/funds/workflow.py:481
+#: hypha/apply/funds/workflow.py:660 hypha/apply/funds/workflow.py:935
 msgid "Accepted but additional info required"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:381 hypha/apply/funds/workflow.py:560
-#: hypha/apply/funds/workflow.py:780 hypha/apply/funds/workflow.py:794
-#: hypha/apply/funds/workflow.py:809 hypha/apply/funds/workflow.py:834
-#: hypha/apply/funds/workflow.py:850
+#: hypha/apply/funds/workflow.py:396 hypha/apply/funds/workflow.py:575
+#: hypha/apply/funds/workflow.py:795 hypha/apply/funds/workflow.py:809
+#: hypha/apply/funds/workflow.py:824 hypha/apply/funds/workflow.py:849
+#: hypha/apply/funds/workflow.py:865
 msgid "Open External Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:383 hypha/apply/funds/workflow.py:547
-#: hypha/apply/funds/workflow.py:562 hypha/apply/funds/workflow.py:836
+#: hypha/apply/funds/workflow.py:398 hypha/apply/funds/workflow.py:562
+#: hypha/apply/funds/workflow.py:577 hypha/apply/funds/workflow.py:851
 msgid "Open Internal Review (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:409 hypha/apply/funds/workflow.py:588
-#: hypha/apply/funds/workflow.py:863 hypha/apply/funds/workflow.py:1147
+#: hypha/apply/funds/workflow.py:424 hypha/apply/funds/workflow.py:603
+#: hypha/apply/funds/workflow.py:878 hypha/apply/funds/workflow.py:1162
 msgid "External Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:419 hypha/apply/funds/workflow.py:598
-#: hypha/apply/funds/workflow.py:873
+#: hypha/apply/funds/workflow.py:434 hypha/apply/funds/workflow.py:613
+#: hypha/apply/funds/workflow.py:888
 msgid "Open External Review (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:500 hypha/apply/funds/workflow.py:534
+#: hypha/apply/funds/workflow.py:515 hypha/apply/funds/workflow.py:549
 msgid "Open Community Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:550
+#: hypha/apply/funds/workflow.py:565
 msgid "Community Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:678 hypha/apply/funds/workflow.py:696
-#: hypha/apply/funds/workflow.py:720
+#: hypha/apply/funds/workflow.py:693 hypha/apply/funds/workflow.py:711
+#: hypha/apply/funds/workflow.py:735
 msgid "Ready For Preliminary Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:679 hypha/apply/funds/workflow.py:695
-#: hypha/apply/funds/workflow.py:708 hypha/apply/funds/workflow.py:722
-#: hypha/apply/funds/workflow.py:736 hypha/apply/funds/workflow.py:747
+#: hypha/apply/funds/workflow.py:694 hypha/apply/funds/workflow.py:710
+#: hypha/apply/funds/workflow.py:723 hypha/apply/funds/workflow.py:737
+#: hypha/apply/funds/workflow.py:751 hypha/apply/funds/workflow.py:762
 msgid "Invite to Proposal"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:683
+#: hypha/apply/funds/workflow.py:698
 msgid "Concept Note Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:750
+#: hypha/apply/funds/workflow.py:765
 msgid "Ready for Preliminary Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:757
+#: hypha/apply/funds/workflow.py:772
 msgid "Concept Accepted"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:758
+#: hypha/apply/funds/workflow.py:773
 msgid "Preliminary Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:781 hypha/apply/funds/workflow.py:795
-#: hypha/apply/funds/workflow.py:810 hypha/apply/funds/workflow.py:835
-#: hypha/apply/funds/workflow.py:872
+#: hypha/apply/funds/workflow.py:796 hypha/apply/funds/workflow.py:810
+#: hypha/apply/funds/workflow.py:825 hypha/apply/funds/workflow.py:850
+#: hypha/apply/funds/workflow.py:887
 msgid "Ready For Final Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:784 hypha/apply/funds/workflow.py:1143
+#: hypha/apply/funds/workflow.py:799 hypha/apply/funds/workflow.py:1158
 msgid "Invited for Proposal"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:798
+#: hypha/apply/funds/workflow.py:813
 msgid "Proposal Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:822
+#: hypha/apply/funds/workflow.py:837
 msgid "Proposal Received (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:903
+#: hypha/apply/funds/workflow.py:918
 msgid "Ready for Final Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:911
+#: hypha/apply/funds/workflow.py:926
 msgid "Final Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:1127
+#: hypha/apply/funds/workflow.py:1142
 msgid "Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:1135
+#: hypha/apply/funds/workflow.py:1150
 msgid "Ready for Discussion"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:1139
+#: hypha/apply/funds/workflow.py:1154
 msgid "More Information Requested"
 msgstr ""
 
@@ -3591,63 +3815,63 @@ msgid ""
 "usages and try again!."
 msgstr ""
 
-#: hypha/apply/projects/filters.py:83
+#: hypha/apply/projects/filters.py:88
 msgid "Reporting Period"
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:91
+#: hypha/apply/projects/forms/payment.py:89
 msgid "The invoice must be a PDF."
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:95
+#: hypha/apply/projects/forms/payment.py:93
 msgid ""
 "Files that are related to the invoice. They could be xls, microsoft office "
 "documents, open office documents, pdfs, txt files."
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:114
+#: hypha/apply/projects/forms/payment.py:112
 msgid "Invoice File"
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:165
+#: hypha/apply/projects/forms/payment.py:163
 msgid "File not found on submission"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:47
+#: hypha/apply/projects/forms/project.py:58
 msgid "Something changed before your approval please re-review"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:51
+#: hypha/apply/projects/forms/project.py:62
 msgid "The contract you were trying to approve has already been approved"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:54
+#: hypha/apply/projects/forms/project.py:65
 msgid "You can only approve a signed contract"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:69
+#: hypha/apply/projects/forms/project.py:80
 msgid "Select Project Lead"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:87
+#: hypha/apply/projects/forms/project.py:98
 msgid "Project lead is a required field"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:275
+#: hypha/apply/projects/forms/project.py:279
 msgid "A Project can only be sent for Approval when Drafted."
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:292
-#: hypha/apply/projects/forms/project.py:304
+#: hypha/apply/projects/forms/project.py:337
+#: hypha/apply/projects/forms/project.py:349
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:49
 msgid "Contract"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:312
+#: hypha/apply/projects/forms/project.py:357
 msgid "Document"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:327
+#: hypha/apply/projects/forms/project.py:372
 msgid "Contract Document"
 msgstr ""
 
@@ -3681,128 +3905,137 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:32
+#: hypha/apply/projects/models/payment.py:31
 msgid "Resubmitted"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:33
+#: hypha/apply/projects/models/payment.py:32
 msgid "Changes Requested by Staff"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:34
+#: hypha/apply/projects/models/payment.py:33
 msgid "Changes Requested by Finance 1"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:35
+#: hypha/apply/projects/models/payment.py:34
 msgid "Changes Requested by Finance 2"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:36
+#: hypha/apply/projects/models/payment.py:35
 msgid "Approved by Staff"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:37
+#: hypha/apply/projects/models/payment.py:36
 msgid "Approved by Finance 1"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:38
+#: hypha/apply/projects/models/payment.py:37
 msgid "Approved by Finance 2"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:39
+#: hypha/apply/projects/models/payment.py:38 hypha/apply/projects/utils.py:122
 msgid "Paid"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:40
-msgid "Converted"
-msgstr ""
-
-#: hypha/apply/projects/models/payment.py:41
+#: hypha/apply/projects/models/payment.py:39 hypha/apply/projects/utils.py:120
 msgid "Declined"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:123
+#: hypha/apply/projects/models/payment.py:121
 msgid "Quantity Selected on an Invoice"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:150
+#: hypha/apply/projects/models/payment.py:148
 msgid "Message"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:162
+#: hypha/apply/projects/models/payment.py:150
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:19
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:29
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:90
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:100
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:20
+msgid "Invoice number"
+msgstr ""
+
+#: hypha/apply/projects/models/payment.py:156
+msgid "Invoice amount"
+msgstr ""
+
+#: hypha/apply/projects/models/payment.py:168
 #, python-brace-format
 msgid "Invoice requested for {project}"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:69
-msgid "Waiting for Approval"
+#: hypha/apply/projects/models/project.py:77
+msgid "Internal approval"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:70
+#: hypha/apply/projects/models/project.py:78
 msgid "Contracting"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:71
-msgid "In Progress"
+#: hypha/apply/projects/models/project.py:79
+msgid "Invoicing and reporting"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:72
+#: hypha/apply/projects/models/project.py:80
 msgid "Closing"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:73
+#: hypha/apply/projects/models/project.py:81
 msgid "Complete"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:161
+#: hypha/apply/projects/models/project.py:169
 msgid "Proposed Start Date"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:162
+#: hypha/apply/projects/models/project.py:170
 msgid "Proposed End Date"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:291
+#: hypha/apply/projects/models/project.py:299
 msgid "Proposed End Date must be after Proposed Start Date"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:459
+#: hypha/apply/projects/models/project.py:467
 msgid "user groups"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:461
+#: hypha/apply/projects/models/project.py:469
 msgid "Only selected group's users will be listed for this PAFReviewerRole"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:492
-#: hypha/apply/projects/models/project.py:494
+#: hypha/apply/projects/models/project.py:500
+#: hypha/apply/projects/models/project.py:502
 msgid "PAF Reviewers Roles"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:513
+#: hypha/apply/projects/models/project.py:521
 #, python-brace-format
 msgid "Approval of {project} by {user}"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:546
+#: hypha/apply/projects/models/project.py:554
 msgid "Counter Signed"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:546
+#: hypha/apply/projects/models/project.py:554
 msgid "Unsigned"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:549
+#: hypha/apply/projects/models/project.py:557
 #, python-brace-format
 msgid "Contract for {project} ({state})"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:564
+#: hypha/apply/projects/models/project.py:572
 #, python-brace-format
 msgid "Project file: {title}"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:594
+#: hypha/apply/projects/models/project.py:605
 #, python-brace-format
 msgid "Contract file: {title}"
 msgstr ""
@@ -3827,7 +4060,7 @@ msgstr ""
 msgid "Months"
 msgstr ""
 
-#: hypha/apply/projects/models/report.py:195 hypha/public/partner/tables.py:21
+#: hypha/apply/projects/models/report.py:195 hypha/public/partner/tables.py:22
 msgid "Years"
 msgstr ""
 
@@ -3881,12 +4114,7 @@ msgid "Every {occurrence} weeks on {weekday}"
 msgstr ""
 
 #: hypha/apply/projects/tables.py:13
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:19
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:28
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:89
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:98
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:25
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:24
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:26
 msgid "Invoice Number"
 msgstr ""
 
@@ -3895,7 +4123,6 @@ msgid "Project Name"
 msgstr ""
 
 #: hypha/apply/projects/tables.py:67
-#: hypha/apply/projects/templates/application_projects/includes/reports.html:8
 msgid "Reporting"
 msgstr ""
 
@@ -3912,7 +4139,7 @@ msgid "to"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:6
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:138
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:126
 msgid "Contracting documents"
 msgstr ""
 
@@ -3938,72 +4165,94 @@ msgstr ""
 msgid "Approve contract documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:77
-msgid "Need corrections/amendments to contract?"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:66
+msgid "Corrections/amendments?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:92
-msgid "Signed contract by Contracting team "
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:81
+msgid "Pending signed contract by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:120
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:216
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:81
+msgid "Signed contract by "
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:81
+msgid "Contracting team "
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:89
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:108
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:160
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:205
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:190
 #: hypha/apply/templates/forms/includes/field.html:8
 msgid "Upload"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:102
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:122
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:91
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:110
 msgid "Reupload"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:112
-msgid "Countersigned contract by Applicant/Contractor "
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "Pending countersigned contract by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:145
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:149
-msgid "Upload new"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "Countersigned contract by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:148
-msgid "Upload contracting documents"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "you "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:160
-msgid "Every project should have the following documents"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "Vendor "
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:140
+msgid "Pending "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:196
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:148
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:177
+msgid "View template"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:182
 #: hypha/apply/projects/templates/application_projects/includes/deliverables_block.html:35
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:195
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:214
 msgid "Remove"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:215
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:204
 msgid "Upload Countersigned Contract"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:218
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:207
 msgid "Upload Signed Contract"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:219
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:208
 msgid "The signed contract will be sent to Applicant once you submit."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:229
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:218
+msgid "Upload contracting documents"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:227
 msgid "Approve Contract"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:230
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:228
 msgid ""
 "You confirm that the uploaded contract is acceptable for commencing the "
 "project."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:231
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:229
 msgid "This cannot be undone."
 msgstr ""
 
@@ -4047,16 +4296,23 @@ msgstr ""
 msgid "Add Invoice"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:64
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:18
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:28
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:89
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:99
+msgid "Date submitted"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:65
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:26
 msgid "Update Invoice status"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:74
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:75
 msgid "No active Invoices."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:82
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:83
 msgid "Show rejected"
 msgstr ""
 
@@ -4106,8 +4362,9 @@ msgstr ""
 #: hypha/apply/projects/templates/application_projects/project_form.html:34
 #: hypha/apply/projects/templates/application_projects/report_form.html:45
 #: hypha/apply/projects/templates/application_projects/report_form.html:56
-#: hypha/apply/projects/views/payment.py:169
-#: hypha/apply/projects/views/payment.py:222
+#: hypha/apply/projects/views/payment.py:183
+#: hypha/apply/projects/views/payment.py:236
+#: hypha/apply/projects/views/project.py:1201
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:69
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:97
 msgid "Save"
@@ -4155,6 +4412,12 @@ msgid ""
 "any time."
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/includes/reports.html:8
+#: hypha/apply/projects/templates/application_projects/overview.html:57
+#: hypha/apply/projects/templates/application_projects/report_list.html:6
+msgid "Reports"
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:14
 msgid "Report frequency"
 msgstr ""
@@ -4193,126 +4456,141 @@ msgstr ""
 msgid "Project documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:20
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:21
 msgid "Resubmit for approval"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:22
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:23
 msgid "Submit for approval"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:32
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:258
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:35
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:281
 msgid "View/Update Approvers"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:71
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:42
+msgid "Change approver"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:51
+msgid "Assign approver"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:91
 #: hypha/apply/projects/views/vendor.py:250
 msgid "Contracting Information"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:80
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:108
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:100
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:128
 msgid "Fill in"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:99
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:119
 msgid "Approval Form"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:124
-msgid "Scope Of Work (SOW)"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:144
+msgid "Scope of work (SOW)"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:143
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:163
 msgid "Supporting documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:158
-msgid "Every project should include the following documents"
-msgstr ""
-
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:211
-msgid "Select a document"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:233
+msgid "Upload supporting documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:213
-msgid "Copy"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:242
+msgid "Submit for Approval"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:218
-msgid "Upload supporting documents"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
+msgid ""
+"Are you sure you're ready to submit the project documents to be approved in"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:227
-msgid "Submit for Approval"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:246
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:258
+msgid "sequential order?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:230
-msgid "Are you sure you're ready to submit?"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:246
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:258
+msgid "parallel order?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:232
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:248
 msgid "This project is missing the following documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:239
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:255
 msgid "Submit anyway"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:244
-msgid "Please select approvers for PAF in "
-msgstr ""
-
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:244
-msgid "sequential order"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:257
+msgid "Are you ready to submit the project documents to be approved in"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:244
-msgid "parallel order"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:263
+msgid ""
+"By default all the members are notified when an approver is not selected. "
+"Optionally, you may select specific approvers to assign and notify them."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
-msgid "(please note that in "
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:269
+msgid "Please note that in "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
-msgid "sequential order, approvers will approve PAF one after the other)"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:269
+msgid "sequential order, approvers will approve PAF one after the other."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
-msgid "parallel order, approvers can approve PAF anytime)"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:269
+msgid "parallel order, approvers can approve PAF anytime."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:249
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:266
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:272
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:289
 msgid "No PAF Reviewer Roles created yet, please create these in "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:250
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:267
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:273
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:290
 msgid " project settings"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:262
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:285
 msgid "Are you sure you want to update the approvers?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:262
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:285
 msgid "The uppermost active approver will be notified via email."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:262
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:285
 msgid "All approvers will be notified via email."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:275
-msgid "Update PAF Status"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:296
+msgid "Change Approver"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:276
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:174
-msgid "Project's current status"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:297
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:307
+msgid ""
+"Selected approver will be notified. On unselecting, every listed member here "
+"will be notified."
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:306
+msgid "Assign Approver"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:315
+msgid "Update PAF Status"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:22
@@ -4321,36 +4599,54 @@ msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:4
 #: hypha/apply/projects/templates/application_projects/invoice_detail.html:4
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:11
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:29
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:12
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:51
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:4
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:11
 msgid "Invoice"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:11
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:12
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:90
 msgid "Delete Invoice"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:23
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:22
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:24
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:23
 msgid "Vendor"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:30
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:31
 msgid "Are you sure you want to delete this invoice for"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:34
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:137
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:41
+msgid "View status history"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:43
+msgid "Hide status history"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:56
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:133
 msgid "Supporting Documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:51
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:73
 msgid ""
 "Only editable when 'Submitted' or you have been requested to make changes"
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:82
+msgid "Edit Invoice"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/invoice_form.html:4
+#: hypha/apply/projects/templates/application_projects/invoice_form.html:11
+msgid "Add"
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/invoice_list.html:11
 msgid "All Invoices"
 msgstr ""
@@ -4382,18 +4678,13 @@ msgstr ""
 msgid "Project Invoices"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/overview.html:57
-#: hypha/apply/projects/templates/application_projects/report_list.html:6
-msgid "Reports"
-msgstr ""
-
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:18
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:21
 msgid "Update Project Status"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:34
-#: hypha/apply/projects/templates/application_projects/project_detail.html:114
+#: hypha/apply/projects/templates/application_projects/project_detail.html:106
 msgid "Project Information"
 msgstr ""
 
@@ -4425,42 +4716,54 @@ msgstr ""
 msgid "Approvals"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:105
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:101
+msgid " - Pending"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:106
 #: hypha/apply/review/templates/review/review_detail.html:10
 msgid "Review"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:107
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:108
 msgid "Submission lead"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:111
-msgid "Staff Reviewers"
+msgid "Staff reviewers"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:123
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:133
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:121
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:129
 msgid "No reviews"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:157
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:123
+msgid "Advisory council"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:153
 msgid "Edit PAF"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:161
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:157
 msgid "Download Approval Form"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:165
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:35
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:161
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:28
 msgid "Download as PDF"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:167
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:37
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:163
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:30
 msgid "Download as DOCX"
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:170
+msgid "Project's current status"
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/project_approval_form.html:79
 msgid "Approval form not configured. Please add an approval form in the"
 msgstr ""
@@ -4474,32 +4777,40 @@ msgstr ""
 msgid " This project is in %(status)s state. "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:82
+#: hypha/apply/projects/templates/application_projects/project_detail.html:74
 msgid "Details"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:117
+#: hypha/apply/projects/templates/application_projects/project_detail.html:109
 msgid "Contractor"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:159
-#: hypha/apply/projects/templates/application_projects/project_detail.html:164
+#: hypha/apply/projects/templates/application_projects/project_detail.html:151
+#: hypha/apply/projects/templates/application_projects/project_detail.html:156
 msgid "Next Step"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:179
-#: hypha/apply/projects/templates/application_projects/project_detail.html:185
+#: hypha/apply/projects/templates/application_projects/project_detail.html:171
+#: hypha/apply/projects/templates/application_projects/project_detail.html:177
 msgid "PAF Approvals"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/project_detail.html:188
-msgid "Approved by "
+msgid "Requested changes by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:190
+#: hypha/apply/projects/templates/application_projects/project_detail.html:196
 msgid "Pending approval from "
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/project_detail.html:196
+msgid " (nobody assigned yet)"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/project_detail.html:199
+msgid "Approved by "
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/project_list.html:11
 msgid "All Projects"
 msgstr ""
@@ -4512,11 +4823,11 @@ msgstr ""
 msgid "No Projects Available."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:31
-msgid "Download"
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:24
+msgid "Download SOW"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:45
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:38
 msgid "Project scope of work(SOW)"
 msgstr ""
 
@@ -4651,84 +4962,204 @@ msgstr ""
 msgid "Visit Project Detail Page"
 msgstr ""
 
-#: hypha/apply/projects/views/payment.py:63
-#: hypha/apply/projects/views/payment.py:254
+#: hypha/apply/projects/templatetags/project_tags.py:33
+msgid "Fill in the Approval Form(PAF)"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:35
+msgid "Resubmit project documents for approval"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:36
+msgid "Submit project documents for approval"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:38
+#: hypha/apply/projects/templatetags/project_tags.py:46
 #, python-brace-format
-msgid "<p>Invoice status updated to: {status}.</p>"
+msgid ""
+"Awaiting project documents to be created and approved by {org_short_name} "
+"internally. Please check back when the project has moved to contracting "
+"stage."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:42
+msgid "Changes requested. Awaiting documents to be resubmitted."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:43
+msgid "Awaiting approval form to be created."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:56
+#: hypha/apply/projects/templatetags/project_tags.py:75
+#, python-brace-format
+msgid "Awaiting approval. Assigned to {approver}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:59
+#: hypha/apply/projects/templatetags/project_tags.py:77
+#, python-brace-format
+msgid "Awaiting {reviewer_role} to assign an approver"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:68
+msgid "Awaiting PAF approval form to be approved"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:72
+msgid "Awaiting approval from other approvers teams"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:80
+msgid "Awaiting project approval from assigned approvers"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:84
+#, python-brace-format
+msgid "Awaiting signed contract from {org_short_name}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:86
+msgid "Awaiting signed contract from Contracting team"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:91
+msgid "Awaiting contract documents to be submitted by you."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:92
+msgid "Awaiting countersigned contract from Vendor"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:95
+msgid "Awaiting contract documents submission by you"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:96
+msgid "Awaiting contract documents submission from Vendor"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:99
+msgid "Review the contract for all relevant details and approve."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:101
+#, python-brace-format
+msgid "Awaiting contract approval from {org_short_name}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:103
+msgid "Awaiting contract approval from Staff"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:106
+msgid "Add invoices"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:108
+msgid "Review invoice and take action"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:120
+#, python-brace-format
+msgid "Please download the signed contract uploaded by {org_short_name}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:122
+msgid "Countersign"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:123
+msgid "Upload it back"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:124
+msgid "Please also make sure to upload other required contracting documents"
 msgstr ""
 
-#: hypha/apply/projects/views/payment.py:181
-msgid "<p>Invoice created.</p>"
+#: hypha/apply/projects/utils.py:113
+msgid "Pending Approval"
 msgstr ""
 
-#: hypha/apply/projects/views/payment.py:204
-msgid "Invoice has been uploaded"
+#: hypha/apply/projects/utils.py:118
+msgid "Request for change or more information"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:125
+#: hypha/apply/projects/views/payment.py:63
+#: hypha/apply/projects/views/payment.py:268
+#, python-brace-format
+msgid "<p>Invoice status updated to: {status}.</p>"
+msgstr ""
+
+#: hypha/apply/projects/views/payment.py:195
+msgid "<p>Invoice added.</p>"
+msgstr ""
+
+#: hypha/apply/projects/views/project.py:157
 msgid "PAF has been submitted for approval"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:148
+#: hypha/apply/projects/views/project.py:180
 msgid "Document has been uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:168
+#: hypha/apply/projects/views/project.py:200
 msgid "Document has been removed"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:192
+#: hypha/apply/projects/views/project.py:224
 msgid "Contracting document has been removed"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:263
+#: hypha/apply/projects/views/project.py:296
 msgid "Lead has been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:347
+#: hypha/apply/projects/views/project.py:380
 msgid ""
 "Contractor documents have been approved. You can receive invoices from "
-"applicant now."
+"vendor now."
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:385
+#: hypha/apply/projects/views/project.py:418
 msgid "Countersigned contract uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:388
+#: hypha/apply/projects/views/project.py:421
 msgid "Signed contract uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:433
+#: hypha/apply/projects/views/project.py:466
 msgid "Contract documents submitted"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:455
+#: hypha/apply/projects/views/project.py:493
 msgid "Contracting document has been uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:480
+#: hypha/apply/projects/views/project.py:533
 #, python-brace-format
 msgid "<p>{role} has updated PAF status to {paf_status}.</p>"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:502
+#: hypha/apply/projects/views/project.py:560
 msgid "PAF status has been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:518
+#: hypha/apply/projects/views/project.py:584
 msgid "PAF has been approved"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:590
+#: hypha/apply/projects/views/project.py:656
 msgid "Project status has been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:637
+#: hypha/apply/projects/views/project.py:770
 msgid "PAF approvers have been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:1046
+#: hypha/apply/projects/views/project.py:1206
 msgid "You are not allowed to edit the project at this time"
 msgstr ""
 
@@ -4848,15 +5279,15 @@ msgstr ""
 msgid "You have already posted a review for this submission"
 msgstr ""
 
-#: hypha/apply/review/views.py:86
+#: hypha/apply/review/views.py:66
 msgid "Edit Review"
 msgstr ""
 
-#: hypha/apply/review/views.py:156
+#: hypha/apply/review/views.py:136
 msgid "Update Review draft"
 msgstr ""
 
-#: hypha/apply/review/views.py:156
+#: hypha/apply/review/views.py:136
 msgid "Create Review"
 msgstr ""
 
@@ -4995,64 +5426,90 @@ msgstr ""
 msgid "Search users"
 msgstr ""
 
-#: hypha/apply/users/forms.py:43
+#: hypha/apply/users/forms.py:41
 msgid "A user with that email already exists."
 msgstr ""
 
-#: hypha/apply/users/forms.py:44
+#: hypha/apply/users/forms.py:42
 msgid "The two password fields didn't match."
 msgstr ""
 
-#: hypha/apply/users/forms.py:62
+#: hypha/apply/users/forms.py:73
 msgid ""
 "You are registered using OAuth, please contact an admin if you need to "
 "change your email address."
 msgstr ""
 
-#: hypha/apply/users/forms.py:80
+#: hypha/apply/users/forms.py:91
 msgid "Only includes active, non-superusers"
 msgstr ""
 
-#: hypha/apply/users/forms.py:89
-#: hypha/apply/users/templates/users/account.html:34
+#: hypha/apply/users/forms.py:100
+#: hypha/apply/users/templates/users/account.html:35
 #: hypha/apply/users/templates/users/activation/email.txt:13
 msgid "Password"
 msgstr ""
 
-#: hypha/apply/users/forms.py:90
+#: hypha/apply/users/forms.py:101
 msgid "Email change requires you to put password."
 msgstr ""
 
-#: hypha/apply/users/forms.py:103 hypha/apply/users/forms.py:132
+#: hypha/apply/users/forms.py:114 hypha/apply/users/forms.py:143
 msgid "Incorrect password. Please try again."
 msgstr ""
 
-#: hypha/apply/users/forms.py:119
+#: hypha/apply/users/forms.py:130
 msgid "Please type your password to confirm"
 msgstr ""
 
-#: hypha/apply/users/models.py:179
+#: hypha/apply/users/models.py:182
 msgid "email address"
 msgstr ""
 
-#: hypha/apply/users/models.py:182
+#: hypha/apply/users/models.py:185
 msgid "Slack name"
 msgstr ""
 
-#: hypha/apply/users/models.py:184
+#: hypha/apply/users/models.py:187
 msgid "This is the name we should \"@mention\" when sending notifications"
 msgstr ""
 
+#: hypha/apply/users/models.py:304
+msgid "Show consent checkbox?"
+msgstr ""
+
+#: hypha/apply/users/models.py:308
+msgid "Login extra text"
+msgstr ""
+
+#: hypha/apply/users/models.py:309
+msgid "Displayed along side login form"
+msgstr ""
+
+#: hypha/apply/users/models.py:312
+msgid "Extra text to be displayed on register form"
+msgstr ""
+
+#: hypha/apply/users/models.py:322
+msgid "User consent on login & register forms"
+msgstr ""
+
+#: hypha/apply/users/models.py:328
+msgid "Login form customizations"
+msgstr ""
+
+#: hypha/apply/users/models.py:334
+msgid "Register form customizations"
+msgstr ""
+
 #: hypha/apply/users/templates/two_factor/_base.html:9
 #: hypha/apply/users/templates/two_factor/_base_focus.html:9
-#: hypha/apply/users/templates/users/account.html:11
+#: hypha/apply/users/templates/users/account.html:12
 msgid "Go to my dashboard"
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/_wizard_actions.html:4
-#: hypha/apply/users/templates/users/login.html:5
-#: hypha/apply/users/templates/users/login.html:6
-#: hypha/apply/users/templates/users/login.html:37
+#: hypha/apply/users/templates/users/login.html:4
 #: hypha/public/utils/templates/utils/includes/login_button.html:7
 msgid "Login"
 msgstr ""
@@ -5082,9 +5539,8 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/admin/disable.html:23
-#: hypha/apply/users/templates/users/account.html:41
+#: hypha/apply/users/templates/users/account.html:42
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:76
-#: hypha/apply/users/templates/wagtailusers/users/edit.html:78
 msgid "Disable 2FA"
 msgstr ""
 
@@ -5158,16 +5614,16 @@ msgstr ""
 
 #: hypha/apply/users/templates/two_factor/core/backup_tokens_password.html:26
 #: hypha/apply/users/templates/two_factor/profile/disable.html:22
-#: hypha/apply/users/templates/users/change_password.html:20
+#: hypha/apply/users/templates/users/change_password.html:28
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:21
-#: hypha/apply/users/templates/users/password_reset/confirm.html:20
+#: hypha/apply/users/templates/users/password_reset/confirm.html:27
 msgid "<li>Please correct the error below.</li>"
 msgid_plural "<li>Please correct the errors below.</li>"
 msgstr[0] ""
 msgstr[1] ""
 
 #: hypha/apply/users/templates/two_factor/core/setup.html:9
-#: hypha/apply/users/templates/users/account.html:37
+#: hypha/apply/users/templates/users/account.html:38
 msgid "Two-Factor Authentication (2FA)"
 msgstr ""
 
@@ -5222,12 +5678,12 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/core/setup.html:37
-#: hypha/apply/users/templates/users/login.html:12
+#: hypha/apply/users/templates/users/login.html:14
 msgid "We are calling your phone right now, please enter the digits you hear."
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/core/setup.html:40
-#: hypha/apply/users/templates/users/login.html:15
+#: hypha/apply/users/templates/users/login.html:17
 msgid "We sent you a text message, please enter the tokens we sent."
 msgstr ""
 
@@ -5301,6 +5757,7 @@ msgstr ""
 
 #: hypha/apply/users/templates/two_factor/profile/disable.html:6
 #: hypha/apply/users/templates/two_factor/profile/profile.html:6
+#: hypha/apply/users/templates/users/change_password.html:11
 msgid "Back to account"
 msgstr ""
 
@@ -5393,32 +5850,33 @@ msgstr ""
 msgid "Account"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:19
+#: hypha/apply/users/templates/users/account.html:20
 msgid "Profile"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:25
+#: hypha/apply/users/templates/users/account.html:26
 msgid "Update Profile"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:33
+#: hypha/apply/users/templates/users/account.html:34
 msgid "Account Security"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:35
+#: hypha/apply/users/templates/users/account.html:36
+#: hypha/apply/users/templates/users/change_password.html:3
 msgid "Update password"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:40
+#: hypha/apply/users/templates/users/account.html:41
 msgid "Backup codes"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:44
+#: hypha/apply/users/templates/users/account.html:45
 msgid "Enable 2FA"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:52
-#: hypha/apply/users/templates/users/account.html:59
+#: hypha/apply/users/templates/users/account.html:53
+#: hypha/apply/users/templates/users/account.html:60
 msgid "Become"
 msgstr ""
 
@@ -5495,18 +5953,8 @@ msgid ""
 "fails please contact %(ORG_SHORT_NAME)s at"
 msgstr ""
 
-#: hypha/apply/users/templates/users/change_password.html:4
-#: hypha/apply/users/templates/users/change_password.html:5
-msgid "Set a password"
-msgstr ""
-
-#: hypha/apply/users/templates/users/change_password.html:34
-#: hypha/apply/users/templates/users/password_reset/complete.html:4
-#: hypha/apply/users/templates/users/password_reset/confirm.html:34
-#: hypha/apply/users/templates/users/password_reset/done.html:5
-#: hypha/apply/users/templates/users/password_reset/form.html:5
-#: hypha/apply/users/templates/users/password_reset/form.html:6
-msgid "Reset password"
+#: hypha/apply/users/templates/users/change_password.html:8
+msgid "Change Password"
 msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/confirm_email.txt:4
@@ -5526,17 +5974,16 @@ msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:4
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:5
-#: hypha/apply/users/views.py:159
+#: hypha/apply/users/views.py:174
 msgid "Enter Password"
 msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/done.html:4
-#: hypha/apply/users/templates/users/password_reset/done.html:4
 msgid "Check your email"
 msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/done.html:5
-#: hypha/apply/users/views.py:205
+#: hypha/apply/users/views.py:220
 msgid "Verify Email"
 msgstr ""
 
@@ -5569,45 +6016,49 @@ msgid ""
 "%(ORG_SHORT_NAME)s at"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:18
+#: hypha/apply/users/templates/users/login.html:21
 msgid ""
 "Please enter the 6-digit verification code generated by your Authenticator "
 "App."
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:21
+#: hypha/apply/users/templates/users/login.html:24
 msgid ""
 "Please enter one of the backup codes to login to your account. Those codes "
 "were generated for you during 2FA setup to print or keep safe in a password "
 "manager."
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:33
+#: hypha/apply/users/templates/users/login.html:54
+#, python-format
+msgid "Log in with your %(ORG_SHORT_NAME)s email"
+msgstr ""
+
+#: hypha/apply/users/templates/users/login.html:60
+msgid "Create account"
+msgstr ""
+
+#: hypha/apply/users/templates/users/login.html:62
 msgid "Forgot your password?"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:45
+#: hypha/apply/users/templates/users/login.html:71
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:55
+#: hypha/apply/users/templates/users/login.html:86
 msgid "As a last resort, you can use a backup codes:"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:57
+#: hypha/apply/users/templates/users/login.html:88
 msgid "Use Backup Code"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:69
-#, python-format
-msgid "Log in with your %(ORG_SHORT_NAME)s email"
-msgstr ""
-
-#: hypha/apply/users/templates/users/login.html:76
+#: hypha/apply/users/templates/users/login.html:101
 msgid "Verification Code"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:80
+#: hypha/apply/users/templates/users/login.html:105
 msgid "Backup Code"
 msgstr ""
 
@@ -5623,28 +6074,48 @@ msgstr ""
 msgid "Available providers"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/complete.html:5
-msgid "Password change successful"
+#: hypha/apply/users/templates/users/password_reset/complete.html:3
+#: hypha/apply/users/templates/users/password_reset/form.html:4
+msgid "Reset password"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/complete.html:10
-msgid "Log in"
+#: hypha/apply/users/templates/users/password_reset/complete.html:8
+msgid "Password change successful"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/confirm.html:8
+#: hypha/apply/users/templates/users/password_reset/confirm.html:12
 msgid ""
 "Please enter your new password twice so we can verify you typed it in "
 "correctly."
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/confirm.html:37
+#: hypha/apply/users/templates/users/password_reset/confirm.html:39
+msgid "Reset"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/confirm.html:42
 msgid ""
 "The password reset link was invalid, possibly because it has already been "
 "used.  Please request a new password reset."
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/done.html:9
-msgid "A link to reset your password has been emailed to you."
+#: hypha/apply/users/templates/users/password_reset/done.html:4
+msgid "Password Reset"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/done.html:12
+msgid "Check your inbox for a password reset email!"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/done.html:15
+msgid ""
+"We have sent an email to you with a password recovery link, open the link in "
+"the email to change your password."
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/done.html:18
+#: hypha/apply/users/templates/users/register-success.html:30
+msgid "Check your \"Spam\" folder, if you don't find the email in your inbox."
 msgstr ""
 
 #: hypha/apply/users/templates/users/password_reset/email.txt:2
@@ -5655,22 +6126,48 @@ msgstr ""
 msgid "Your username (in case you've forgotten):"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/form.html:21
+#: hypha/apply/users/templates/users/password_reset/form.html:22
+msgid "Forgot password?"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/form.html:23
 msgid ""
-"Forgot or want to change your password? Please enter your user account's "
-"email address and we will send you a password reset link."
+"Please enter your user account's email address and we will send you a "
+"password reset link."
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/form.html:26
-msgid "Send password reset email"
+#: hypha/apply/users/templates/users/password_reset/form.html:28
+msgid "Send reset email"
 msgstr ""
 
-#: hypha/apply/users/templates/users/register.html:5
-#: hypha/apply/users/templates/users/register.html:6
-#: hypha/apply/users/templates/users/register.html:22
+#: hypha/apply/users/templates/users/register-success.html:4
+#: hypha/apply/users/templates/users/register.html:4
+#: hypha/public/utils/templates/utils/includes/register_button.html:3
 msgid "Register"
 msgstr ""
 
+#: hypha/apply/users/templates/users/register-success.html:18
+msgid "Hi "
+msgstr ""
+
+#: hypha/apply/users/templates/users/register-success.html:20
+msgid "your account"
+msgstr ""
+
+#: hypha/apply/users/templates/users/register-success.html:23
+msgid "with the email"
+msgstr ""
+
+#: hypha/apply/users/templates/users/register-success.html:26
+msgid ""
+"has been successfully created! We have sent you an account activatation "
+"email."
+msgstr ""
+
+#: hypha/apply/users/templates/users/register.html:29
+msgid "Already have an account?"
+msgstr ""
+
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:23
 msgid "Roles"
 msgstr ""
@@ -5684,6 +6181,10 @@ msgstr ""
 msgid "This account do not have 2FA enabled."
 msgstr ""
 
+#: hypha/apply/users/templates/wagtailusers/users/edit.html:78
+msgid "2FA already disabled"
+msgstr ""
+
 #: hypha/apply/users/templates/wagtailusers/users/results.html:7
 #, python-format
 msgid "There is %(counter)s match"
@@ -5722,15 +6223,15 @@ msgstr ""
 msgid "Email is already in use."
 msgstr ""
 
-#: hypha/apply/users/views.py:190
+#: hypha/apply/users/views.py:205
 msgid "Password Page timed out. Try changing the email again."
 msgstr ""
 
-#: hypha/apply/users/views.py:211
+#: hypha/apply/users/views.py:226
 msgid "Hijack feature is not enabled."
 msgstr ""
 
-#: hypha/apply/users/views.py:243
+#: hypha/apply/users/views.py:258
 #, python-brace-format
 msgid "Your email has been successfully updated to {email}!"
 msgstr ""
@@ -5751,7 +6252,7 @@ msgstr ""
 msgid "Page size of downloadable Project and Submission PDFs"
 msgstr ""
 
-#: hypha/apply/utils/views.py:260
+#: hypha/apply/utils/views.py:265
 #, python-brace-format
 msgid "Page '{0}' can't be deleted because is in use in '{1}'."
 msgstr ""
@@ -5861,7 +6362,7 @@ msgstr ""
 msgid "The title of the newsletter signup form."
 msgstr ""
 
-#: hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html:17
+#: hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html:16
 msgid "Sign up"
 msgstr ""
 
@@ -5930,48 +6431,48 @@ msgid ""
 "name."
 msgstr ""
 
-#: hypha/public/partner/models.py:49
+#: hypha/public/partner/models.py:50
 msgid "Partner Page"
 msgstr ""
 
-#: hypha/public/partner/models.py:120
+#: hypha/public/partner/models.py:121
 msgid "Investment Category Settings"
 msgstr ""
 
-#: hypha/public/partner/models.py:124
+#: hypha/public/partner/models.py:125
 msgid "Select the categories that should be used in investments."
 msgstr ""
 
-#: hypha/public/partner/models.py:198
+#: hypha/public/partner/models.py:199
 msgid "Use format: <YYYY>"
 msgstr ""
 
-#: hypha/public/partner/models.py:204 hypha/public/partner/tables.py:47
+#: hypha/public/partner/models.py:205 hypha/public/partner/tables.py:48
 #, python-brace-format
 msgid "Amount Committed ({currency})"
 msgstr ""
 
-#: hypha/public/partner/tables.py:55
+#: hypha/public/partner/tables.py:58
 msgid "Items per page"
 msgstr ""
 
-#: hypha/public/partner/tables.py:56
+#: hypha/public/partner/tables.py:59
 msgid "Per page"
 msgstr ""
 
-#: hypha/public/partner/tables.py:95
+#: hypha/public/partner/tables.py:98
 msgid "Partner"
 msgstr ""
 
-#: hypha/public/partner/tables.py:96
+#: hypha/public/partner/tables.py:99
 msgid "Year"
 msgstr ""
 
-#: hypha/public/partner/tables.py:98
+#: hypha/public/partner/tables.py:101
 msgid "Amount Committed"
 msgstr ""
 
-#: hypha/public/partner/tables.py:111
+#: hypha/public/partner/tables.py:114
 msgid "No investments available"
 msgstr ""
 
@@ -6015,65 +6516,65 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: hypha/public/utils/models.py:125
+#: hypha/public/utils/models.py:129
 msgid ""
 "Choose the image you wish to be displayed when this page appears in listings"
 msgstr ""
 
-#: hypha/public/utils/models.py:127
+#: hypha/public/utils/models.py:131
 msgid "Override the page title used when this page appears in listings"
 msgstr ""
 
-#: hypha/public/utils/models.py:128
+#: hypha/public/utils/models.py:132
 msgid ""
 "The text summary used when this page appears in listings. It's also used as "
 "the description for search engines if the 'Search description' field above "
 "is not defined."
 msgstr ""
 
-#: hypha/public/utils/models.py:206
+#: hypha/public/utils/models.py:210
 msgid "Your Twitter username without the @, e.g. katyperry"
 msgstr ""
 
-#: hypha/public/utils/models.py:211
+#: hypha/public/utils/models.py:215
 msgid "Your Facebook app ID."
 msgstr ""
 
-#: hypha/public/utils/models.py:216
+#: hypha/public/utils/models.py:220
 msgid "Default sharing text to use if social text has not been set on a page."
 msgstr ""
 
-#: hypha/public/utils/models.py:222
+#: hypha/public/utils/models.py:226
 msgid "Site name, used by Open Graph."
 msgstr ""
 
-#: hypha/public/utils/models.py:240
+#: hypha/public/utils/models.py:244
 msgid "Default site logo"
 msgstr ""
 
-#: hypha/public/utils/models.py:249
+#: hypha/public/utils/models.py:253
 msgid "Mobil site logo (if not set default will be used)"
 msgstr ""
 
-#: hypha/public/utils/models.py:255
+#: hypha/public/utils/models.py:259
 msgid ""
 "Link for the site logo, e.g. \"https://www.example.org/\". If not set, "
 "defaults to page with slug set to \"home\"."
 msgstr ""
 
-#: hypha/public/utils/models.py:261
+#: hypha/public/utils/models.py:265
 msgid "This will be added to the footer, html tags is allowed."
 msgstr ""
 
-#: hypha/public/utils/models.py:321
+#: hypha/public/utils/models.py:325
 msgid "In months"
 msgstr ""
 
-#: hypha/public/utils/models.py:347
+#: hypha/public/utils/models.py:351
 msgid "Funding"
 msgstr ""
 
-#: hypha/templates/base-apply.html:111 hypha/templates/base-apply.html:135
+#: hypha/templates/base-apply.html:134 hypha/templates/base-apply.html:160
 msgid "Log out"
 msgstr ""
 
diff --git a/hypha/locale/en/LC_MESSAGES/django.po b/hypha/locale/en/LC_MESSAGES/django.po
index 3834aeb1450389e5395f7e2ea3b2e2612627cdbe..ece54ec6d0df6dbc16c3e67d8f53e201131b4d9a 100644
--- a/hypha/locale/en/LC_MESSAGES/django.po
+++ b/hypha/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-13 09:19+0000\n"
+"POT-Creation-Date: 2023-08-11 09:49+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,508 +18,510 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: hypha/apply/activity/adapters/activity_feed.py:20
+#: hypha/apply/activity/adapters/activity_feed.py:21
 #, python-brace-format
 msgid "Submitted {source.title} for {source.page.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:21
 #: hypha/apply/activity/adapters/activity_feed.py:22
+#: hypha/apply/activity/adapters/activity_feed.py:23
 msgid "Edited"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:23
-#: hypha/apply/activity/adapters/activity_feed.py:37
+#: hypha/apply/activity/adapters/activity_feed.py:24
+#: hypha/apply/activity/adapters/activity_feed.py:38
 #, python-brace-format
 msgid "Lead changed from {old_lead} to {source.lead}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:24
+#: hypha/apply/activity/adapters/activity_feed.py:25
 #, python-brace-format
 msgid "Batch Lead changed to {new_lead}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:25
+#: hypha/apply/activity/adapters/activity_feed.py:26
 #, python-brace-format
 msgid "Sent a determination. Outcome: {determination.clean_outcome}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:27
+#: hypha/apply/activity/adapters/activity_feed.py:28
 msgid "Invited to submit a proposal"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:31
+#: hypha/apply/activity/adapters/activity_feed.py:32
 msgid "Submitted a review"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:32
+#: hypha/apply/activity/adapters/activity_feed.py:33
 msgid "Opened the submission while still sealed"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:34
+#: hypha/apply/activity/adapters/activity_feed.py:35
 #, python-brace-format
 msgid ""
 "{user} {opinion.opinion_display}s with {opinion.review.author}s review of "
 "{source}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:35
+#: hypha/apply/activity/adapters/activity_feed.py:36
 msgid "Created"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:36
+#: hypha/apply/activity/adapters/activity_feed.py:37
 #, python-brace-format
 msgid "Progressed from {old_stage} to {source.status_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:38
+#: hypha/apply/activity/adapters/activity_feed.py:39
 msgid "Requested approval"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:39
-#: hypha/apply/determinations/options.py:12
+#: hypha/apply/activity/adapters/activity_feed.py:40
+#: hypha/apply/determinations/options.py:12 hypha/apply/projects/utils.py:116
 msgid "Approved"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:40
+#: hypha/apply/activity/adapters/activity_feed.py:41
 #, python-brace-format
 msgid "Requested changes for acceptance: \"{comment}\""
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:41
+#: hypha/apply/activity/adapters/activity_feed.py:42
 msgid "Submitted Contract Documents"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:42
+#: hypha/apply/activity/adapters/activity_feed.py:43
 #, python-brace-format
 msgid "Uploaded a {contract.state} contract"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:43
+#: hypha/apply/activity/adapters/activity_feed.py:44
 msgid "Approved contract"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:45
-msgid "Invoice created"
+#: hypha/apply/activity/adapters/activity_feed.py:46
+#: hypha/apply/projects/views/payment.py:218
+msgid "Invoice added"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:46
+#: hypha/apply/activity/adapters/activity_feed.py:47
 msgid "Submitted a report"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:49
-#: hypha/apply/activity/adapters/django_messages.py:21
+#: hypha/apply/activity/adapters/activity_feed.py:50
+#: hypha/apply/activity/adapters/django_messages.py:20
 msgid "Reporting disabled"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:52
-#: hypha/apply/activity/adapters/slack.py:73
+#: hypha/apply/activity/adapters/activity_feed.py:53
+#: hypha/apply/activity/adapters/slack.py:72
 #, python-brace-format
 msgid "{user} has archived the submission: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:53
-#: hypha/apply/activity/adapters/slack.py:74
+#: hypha/apply/activity/adapters/activity_feed.py:54
+#: hypha/apply/activity/adapters/slack.py:73
 #, python-brace-format
 msgid "{user} has unarchived the submission: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:83
+#: hypha/apply/activity/adapters/activity_feed.py:89
 msgid "Reviewers updated."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:85
-#: hypha/apply/activity/adapters/activity_feed.py:170
-#: hypha/apply/activity/adapters/slack.py:182
+#: hypha/apply/activity/adapters/activity_feed.py:91
+#: hypha/apply/activity/adapters/activity_feed.py:176
+#: hypha/apply/activity/adapters/slack.py:180
 msgid "Added:"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:89
-#: hypha/apply/activity/adapters/activity_feed.py:174
-#: hypha/apply/activity/adapters/slack.py:186
+#: hypha/apply/activity/adapters/activity_feed.py:95
+#: hypha/apply/activity/adapters/activity_feed.py:180
+#: hypha/apply/activity/adapters/slack.py:184
 msgid "Removed:"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:95
+#: hypha/apply/activity/adapters/activity_feed.py:101
 msgid "Batch Reviewers Updated."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:98
+#: hypha/apply/activity/adapters/activity_feed.py:104
 #, python-brace-format
 msgid "{user} as {name}."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:115
+#: hypha/apply/activity/adapters/activity_feed.py:121
 #, python-brace-format
 msgid "Successfully deleted submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:122
+#: hypha/apply/activity/adapters/activity_feed.py:128
 #, python-brace-format
 msgid "Successfully archived submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:128
+#: hypha/apply/activity/adapters/activity_feed.py:134
 #, python-brace-format
 msgid "Progressed from {old_display} to {new_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:168
+#: hypha/apply/activity/adapters/activity_feed.py:174
 msgid "Partners updated."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:182
+#: hypha/apply/activity/adapters/activity_feed.py:188
 #, python-brace-format
 msgid ""
 "Updated reporting frequency. New schedule is: {new_schedule} starting on "
 "{schedule_start}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:192
+#: hypha/apply/activity/adapters/activity_feed.py:198
 #, python-brace-format
-msgid "Updated Invoice status to: {status}."
+msgid "Updated Invoice status to: {invoice_status}."
 msgstr ""
 
-#: hypha/apply/activity/adapters/activity_feed.py:230
+#: hypha/apply/activity/adapters/activity_feed.py:246
 #, python-brace-format
 msgid "Screening decision from {old_status} to {new_status}"
 msgstr ""
 
 #: hypha/apply/activity/adapters/django_messages.py:17
-msgid "Successfully uploaded document"
-msgstr ""
-
-#: hypha/apply/activity/adapters/django_messages.py:18
 msgid "Successfully removed document"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:22
+#: hypha/apply/activity/adapters/django_messages.py:21
 msgid "Reminder created"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:23
+#: hypha/apply/activity/adapters/django_messages.py:22
 msgid "Reminder deleted"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:28
-#: hypha/apply/activity/adapters/slack.py:207
+#: hypha/apply/activity/adapters/django_messages.py:27
+#: hypha/apply/activity/adapters/slack.py:205
 #, python-brace-format
 msgid "{user} as {name},"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:34
+#: hypha/apply/activity/adapters/django_messages.py:33
 #, python-brace-format
 msgid "Batch reviewers added: {reviewers_text} to "
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:39
+#: hypha/apply/activity/adapters/django_messages.py:38
 #, python-brace-format
 msgid ""
 "Successfully updated reporting frequency. They will now report "
 "{new_schedule} starting on {schedule_start}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:43
+#: hypha/apply/activity/adapters/django_messages.py:42
 #, python-brace-format
 msgid "Successfully skipped a Report for {start_date} to {end_date}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:45
+#: hypha/apply/activity/adapters/django_messages.py:44
 #, python-brace-format
 msgid "Successfully unskipped a Report for {start_date} to {end_date}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/django_messages.py:64
+#: hypha/apply/activity/adapters/django_messages.py:63
 #, python-brace-format
 msgid "Successfully determined as {outcome}: "
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:75
+#: hypha/apply/activity/adapters/emails.py:77
 #, python-brace-format
 msgid "Application ready to review: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:82
+#: hypha/apply/activity/adapters/emails.py:84
 msgid "Multiple applications are now ready for your review"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:85
+#: hypha/apply/activity/adapters/emails.py:87
 #, python-brace-format
 msgid "Reminder: Application ready to review: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:88
+#: hypha/apply/activity/adapters/emails.py:90
 #, python-brace-format
 msgid "Project is waiting for approval: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:90
+#: hypha/apply/activity/adapters/emails.py:92
 #, python-brace-format
 msgid "Contract uploaded for the project: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:92
+#: hypha/apply/activity/adapters/emails.py:94
 #, python-brace-format
 msgid "Contract Documents required approval for the project: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:96
+#: hypha/apply/activity/adapters/emails.py:101
 #, python-brace-format
 msgid "Project is waiting for the contract: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:98
+#: hypha/apply/activity/adapters/emails.py:103
 #, python-brace-format
 msgid "Project is ready for invoicing: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:100
+#: hypha/apply/activity/adapters/emails.py:105
 #, python-brace-format
 msgid "Project status has changed to {source.status}: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:102
+#: hypha/apply/activity/adapters/emails.py:107
 msgid "Project has been rejected, please update and resubmit"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:106
+#: hypha/apply/activity/adapters/emails.py:109
+#, python-brace-format
+msgid "Project documents are ready to be assigned for approval: {source.title}"
+msgstr ""
+
+#: hypha/apply/activity/adapters/emails.py:113
 #, python-brace-format
 msgid "Your application to {org_long_name}: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/emails.py:109
+#: hypha/apply/activity/adapters/emails.py:116
 #, python-brace-format
 msgid "Your {org_long_name} Project: {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:33
+#: hypha/apply/activity/adapters/slack.py:32
 #, python-brace-format
 msgid ""
 "A new submission has been submitted for {source.page.title}: <{link}|{source."
 "title}> by {user}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:34
+#: hypha/apply/activity/adapters/slack.py:33
 #, python-brace-format
 msgid ""
 "The lead of <{link}|{source.title}> has been updated from {old_lead} to "
 "{source.lead} by {user}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:36
+#: hypha/apply/activity/adapters/slack.py:35
 #, python-brace-format
 msgid ""
 "A new {comment.visibility} comment has been posted on <{link}|{source.title}"
 "> by {user}"
 msgstr ""
 
+#: hypha/apply/activity/adapters/slack.py:36
 #: hypha/apply/activity/adapters/slack.py:37
-#: hypha/apply/activity/adapters/slack.py:38
 #, python-brace-format
 msgid "{user} has edited <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:41
+#: hypha/apply/activity/adapters/slack.py:40
 #, python-brace-format
 msgid "{user} has updated the partners on <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:42
+#: hypha/apply/activity/adapters/slack.py:41
 #, python-brace-format
 msgid ""
 "{user} has updated the status of <{link}|{source.title}>: {old_phase."
 "display_name} → {source.phase}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:46
+#: hypha/apply/activity/adapters/slack.py:45
 #, python-brace-format
 msgid "A proposal has been submitted for review: <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:47
+#: hypha/apply/activity/adapters/slack.py:46
 #, python-brace-format
 msgid ""
 "<{link}|{source.title}> by {source.user} has been invited to submit a "
 "proposal"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:48
+#: hypha/apply/activity/adapters/slack.py:47
 #, python-brace-format
 msgid ""
 "{user} has submitted a review for <{link}|{source.title}>. Outcome: {review."
 "outcome},  Score: {review.get_score_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:50
+#: hypha/apply/activity/adapters/slack.py:49
 #, python-brace-format
 msgid "{user} has opened the sealed submission: <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:51
+#: hypha/apply/activity/adapters/slack.py:50
 #, python-brace-format
 msgid ""
 "{user} {opinion.opinion_display}s with {opinion.review.author}s review of "
 "<{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:53
+#: hypha/apply/activity/adapters/slack.py:52
 #, python-brace-format
 msgid "{user} has deleted {source.title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:54
+#: hypha/apply/activity/adapters/slack.py:53
 #, python-brace-format
 msgid "{user} has deleted {review.author} review for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:55
+#: hypha/apply/activity/adapters/slack.py:54
 #, python-brace-format
 msgid "{user} has created a Project: <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:56
+#: hypha/apply/activity/adapters/slack.py:55
 #, python-brace-format
 msgid ""
 "The lead of project <{link}|{source.title}> has been updated from {old_lead} "
 "to {source.lead} by {user}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:57
+#: hypha/apply/activity/adapters/slack.py:56
 #, python-brace-format
 msgid "{user} has edited {review.author} review for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:58
+#: hypha/apply/activity/adapters/slack.py:57
 #, python-brace-format
 msgid "{user} has requested approval on project <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:59
+#: hypha/apply/activity/adapters/slack.py:58
 #, python-brace-format
 msgid "{user} has approved project <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:60
+#: hypha/apply/activity/adapters/slack.py:59
 #, python-brace-format
 msgid ""
 "{user} has requested changes for project acceptance on <{link}|{source.title}"
 ">"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:61
+#: hypha/apply/activity/adapters/slack.py:60
 #, python-brace-format
 msgid "{user} has uploaded a contract for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:62
+#: hypha/apply/activity/adapters/slack.py:61
 #, python-brace-format
 msgid ""
 "{user} has submitted the contracting document for project <{link}|{source."
 "title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:63
+#: hypha/apply/activity/adapters/slack.py:62
 #, python-brace-format
 msgid "{user} has approved contract for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:64
+#: hypha/apply/activity/adapters/slack.py:63
 #, python-brace-format
 msgid "{user} has created invoice for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:65
+#: hypha/apply/activity/adapters/slack.py:64
 #, python-brace-format
 msgid ""
 "{user} has changed the status of <{link_related}|invoice> on <{link}|{source."
 "title}> to {invoice.status_display}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:66
+#: hypha/apply/activity/adapters/slack.py:65
 #, python-brace-format
 msgid "{user} has deleted invoice from <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:67
+#: hypha/apply/activity/adapters/slack.py:66
 #, python-brace-format
 msgid "{user} has updated invoice for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:68
+#: hypha/apply/activity/adapters/slack.py:67
 #, python-brace-format
 msgid "{user} has submitted a report for <{link}|{source.title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:70
+#: hypha/apply/activity/adapters/slack.py:69
 #, python-brace-format
 msgid "{user} has created a new account for <{link}|{source}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:71
+#: hypha/apply/activity/adapters/slack.py:70
 #, python-brace-format
 msgid ""
 "{user} has edited account for <{link}|{source}> that now has following "
 "roles: {roles}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:176
+#: hypha/apply/activity/adapters/slack.py:174
 #, python-brace-format
 msgid "{user} has updated the reviewers on <{link}|{title}>"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:195
+#: hypha/apply/activity/adapters/slack.py:193
 #, python-brace-format
 msgid "{user} has batch changed lead to {new_lead} on: {submissions_text}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:213
+#: hypha/apply/activity/adapters/slack.py:211
 #, python-brace-format
 msgid ""
 "{user} has batch added {reviewers_text} as reviewers on: {submissions_text}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:233
+#: hypha/apply/activity/adapters/slack.py:231
 #, python-brace-format
 msgid "{user} has transitioned the following submissions: {submissions_links}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:243
+#: hypha/apply/activity/adapters/slack.py:241
 #, python-brace-format
 msgid ""
 "A determination for <{link}|{submission_title}> was sent by email. Outcome: "
 "{determination_outcome}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:250
+#: hypha/apply/activity/adapters/slack.py:248
 #, python-brace-format
 msgid ""
 "A determination for <{link}|{submission_title}> was saved without sending an "
 "email. Outcome: {determination_outcome}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:266
+#: hypha/apply/activity/adapters/slack.py:264
 #, python-brace-format
 msgid "Determinations of {outcome} was sent for: {submissions_links}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:275
+#: hypha/apply/activity/adapters/slack.py:273
 #, python-brace-format
 msgid "{user} has deleted submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:282
+#: hypha/apply/activity/adapters/slack.py:280
 #, python-brace-format
 msgid "{user} has archived submissions: {title}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/slack.py:296
+#: hypha/apply/activity/adapters/slack.py:294
 #, python-brace-format
 msgid ""
 "<{link}|{title}> is ready for review. The following are assigned as "
 "reviewers: {reviewers}"
 msgstr ""
 
-#: hypha/apply/activity/adapters/utils.py:32
+#: hypha/apply/activity/adapters/utils.py:43
 #, python-brace-format
 msgid " as {role}"
 msgstr ""
@@ -548,7 +550,7 @@ msgstr ""
 msgid "Activities Summary - "
 msgstr ""
 
-#: hypha/apply/activity/models.py:157
+#: hypha/apply/activity/models.py:168
 msgid "verb"
 msgstr ""
 
@@ -677,114 +679,118 @@ msgid "approved project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:38
-msgid "approved paf"
+msgid "assign paf approver"
 msgstr ""
 
 #: hypha/apply/activity/options.py:39
-msgid "transitioned project"
+msgid "approved paf"
 msgstr ""
 
 #: hypha/apply/activity/options.py:40
-msgid "requested project change"
+msgid "transitioned project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:41
-msgid "submitted contract documents"
+msgid "requested project change"
 msgstr ""
 
 #: hypha/apply/activity/options.py:42
-msgid "uploaded document to project"
+msgid "submitted contract documents"
 msgstr ""
 
 #: hypha/apply/activity/options.py:43
-msgid "removed document from project"
+msgid "uploaded document to project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:44
-msgid "uploaded contract to project"
+msgid "removed document from project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:45
-msgid "approved contract"
+msgid "uploaded contract to project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:46
-msgid "created invoice for project"
+msgid "approved contract"
 msgstr ""
 
 #: hypha/apply/activity/options.py:47
-msgid "updated invoice status"
+msgid "created invoice for project"
 msgstr ""
 
 #: hypha/apply/activity/options.py:48
-msgid "approve invoice"
+msgid "updated invoice status"
 msgstr ""
 
 #: hypha/apply/activity/options.py:49
-msgid "deleted invoice"
+msgid "approve invoice"
 msgstr ""
 
 #: hypha/apply/activity/options.py:50
-msgid "sent project to compliance"
+msgid "deleted invoice"
 msgstr ""
 
 #: hypha/apply/activity/options.py:51
-msgid "updated invoice"
+msgid "sent project to compliance"
 msgstr ""
 
 #: hypha/apply/activity/options.py:52
-msgid "submitted report"
+msgid "updated invoice"
 msgstr ""
 
 #: hypha/apply/activity/options.py:53
-msgid "skipped report"
+msgid "submitted report"
 msgstr ""
 
 #: hypha/apply/activity/options.py:54
-msgid "changed report frequency"
+msgid "skipped report"
 msgstr ""
 
 #: hypha/apply/activity/options.py:55
-msgid "disabled reporting"
+msgid "changed report frequency"
 msgstr ""
 
 #: hypha/apply/activity/options.py:56
-msgid "notified report"
+msgid "disabled reporting"
 msgstr ""
 
 #: hypha/apply/activity/options.py:57
-msgid "created reminder"
+msgid "notified report"
 msgstr ""
 
 #: hypha/apply/activity/options.py:58
-msgid "deleted reminder"
+msgid "created reminder"
 msgstr ""
 
 #: hypha/apply/activity/options.py:59
-msgid "reminder to review"
+msgid "deleted reminder"
 msgstr ""
 
 #: hypha/apply/activity/options.py:60
-msgid "batch deleted submissions"
+msgid "reminder to review"
 msgstr ""
 
 #: hypha/apply/activity/options.py:61
-msgid "batch archive submissions"
+msgid "batch deleted submissions"
 msgstr ""
 
 #: hypha/apply/activity/options.py:62
-msgid "created new account"
+msgid "batch archive submissions"
 msgstr ""
 
 #: hypha/apply/activity/options.py:63
-msgid "edited account"
+msgid "created new account"
 msgstr ""
 
 #: hypha/apply/activity/options.py:64
-msgid "archived submission"
+msgid "edited account"
 msgstr ""
 
 #: hypha/apply/activity/options.py:65
+msgid "archived submission"
+msgstr ""
+
+#: hypha/apply/activity/options.py:66
 msgid "unarchived submission"
 msgstr ""
 
@@ -794,29 +800,32 @@ msgstr ""
 
 #: hypha/apply/activity/templates/activity/include/comment_form.html:5
 #: hypha/apply/determinations/templates/determinations/base_determination_form.html:50
-#: hypha/apply/funds/views.py:1198 hypha/apply/funds/workflow.py:202
-#: hypha/apply/funds/workflow.py:230 hypha/apply/funds/workflow.py:273
-#: hypha/apply/funds/workflow.py:329 hypha/apply/funds/workflow.py:355
-#: hypha/apply/funds/workflow.py:393 hypha/apply/funds/workflow.py:431
-#: hypha/apply/funds/workflow.py:484 hypha/apply/funds/workflow.py:512
-#: hypha/apply/funds/workflow.py:572 hypha/apply/funds/workflow.py:610
-#: hypha/apply/funds/workflow.py:663 hypha/apply/funds/workflow.py:690
-#: hypha/apply/funds/workflow.py:732 hypha/apply/funds/workflow.py:779
-#: hypha/apply/funds/workflow.py:805 hypha/apply/funds/workflow.py:846
-#: hypha/apply/funds/workflow.py:885
+#: hypha/apply/funds/views.py:1163 hypha/apply/funds/workflow.py:217
+#: hypha/apply/funds/workflow.py:245 hypha/apply/funds/workflow.py:288
+#: hypha/apply/funds/workflow.py:344 hypha/apply/funds/workflow.py:370
+#: hypha/apply/funds/workflow.py:408 hypha/apply/funds/workflow.py:446
+#: hypha/apply/funds/workflow.py:499 hypha/apply/funds/workflow.py:527
+#: hypha/apply/funds/workflow.py:587 hypha/apply/funds/workflow.py:625
+#: hypha/apply/funds/workflow.py:678 hypha/apply/funds/workflow.py:705
+#: hypha/apply/funds/workflow.py:747 hypha/apply/funds/workflow.py:794
+#: hypha/apply/funds/workflow.py:820 hypha/apply/funds/workflow.py:861
+#: hypha/apply/funds/workflow.py:900
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:25
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:150
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:221
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:220
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:241
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:260
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:210
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:220
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:235
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:259
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:283
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:298
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:308
 #: hypha/apply/projects/templates/application_projects/report_form.html:46
 #: hypha/apply/projects/templates/application_projects/report_form.html:66
 #: hypha/apply/projects/templates/application_projects/vendor_form.html:27
-#: hypha/apply/projects/views/project.py:1041
 #: hypha/apply/review/templates/review/review_edit_form.html:42
 #: hypha/apply/review/templates/review/review_form.html:43
+#: hypha/apply/users/templates/users/change_password.html:42
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:35
+#: hypha/apply/users/templates/users/register.html:25
 msgid "Submit"
 msgstr ""
 
@@ -831,12 +840,11 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:64
 #: hypha/apply/determinations/templates/determinations/determination_detail.html:25
 #: hypha/apply/funds/templates/funds/admin/widgets/read_only.html:2
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:95
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:39
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:107
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:40
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:74
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:78
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:106
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:60
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:98
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:126
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:4
 #: hypha/apply/projects/templates/application_projects/report_detail.html:59
 #: hypha/apply/projects/templates/application_projects/vendor_detail.html:23
@@ -845,7 +853,6 @@ msgid "Edit"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/include/listing_base.html:21
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:85
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:34
 msgid "Last edited"
 msgstr ""
@@ -854,9 +861,13 @@ msgstr ""
 msgid "updated"
 msgstr ""
 
+#: hypha/apply/activity/templates/activity/include/listing_base.html:53
+msgid "View "
+msgstr ""
+
 #: hypha/apply/activity/templates/activity/include/notifications_dropdown.html:6
 #: hypha/apply/activity/templates/activity/notifications.html:8
-#: hypha/templates/base-apply.html:119
+#: hypha/templates/base-apply.html:143
 msgid "Notifications"
 msgstr ""
 
@@ -870,19 +881,19 @@ msgid "made a comment"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/notifications.html:11
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:92
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:104
 #: hypha/apply/users/templates/wagtailusers/users/results.html:40
 msgid "Filter"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/notifications.html:18
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:44
-#: hypha/apply/projects/templates/application_projects/project_detail.html:86
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:49
+#: hypha/apply/projects/templates/application_projects/project_detail.html:78
 msgid "Communications"
 msgstr ""
 
 #: hypha/apply/activity/templates/activity/notifications.html:22
-#: hypha/apply/projects/templates/application_projects/project_detail.html:101
+#: hypha/apply/projects/templates/application_projects/project_detail.html:93
 msgid "Activity Feed"
 msgstr ""
 
@@ -921,34 +932,16 @@ msgid ""
 "inquiries, please email us at %(ORG_EMAIL)s"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/base.html:2
-#: hypha/apply/users/templates/users/activation/email.txt:2
-#: hypha/apply/users/templates/users/email_change/confirm_email.txt:2
-#, python-format
-msgid "Dear %(user)s,"
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/base.html:8
-#, python-format
-msgid ""
-"Kind Regards,\n"
-"The %(ORG_SHORT_NAME)s Team"
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:4
-#: hypha/apply/activity/templates/messages/email/ready_to_review.html:4
-msgid "Dear Reviewer,"
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:7
-msgid "New applications have been added to your review list."
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:7
+msgid "Project documents are ready to be assigned for approval."
 msgstr ""
 
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:9
 #: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:10
 #: hypha/apply/activity/templates/messages/email/contract_uploaded.html:15
 #: hypha/apply/activity/templates/messages/email/invoice_approved.html:9
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:16
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:9
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:17
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:10
 #: hypha/apply/activity/templates/messages/email/paf_for_approval.html:9
 #: hypha/apply/activity/templates/messages/email/partners_update_applicant.html:9
 #: hypha/apply/activity/templates/messages/email/partners_update_partner.html:9
@@ -964,10 +957,11 @@ msgstr ""
 msgid "Title"
 msgstr ""
 
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:10
 #: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:11
 #: hypha/apply/activity/templates/messages/email/contract_uploaded.html:16
 #: hypha/apply/activity/templates/messages/email/invoice_approved.html:10
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:10
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:11
 #: hypha/apply/activity/templates/messages/email/paf_for_approval.html:10
 #: hypha/apply/activity/templates/messages/email/partners_update_applicant.html:10
 #: hypha/apply/activity/templates/messages/email/partners_update_partner.html:10
@@ -985,6 +979,48 @@ msgstr ""
 msgid "Link"
 msgstr ""
 
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:11
+#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:11
+#: hypha/apply/activity/templates/messages/email/project_final_approval.html:11
+#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:12
+#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:11
+msgid "Original Submission"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/assign_paf_approvers.html:13
+#: hypha/apply/activity/templates/messages/email/invoice_approved.html:13
+#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:13
+#: hypha/apply/activity/templates/messages/email/project_final_approval.html:13
+#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:14
+#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:13
+#: hypha/apply/activity/templates/messages/email/submit_contract_documents.html:14
+#, python-format
+msgid "Please contact %(lead)s - %(email)s if you have any questions."
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/base.html:2
+#: hypha/apply/users/templates/users/activation/email.txt:2
+#: hypha/apply/users/templates/users/email_change/confirm_email.txt:2
+#, python-format
+msgid "Dear %(user)s,"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/base.html:8
+#, python-format
+msgid ""
+"Kind Regards,\n"
+"The %(ORG_SHORT_NAME)s Team"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:4
+#: hypha/apply/activity/templates/messages/email/ready_to_review.html:4
+msgid "Dear Reviewer,"
+msgstr ""
+
+#: hypha/apply/activity/templates/messages/email/batch_ready_to_review.html:7
+msgid "New applications have been added to your review list."
+msgstr ""
+
 #: hypha/apply/activity/templates/messages/email/comment.html:4
 #, python-format
 msgid "There has been a new comment on \"%(title)s\" by %(user)s."
@@ -1059,39 +1095,29 @@ msgstr ""
 msgid "Project"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_approved.html:13
-#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:13
-#: hypha/apply/activity/templates/messages/email/project_final_approval.html:13
-#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:14
-#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:13
-#: hypha/apply/activity/templates/messages/email/submit_contract_documents.html:14
-#, python-format
-msgid "Please contact %(lead)s - %(email)s if you have any questions."
-msgstr ""
-
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:5
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:6
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:6
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:7
 #, python-format
 msgid ""
 "An %(ORG_SHORT_NAME)s staff member has updated your invoice for %(title)s "
 "for period %(date_from)s to %(date_to)s."
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:7
-#: hypha/apply/activity/templates/messages/email/invoice_updated.html:7
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:8
+#: hypha/apply/activity/templates/messages/email/invoice_updated.html:8
 #, python-format
-msgid "It is now %(status)s."
+msgid "It is now %(invoice_status)s."
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:10
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:11
 msgid "The staff member left this comment"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:15
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:16
 msgid "Invoice Link"
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:17
+#: hypha/apply/activity/templates/messages/email/invoice_status_updated.html:18
 msgid "Project Link"
 msgstr ""
 
@@ -1100,13 +1126,6 @@ msgstr ""
 msgid "A Project is awaiting your review."
 msgstr ""
 
-#: hypha/apply/activity/templates/messages/email/paf_for_approval.html:11
-#: hypha/apply/activity/templates/messages/email/project_final_approval.html:11
-#: hypha/apply/activity/templates/messages/email/ready_for_contracting.html:12
-#: hypha/apply/activity/templates/messages/email/sent_to_compliance.html:11
-msgid "Original Submission"
-msgstr ""
-
 #: hypha/apply/activity/templates/messages/email/partners_update_applicant.html:5
 msgid "New partner(s) has been added to your submission."
 msgstr ""
@@ -1303,8 +1322,8 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/activity/templates/messages/email/vendor_setup_needed.html:11
-#: hypha/apply/funds/tables.py:545
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:139
+#: hypha/apply/funds/tables.py:571
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:135
 msgid "Submission"
 msgstr ""
 
@@ -1324,7 +1343,7 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:32
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:33
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:55
-#: hypha/apply/funds/tables.py:476
+#: hypha/apply/funds/tables.py:497
 msgid "Active"
 msgstr ""
 
@@ -1340,7 +1359,7 @@ msgstr ""
 msgid "No Screening"
 msgstr ""
 
-#: hypha/apply/api/v1/filters.py:43 hypha/apply/funds/tables.py:292
+#: hypha/apply/api/v1/filters.py:43 hypha/apply/funds/tables.py:307
 msgid "Category"
 msgstr ""
 
@@ -1365,7 +1384,7 @@ msgid "Multi select"
 msgstr ""
 
 #: hypha/apply/categories/blocks.py:30 hypha/apply/funds/blocks.py:30
-#: hypha/apply/funds/blocks.py:53 hypha/apply/funds/blocks.py:102
+#: hypha/apply/funds/blocks.py:61 hypha/apply/funds/blocks.py:110
 #: hypha/apply/stream_forms/blocks.py:36
 msgid "Label"
 msgstr ""
@@ -1375,7 +1394,7 @@ msgid "Leave blank to use the default Category label"
 msgstr ""
 
 #: hypha/apply/categories/blocks.py:35 hypha/apply/funds/blocks.py:31
-#: hypha/apply/funds/blocks.py:54 hypha/apply/funds/blocks.py:103
+#: hypha/apply/funds/blocks.py:62 hypha/apply/funds/blocks.py:111
 #: hypha/apply/stream_forms/blocks.py:37
 msgid "Help text"
 msgstr ""
@@ -1397,6 +1416,8 @@ msgid "Keep the name short, ideally one word."
 msgstr ""
 
 #: hypha/apply/categories/models.py:56
+#: hypha/apply/funds/templates/funds/includes/submission-list-item.html:25
+#: hypha/apply/funds/templates/funds/includes/submission-list-item.html:34
 msgid "Archived"
 msgstr ""
 
@@ -1445,7 +1466,7 @@ msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html:17
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:16
-#: hypha/apply/home/templates/apply_home/includes/apply_listing.html:29
+#: hypha/apply/home/templates/apply_home/includes/apply_listing.html:31
 #: hypha/templates/includes/apply_button.html:2
 msgid "Apply"
 msgstr ""
@@ -1461,15 +1482,11 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:48
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:37
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:55
-#: hypha/apply/funds/tables.py:71
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:84
+#: hypha/apply/funds/tables.py:90
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:96
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:33
 #: hypha/apply/funds/templates/funds/includes/revision_diff_table.html:4
-#: hypha/apply/projects/models/payment.py:31 hypha/apply/projects/tables.py:20
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:18
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:27
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:88
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:97
+#: hypha/apply/projects/models/payment.py:30 hypha/apply/projects/tables.py:20
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:47
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:58
 msgid "Submitted"
@@ -1479,11 +1496,11 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:48
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:37
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:55
-#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:9
+#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:10
 #: hypha/apply/determinations/templates/determinations/includes/determination_block.html:9
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:19
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:84
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:85
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:96
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:97
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:33
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:34
 #: hypha/apply/funds/templates/funds/tables/table.html:30
@@ -1518,7 +1535,7 @@ msgstr ""
 #: hypha/apply/dashboard/templates/dashboard/applicant_dashboard.html:57
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:69
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:58
-#: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:75
+#: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:82
 msgid "Submission history"
 msgstr ""
 
@@ -1540,7 +1557,7 @@ msgid "No submissions"
 msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/community_dashboard.html:36
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:103
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:110
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:35
 msgid "Your previous reviews"
 msgstr ""
@@ -1551,6 +1568,13 @@ msgstr ""
 msgid "Apply admin"
 msgstr ""
 
+#: hypha/apply/dashboard/templates/dashboard/contracting_dashboard.html:27
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:81
+#: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:89
+#: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:75
+msgid "PAF waiting for assignee"
+msgstr ""
+
 #: hypha/apply/dashboard/templates/dashboard/dashboard.html:15
 #: hypha/apply/dashboard/templates/dashboard/partner_dashboard.html:12
 #: hypha/apply/users/templates/two_factor/_base.html:7
@@ -1572,16 +1596,16 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:23
 #: hypha/apply/funds/templates/funds/includes/status-block.html:9
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:55
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:183
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:33
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:103
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:169
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:34
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:105
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:66
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:57
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:62
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:87
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:115
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:129
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:181
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:77
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:82
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:107
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:135
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:149
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:200
 msgid "View"
 msgstr ""
 
@@ -1597,25 +1621,25 @@ msgstr ""
 msgid "Requests for invoices requiring your attention"
 msgstr ""
 
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:81
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:88
 msgid "Your projects"
 msgstr ""
 
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:87
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:109
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:94
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:116
 #: hypha/apply/dashboard/templates/dashboard/includes/flagged.html:12
 #: hypha/apply/dashboard/templates/dashboard/includes/submissions-waiting-for-review.html:13
 #: hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html:41
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:28
-#: hypha/apply/funds/templates/funds/submissions_overview.html:43
-#: hypha/apply/funds/templates/funds/submissions_overview.html:53
+#: hypha/apply/funds/templates/funds/submissions_overview.html:54
+#: hypha/apply/funds/templates/funds/submissions_overview.html:64
 #: hypha/apply/projects/templates/application_projects/overview.html:34
 #: hypha/apply/projects/templates/application_projects/overview.html:48
 #: hypha/apply/projects/templates/application_projects/overview.html:63
 msgid "Show all"
 msgstr ""
 
-#: hypha/apply/dashboard/templates/dashboard/dashboard.html:96
+#: hypha/apply/dashboard/templates/dashboard/dashboard.html:103
 #: hypha/apply/dashboard/templates/dashboard/finance_dashboard.html:34
 msgid "Active Invoices"
 msgstr ""
@@ -1666,7 +1690,7 @@ msgid "Awaiting your approval"
 msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html:6
-msgid "PAF waiting for approval"
+msgid "PAF waiting for internal approval"
 msgstr ""
 
 #: hypha/apply/dashboard/templates/dashboard/includes/paf_waiting_for_approval.html:21
@@ -1731,7 +1755,7 @@ msgstr ""
 #: hypha/apply/determinations/blocks.py:77
 #: hypha/apply/determinations/blocks.py:78
 #: hypha/apply/determinations/blocks.py:79
-#: hypha/apply/determinations/blocks.py:80 hypha/apply/funds/blocks.py:194
+#: hypha/apply/determinations/blocks.py:80 hypha/apply/funds/blocks.py:202
 #: hypha/apply/review/blocks.py:160 hypha/apply/review/blocks.py:161
 #: hypha/apply/review/blocks.py:162 hypha/apply/review/blocks.py:163
 #: hypha/apply/review/blocks.py:164 hypha/apply/review/blocks.py:165
@@ -1760,7 +1784,7 @@ msgstr ""
 
 #: hypha/apply/determinations/forms.py:172
 #: hypha/apply/determinations/forms.py:253
-#: hypha/apply/determinations/forms.py:524
+#: hypha/apply/determinations/forms.py:529
 #: hypha/apply/determinations/models.py:108
 #: hypha/apply/determinations/templates/determinations/determination_detail.html:12
 #: hypha/apply/determinations/templates/determinations/determination_detail.html:20
@@ -1851,25 +1875,30 @@ msgid "Rationale and appropriateness questions and comments"
 msgstr ""
 
 #: hypha/apply/determinations/forms.py:360
-#: hypha/apply/determinations/views.py:357
+#: hypha/apply/determinations/views.py:360
 msgid "-- No proposal form selected -- "
 msgstr ""
 
-#: hypha/apply/determinations/forms.py:362
-#: hypha/apply/determinations/views.py:359
-msgid "Proposal Form"
+#: hypha/apply/determinations/forms.py:361
+#: hypha/apply/determinations/views.py:361
+msgid "Select the proposal form only for determination approval"
 msgstr ""
 
-#: hypha/apply/determinations/forms.py:364
-#: hypha/apply/determinations/views.py:361
+#: hypha/apply/determinations/forms.py:363
+#: hypha/apply/determinations/views.py:363
 msgid "Select the proposal form to use for proposal stage."
 msgstr ""
 
+#: hypha/apply/determinations/forms.py:365
+#: hypha/apply/determinations/views.py:365
+msgid "Proposal Form"
+msgstr ""
+
 #: hypha/apply/determinations/models.py:116
 #: hypha/apply/determinations/templates/determinations/includes/determination_block.html:7
-#: hypha/apply/funds/workflow.py:207 hypha/apply/funds/workflow.py:334
-#: hypha/apply/funds/workflow.py:489 hypha/apply/funds/workflow.py:668
-#: hypha/apply/projects/models/project.py:68 hypha/apply/review/models.py:164
+#: hypha/apply/funds/workflow.py:222 hypha/apply/funds/workflow.py:349
+#: hypha/apply/funds/workflow.py:504 hypha/apply/funds/workflow.py:683
+#: hypha/apply/projects/models/project.py:76 hypha/apply/review/models.py:164
 msgid "Draft"
 msgstr ""
 
@@ -1896,7 +1925,7 @@ msgid "Concept note"
 msgstr ""
 
 #: hypha/apply/determinations/models.py:244
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:51
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:71
 msgid "Proposal"
 msgstr ""
 
@@ -1908,10 +1937,10 @@ msgstr ""
 msgid "Proposal form"
 msgstr ""
 
-#: hypha/apply/determinations/options.py:10 hypha/apply/funds/workflow.py:317
-#: hypha/apply/funds/workflow.py:471 hypha/apply/funds/workflow.py:650
-#: hypha/apply/funds/workflow.py:771 hypha/apply/funds/workflow.py:925
-#: hypha/apply/funds/workflow.py:1159
+#: hypha/apply/determinations/options.py:10 hypha/apply/funds/workflow.py:332
+#: hypha/apply/funds/workflow.py:486 hypha/apply/funds/workflow.py:665
+#: hypha/apply/funds/workflow.py:786 hypha/apply/funds/workflow.py:940
+#: hypha/apply/funds/workflow.py:1174
 msgid "Dismissed"
 msgstr ""
 
@@ -1946,8 +1975,8 @@ msgstr ""
 #: hypha/apply/determinations/templates/determinations/determination_form.html:8
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:9
 #: hypha/apply/funds/templates/funds/revisions_compare.html:8
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:12
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:12
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:13
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:13
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:12
 #: hypha/apply/review/templates/review/review_detail.html:11
 #: hypha/apply/review/templates/review/review_edit_form.html:8
@@ -1959,7 +1988,7 @@ msgstr ""
 #: hypha/apply/determinations/templates/determinations/base_determination_form.html:48
 #: hypha/apply/funds/templates/funds/application_base.html:68
 #: hypha/apply/funds/templates/funds/applicationsubmission_form.html:36
-#: hypha/apply/funds/views.py:1199
+#: hypha/apply/funds/views.py:1164
 #: hypha/apply/projects/templates/application_projects/project_approval_form.html:67
 #: hypha/apply/review/templates/review/review_edit_form.html:40
 #: hypha/apply/review/templates/review/review_form.html:41
@@ -1979,7 +2008,7 @@ msgid "submission"
 msgstr ""
 
 #: hypha/apply/determinations/templates/determinations/batch_determination_form.html:20
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:117
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:116
 msgid "as"
 msgstr ""
 
@@ -2020,7 +2049,7 @@ msgstr ""
 msgid "Determinations"
 msgstr ""
 
-#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:12
+#: hypha/apply/determinations/templates/determinations/includes/applicant_determination_block.html:13
 #: hypha/apply/determinations/templates/determinations/includes/determination_block.html:12
 msgid "Awaiting determination"
 msgstr ""
@@ -2072,7 +2101,7 @@ msgstr ""
 msgid "There is a draft determination you do not have permission to edit."
 msgstr ""
 
-#: hypha/apply/determinations/views.py:430
+#: hypha/apply/determinations/views.py:438
 #, python-brace-format
 msgid ""
 "A determination of \"{current}\" exists but you tried to progress as "
@@ -2108,7 +2137,7 @@ msgstr ""
 msgid "Labs"
 msgstr ""
 
-#: hypha/apply/funds/admin_helpers.py:86 hypha/apply/funds/tables.py:477
+#: hypha/apply/funds/admin_helpers.py:86 hypha/apply/funds/tables.py:498
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:13
 #: hypha/apply/funds/templates/funds/includes/round-block.html:13
 #: hypha/templates/includes/relatedcontent_card.html:8
@@ -2147,16 +2176,21 @@ msgstr ""
 msgid "Requested amount"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:53
+#: hypha/apply/funds/blocks.py:55
+#: hypha/apply/funds/templates/funds/includes/rendered_answers.html:35
+msgid "Organization name"
+msgstr ""
+
+#: hypha/apply/funds/blocks.py:61
 msgid "What email address should we use to contact you?"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:55
+#: hypha/apply/funds/blocks.py:63
 msgid ""
 "We will use this email address to communicate with you about your proposal."
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:71
+#: hypha/apply/funds/blocks.py:79
 #: hypha/apply/funds/templates/funds/includes/rendered_answers.html:29
 #: hypha/apply/funds/templates/funds/includes/revision_diff_table.html:17
 #: hypha/apply/projects/models/vendor.py:20
@@ -2165,97 +2199,95 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:102
+#: hypha/apply/funds/blocks.py:110
 msgid "What is your name?"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:104
+#: hypha/apply/funds/blocks.py:112
 msgid "We will use this name when we communicate with you about your proposal."
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:107 hypha/apply/users/models.py:180
+#: hypha/apply/funds/blocks.py:115 hypha/apply/users/models.py:183
 msgid "Full name"
 msgstr ""
 
-#: hypha/apply/funds/blocks.py:193 hypha/apply/stream_forms/blocks.py:466
+#: hypha/apply/funds/blocks.py:201 hypha/apply/stream_forms/blocks.py:466
 #: hypha/apply/stream_forms/blocks.py:467
 #: hypha/apply/stream_forms/blocks.py:482
 #: hypha/apply/stream_forms/blocks.py:483 hypha/apply/utils/blocks.py:84
 msgid "Custom"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:62 hypha/apply/funds/forms.py:81
+#: hypha/apply/funds/forms.py:61 hypha/apply/funds/forms.py:80
 msgid "Take action"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:144 hypha/apply/projects/forms/project.py:350
+#: hypha/apply/funds/forms.py:143 hypha/apply/projects/forms/project.py:395
 #, python-brace-format
 msgid "Update lead from {lead} to"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:181
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:30
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:32
+#: hypha/apply/funds/forms.py:180
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:35
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:37
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:20
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:59
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:28
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:61
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:40
 #: hypha/apply/funds/templates/funds/submission_sealed.html:14
 #: hypha/apply/funds/templates/funds/submissions_by_round.html:10
-#: hypha/apply/projects/filters.py:28 hypha/apply/projects/filters.py:42
+#: hypha/apply/projects/filters.py:33 hypha/apply/projects/filters.py:47
 #: hypha/apply/projects/tables.py:42
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:25
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:25
-#: hypha/apply/projects/templates/application_projects/project_detail.html:45
-#: hypha/apply/projects/templates/application_projects/project_detail.html:54
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:25
+#: hypha/apply/projects/templates/application_projects/project_detail.html:37
+#: hypha/apply/projects/templates/application_projects/project_detail.html:46
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:18
 msgid "Lead"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:251 hypha/apply/funds/forms.py:384
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:125
+#: hypha/apply/funds/forms.py:228 hypha/apply/funds/forms.py:350
 msgid "External Reviewers"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:329
+#: hypha/apply/funds/forms.py:295
 msgid "Can't unassign, just change, because review already submitted"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:334 hypha/apply/funds/forms.py:429
+#: hypha/apply/funds/forms.py:300 hypha/apply/funds/forms.py:393
 msgid "Users cannot be assigned to multiple roles."
 msgstr ""
 
-#: hypha/apply/funds/forms.py:416
-msgid "Only Lead can change the External Reviewers"
-msgstr ""
-
-#: hypha/apply/funds/forms.py:419
+#: hypha/apply/funds/forms.py:383
 msgid ""
-"External Reviewers cannot be selected because of the application workflow"
+"Make sure all submissions support external reviewers and you are lead for "
+"all the selected submissions."
 msgstr ""
 
-#: hypha/apply/funds/forms.py:478
-msgid "-- No reviewer selected --"
+#: hypha/apply/funds/forms.py:413
+msgid "---"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:480
+#: hypha/apply/funds/forms.py:415
 #, python-brace-format
 msgid "{role_name} Reviewer"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:495
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:58
+#: hypha/apply/funds/forms.py:430
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:60
 msgid "Partners"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:556
+#: hypha/apply/funds/forms.py:491
 msgid "Meta terms"
 msgstr ""
 
-#: hypha/apply/funds/forms.py:559
+#: hypha/apply/funds/forms.py:494
 msgid "Meta terms are hierarchical in nature."
 msgstr ""
 
-#: hypha/apply/funds/models/__init__.py:36 hypha/apply/funds/tables.py:74
+#: hypha/apply/funds/models/__init__.py:36 hypha/apply/funds/tables.py:93
 #: hypha/apply/projects/tables.py:41 hypha/apply/projects/tables.py:66
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:26
 msgid "Fund"
 msgstr ""
 
@@ -2388,7 +2420,7 @@ msgstr ""
 msgid "Only one Yes and No screening decision can be set as default."
 msgstr ""
 
-#: hypha/apply/funds/models/submissions.py:486
+#: hypha/apply/funds/models/submissions.py:435
 msgid "submit time"
 msgstr ""
 
@@ -2416,100 +2448,100 @@ msgstr ""
 msgid "Confirmation email"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:72
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:23
-#: hypha/apply/projects/filters.py:27 hypha/apply/projects/filters.py:43
+#: hypha/apply/funds/tables.py:91
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:35
+#: hypha/apply/projects/filters.py:32 hypha/apply/projects/filters.py:48
 #: hypha/apply/projects/tables.py:65
 #: hypha/apply/projects/templates/application_projects/includes/invoices.html:20
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:29
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:90
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:99
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:20
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:19
-#: hypha/public/partner/tables.py:51 hypha/public/partner/tables.py:97
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:30
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:91
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:101
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:21
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:30
+#: hypha/public/partner/tables.py:54 hypha/public/partner/tables.py:100
 msgid "Status"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:73
+#: hypha/apply/funds/tables.py:92
 msgid "Type"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:75
+#: hypha/apply/funds/tables.py:94
 msgid "Comments"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:76
+#: hypha/apply/funds/tables.py:95
 #: hypha/apply/funds/templates/funds/tables/table.html:22
 #: hypha/apply/review/templates/review/review_detail.html:11
 msgid "Last updated"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:90
+#: hypha/apply/funds/tables.py:109
 msgid "No submissions available"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:136 hypha/apply/funds/tables.py:289
+#: hypha/apply/funds/tables.py:155 hypha/apply/funds/tables.py:304
 msgid "Screening"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:170
+#: hypha/apply/funds/tables.py:190
 msgid "Role"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:274
+#: hypha/apply/funds/tables.py:289
 msgid "Statuses"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:286 hypha/apply/funds/tables.py:380
-#: hypha/apply/funds/tables.py:474 hypha/apply/funds/tables.py:508
-#: hypha/apply/projects/filters.py:26 hypha/apply/projects/filters.py:41
+#: hypha/apply/funds/tables.py:301 hypha/apply/funds/tables.py:401
+#: hypha/apply/funds/tables.py:495 hypha/apply/funds/tables.py:529
+#: hypha/apply/projects/filters.py:31 hypha/apply/projects/filters.py:46
 #: hypha/public/home/models.py:124
 msgid "Funds"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:287 hypha/apply/funds/tables.py:379
-#: hypha/apply/funds/tables.py:513
+#: hypha/apply/funds/tables.py:302 hypha/apply/funds/tables.py:400
+#: hypha/apply/funds/tables.py:534
 #: hypha/apply/funds/templates/funds/rounds.html:5
 #: hypha/apply/funds/templates/funds/rounds.html:15
 msgid "Rounds"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:288 hypha/apply/funds/tables.py:475
+#: hypha/apply/funds/tables.py:303 hypha/apply/funds/tables.py:496
 msgid "Leads"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:289
+#: hypha/apply/funds/tables.py:304
 msgid "No Status"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:290 hypha/apply/funds/tables.py:503
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:57
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:33
+#: hypha/apply/funds/tables.py:305 hypha/apply/funds/tables.py:524
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:59
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:45
 msgid "Reviewers"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:295
+#: hypha/apply/funds/tables.py:310
 msgid "Terms"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:408
+#: hypha/apply/funds/tables.py:429
 #: hypha/apply/funds/templates/funds/includes/round-block-listing.html:20
 msgid "Determined"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:528
+#: hypha/apply/funds/tables.py:549
 msgid "Reviewer"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:541 hypha/apply/funds/tables.py:556
+#: hypha/apply/funds/tables.py:562 hypha/apply/funds/tables.py:596
 msgid "No reviews available"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:560
+#: hypha/apply/funds/tables.py:600
 msgid "Staff"
 msgstr ""
 
-#: hypha/apply/funds/tables.py:568
+#: hypha/apply/funds/tables.py:608
 msgid "No staff available"
 msgstr ""
 
@@ -2529,7 +2561,7 @@ msgstr ""
 msgid "Continue"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/application_base.html:19
+#: hypha/apply/funds/templates/funds/application_base.html:20
 msgid ""
 "There were some errors with your form. Please amend the fields highlighted "
 "below"
@@ -2580,11 +2612,23 @@ msgid ""
 "An e-mail with more information has been sent to the address you entered."
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/application_base_landing.html:18
+#: hypha/apply/funds/templates/funds/application_base_landing.html:19
 #, python-format
 msgid ""
-"If you do not receive an e-mail within 15 minutes please check your\n"
-"spam folder and contact %(email)s for further assistance."
+"If you do not receive an e-mail within 15 minutes please check your spam "
+"folder and contact %(email)s for further assistance."
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/application_base_landing.html:27
+msgid "Go to my dashboard."
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/application_base_landing.html:29
+#: hypha/apply/users/templates/users/login.html:43
+#: hypha/apply/users/templates/users/password_reset/complete.html:13
+#: hypha/apply/users/templates/users/password_reset/form.html:33
+#: hypha/apply/users/templates/users/register.html:29
+msgid "Log in"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:3
@@ -2593,7 +2637,7 @@ msgid "Revisions for %(title)s"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationrevision_list.html:8
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:64
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:66
 msgid "Revisions"
 msgstr ""
 
@@ -2609,12 +2653,12 @@ msgid "Compare"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html:10
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:2
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:3
 #: hypha/apply/funds/templates/funds/includes/generic_primary_actions.html:5
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:45
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:67
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:10
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:146
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:150
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:154
 msgid "Actions to take"
 msgstr ""
 
@@ -2624,7 +2668,7 @@ msgstr ""
 msgid "Reviews & assignees"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html:52
+#: hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html:59
 msgid "View all"
 msgstr ""
 
@@ -2653,67 +2697,76 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/create_project_form.html:8
 #: hypha/apply/funds/templates/funds/includes/unarchive_submission_form.html:5
 #: hypha/apply/funds/templates/funds/reminder_confirm_delete.html:18
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:232
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:31
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:230
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:32
 #: hypha/apply/review/templates/review/review_confirm_delete.html:18
 msgid "Confirm"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:8
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:10
 msgid "This submission is sealed"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:15
-msgid "This submission is archived."
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:22
+msgid "Back to submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:40
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:45
 msgid "Submission details"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:57
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:62
 msgid "Activity feed"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:61
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:66
 msgid "View message log"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:77
+msgid "This submission has been archived."
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:89
 msgid "Congratulations!"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:78
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:90
 #, python-format
 msgid "Your %(stage)s application has been accepted."
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:79
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:91
 #, python-format
 msgid "Start your %(stage)s application."
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:89
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:97
+#: hypha/apply/funds/templates/submissions/all.html:289
+msgid "Updated"
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:101
 #: hypha/apply/funds/templates/funds/includes/batch_delete_submission_form.html:14
 #: hypha/apply/funds/templates/funds/includes/delegated_form_base.html:33
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:38
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:47
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:67
-#: hypha/apply/projects/views/payment.py:224
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:50
+#: hypha/apply/funds/templates/submissions/all.html:446
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:48
+#: hypha/apply/projects/views/payment.py:238
 #: hypha/apply/review/templates/review/review_detail.html:34
 msgid "Delete"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:140
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:152
 msgid "Related submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:142
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:146
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:154
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:158
 msgid "View linked"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:151
+#: hypha/apply/funds/templates/funds/applicationsubmission_detail.html:163
 msgid "Past Submissions"
 msgstr ""
 
@@ -2729,16 +2782,16 @@ msgid "Editing"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:13
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:9
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:9
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:10
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:10
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:9
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:19
 #: hypha/apply/projects/templates/application_projects/project_approval_form.html:8
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:19
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:12
 #: hypha/apply/projects/templates/application_projects/report_detail.html:10
 #: hypha/apply/projects/templates/application_projects/report_form.html:14
 #: hypha/apply/projects/templates/application_projects/vendor_detail.html:10
-msgid "Back to project"
+msgid "View project page"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/applicationsubmission_simplified_detail.html:26
@@ -2755,65 +2808,65 @@ msgstr ""
 msgid "List of Submissions summary"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:9
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:11
 #: hypha/apply/funds/templates/funds/includes/unarchive_submission_form.html:3
 msgid "Unarchive Submission"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:20
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:22
 #: hypha/apply/funds/templates/funds/includes/create_project_form.html:3
 msgid "Create Project"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:26
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:28
 #: hypha/apply/funds/templates/funds/includes/screening_form.html:4
 msgid "Screen application"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:30
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:32
 msgid "Complete draft determination"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:35
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:37
 #: hypha/apply/funds/templates/funds/includes/generic_primary_actions.html:8
 msgid "Complete draft review"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:39
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:41
 msgid "Assign reviewers"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:46
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:48
 #: hypha/apply/funds/templates/funds/includes/generic_primary_actions.html:15
 msgid "View determination"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:51
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:53
 #: hypha/apply/funds/templates/funds/includes/progress_form.html:4
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:173
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:169
 msgid "Update status"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:54
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:56
 msgid "Assign"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:63
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:65
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:16
 msgid "More actions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:66
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:68
 #: hypha/apply/funds/templates/funds/includes/meta_terms_block.html:3
 msgid "Meta Terms"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:68
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:70
 #: hypha/apply/funds/templates/funds/includes/create_reminder_form.html:3
 msgid "Create Reminder"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:70
+#: hypha/apply/funds/templates/funds/includes/admin_primary_actions.html:74
 #: hypha/apply/funds/templates/funds/includes/archive_submission_form.html:3
 msgid "Archive Submission"
 msgstr ""
@@ -2837,7 +2890,8 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/batch_archive_submission_form.html:14
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:43
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:55
+#: hypha/apply/funds/templates/submissions/all.html:434
 msgid "Archive"
 msgstr ""
 
@@ -2856,13 +2910,13 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/batch_progress_form.html:3
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:59
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:66
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:41
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:277
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:60
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:67
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:60
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:316
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:28
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:167
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:171
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:175
 msgid "Update Status"
 msgstr ""
 
@@ -2873,8 +2927,9 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/update_meta_terms_form.html:4
 #: hypha/apply/funds/templates/funds/includes/update_partner_form.html:4
 #: hypha/apply/funds/templates/funds/includes/update_reviewer_form.html:4
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-reviewers.html:50
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:22
-#: hypha/apply/projects/templates/application_projects/project_detail.html:50
+#: hypha/apply/projects/templates/application_projects/project_detail.html:42
 msgid "Update"
 msgstr ""
 
@@ -2895,13 +2950,11 @@ msgid "A lead is required to create a project, select the lead below."
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/create_reminder_form.html:4
-#: hypha/apply/projects/templates/application_projects/invoice_form.html:4
-#: hypha/apply/projects/templates/application_projects/invoice_form.html:11
 msgid "Create"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/delegated_form_base.html:28
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:85
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:97
 #: hypha/apply/projects/templates/application_projects/includes/report_frequency_config.html:68
 msgid "Close"
 msgstr ""
@@ -2926,13 +2979,13 @@ msgid "You have no %(type)s rounds or labs assigned to you."
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/progress_form.html:5
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:65
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:66
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:27
 msgid "Current status"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/progress_form.html:6
-#: hypha/apply/funds/workflow.py:761
+#: hypha/apply/funds/workflow.py:776
 msgid "Progress"
 msgstr ""
 
@@ -2970,7 +3023,7 @@ msgstr ""
 #: hypha/apply/funds/templates/funds/includes/rendered_answers.html:24
 #: hypha/apply/funds/templates/funds/includes/revision_diff_table.html:11
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:53
-#: hypha/apply/projects/templates/application_projects/project_detail.html:122
+#: hypha/apply/projects/templates/application_projects/project_detail.html:114
 msgid "E-mail"
 msgstr ""
 
@@ -3018,6 +3071,10 @@ msgstr ""
 msgid "Screening options"
 msgstr ""
 
+#: hypha/apply/funds/templates/funds/includes/submission-list-item.html:23
+msgid "Archived Submission"
+msgstr ""
+
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:4
 msgid "Amounts"
 msgstr ""
@@ -3029,16 +3086,17 @@ msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:6
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:13
-#: hypha/apply/funds/workflow.py:302 hypha/apply/funds/workflow.py:456
-#: hypha/apply/funds/workflow.py:635 hypha/apply/funds/workflow.py:910
-#: hypha/apply/funds/workflow.py:1155
+#: hypha/apply/funds/workflow.py:317 hypha/apply/funds/workflow.py:471
+#: hypha/apply/funds/workflow.py:650 hypha/apply/funds/workflow.py:925
+#: hypha/apply/funds/workflow.py:1170
 msgid "Accepted"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:11
-#: hypha/apply/funds/templates/funds/submissions.html:5
+#: hypha/apply/funds/templates/funds/submissions.html:6
 #: hypha/apply/funds/templates/funds/submissions_overview.html:4
 #: hypha/apply/funds/templates/funds/submissions_overview.html:9
+#: hypha/apply/funds/templates/submissions/all.html:7
 msgid "Submissions"
 msgstr ""
 
@@ -3048,18 +3106,21 @@ msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:18
 #: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:5
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:19
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:25
 #: hypha/apply/funds/templates/funds/reviewer_leaderboard_detail.html:5
-#: hypha/apply/funds/templates/funds/staff_assignments.html:19
-#: hypha/apply/funds/templates/funds/submissions_overview.html:18
-#: hypha/apply/funds/templates/funds/submissions_result.html:17
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:110
+#: hypha/apply/funds/templates/funds/staff_assignments.html:22
+#: hypha/apply/funds/templates/funds/submissions_overview.html:28
+#: hypha/apply/funds/templates/funds/submissions_result.html:20
 #: hypha/apply/review/templates/review/review_list.html:4
 #: hypha/apply/review/templates/review/review_list.html:12
 msgid "Reviews"
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/submission_stats.html:20
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:19
+#: hypha/apply/funds/templates/funds/staff_assignments.html:16
+#: hypha/apply/funds/templates/funds/submissions_overview.html:18
+#: hypha/apply/funds/templates/funds/submissions_result.html:14
 msgid "All"
 msgstr ""
 
@@ -3071,41 +3132,46 @@ msgstr ""
 msgid "Your avg. score"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:14
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:17
+#: hypha/apply/funds/templates/funds/submissions.html:17
+msgid "Try newer version"
+msgstr ""
+
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:26
 msgid "Selected"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:54
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:66
 msgid "Hide archived"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:56
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:68
 msgid "Show archived"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:60
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:63
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:72
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:75
 msgid "Filters"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:66
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:73
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:78
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:85
 msgid "Search"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:72
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:84
 msgid "submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:73
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:85
 msgid "Search input"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:83
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:95
 msgid "Clear"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:84
+#: hypha/apply/funds/templates/funds/includes/table_filter_and_search.html:96
 msgid "Filter by"
 msgstr ""
 
@@ -3114,7 +3180,7 @@ msgid "Are you sure you want to Unarchive this submission."
 msgstr ""
 
 #: hypha/apply/funds/templates/funds/includes/update_lead_form.html:3
-#: hypha/apply/projects/templates/application_projects/project_detail.html:49
+#: hypha/apply/projects/templates/application_projects/project_detail.html:41
 msgid "Assign Lead"
 msgstr ""
 
@@ -3144,23 +3210,23 @@ msgstr ""
 msgid "Track and explore the reviews"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:16
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:22
 #: hypha/apply/funds/templates/funds/staff_assignments.html:5
 #: hypha/apply/funds/templates/funds/staff_assignments.html:10
-#: hypha/apply/funds/templates/funds/staff_assignments.html:16
-#: hypha/apply/funds/templates/funds/submissions_overview.html:15
-#: hypha/apply/funds/templates/funds/submissions_result.html:14
+#: hypha/apply/funds/templates/funds/staff_assignments.html:19
+#: hypha/apply/funds/templates/funds/submissions_overview.html:23
+#: hypha/apply/funds/templates/funds/submissions_result.html:17
 msgid "Staff assignments"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:22
-#: hypha/apply/funds/templates/funds/staff_assignments.html:22
-#: hypha/apply/funds/templates/funds/submissions_overview.html:21
-#: hypha/apply/funds/templates/funds/submissions_result.html:20
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:28
+#: hypha/apply/funds/templates/funds/staff_assignments.html:25
+#: hypha/apply/funds/templates/funds/submissions_overview.html:32
+#: hypha/apply/funds/templates/funds/submissions_result.html:23
 msgid "Results"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:30
+#: hypha/apply/funds/templates/funds/reviewer_leaderboard.html:36
 msgid "All reviewers"
 msgstr ""
 
@@ -3211,12 +3277,13 @@ msgstr ""
 msgid "View application"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions.html:9
-#: hypha/apply/funds/templates/funds/submissions_overview.html:38
+#: hypha/apply/funds/templates/funds/submissions.html:11
+#: hypha/apply/funds/templates/funds/submissions_overview.html:49
+#: hypha/apply/funds/templates/submissions/all.html:12
 msgid "All Submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions.html:10
+#: hypha/apply/funds/templates/funds/submissions.html:20
 msgid "Search and filter all submissions"
 msgstr ""
 
@@ -3228,7 +3295,7 @@ msgstr ""
 msgid "Track and explore recent submissions"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_overview.html:49
+#: hypha/apply/funds/templates/funds/submissions_overview.html:60
 #: hypha/apply/funds/templates/funds/submissions_staff_flagged.html:6
 msgid "Staff Flagged Submissions"
 msgstr ""
@@ -3242,27 +3309,27 @@ msgstr ""
 msgid "Track and explore submission results"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:29
+#: hypha/apply/funds/templates/funds/submissions_result.html:32
 msgid "Summary"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:33
+#: hypha/apply/funds/templates/funds/submissions_result.html:36
 msgid "Filter submissions to calculate values"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:36
+#: hypha/apply/funds/templates/funds/submissions_result.html:39
 msgid "Number of submission"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:37
+#: hypha/apply/funds/templates/funds/submissions_result.html:40
 msgid "Average value"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:38
+#: hypha/apply/funds/templates/funds/submissions_result.html:41
 msgid "Total value"
 msgstr ""
 
-#: hypha/apply/funds/templates/funds/submissions_result.html:41
+#: hypha/apply/funds/templates/funds/submissions_result.html:44
 msgid "Some submissions lack values and are not included."
 msgstr ""
 
@@ -3320,268 +3387,425 @@ msgstr ""
 msgid "next"
 msgstr ""
 
-#: hypha/apply/funds/views.py:246 hypha/apply/funds/views.py:278
-#: hypha/apply/funds/views.py:299 hypha/apply/funds/views.py:320
-#: hypha/apply/projects/views/project.py:316
+#: hypha/apply/funds/templates/submissions/all.html:17
+msgid "View older version"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:40
+msgid "Your assigned submissions"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:52
+msgid "Your flagged submissions"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:64
+msgid "Awaiting your review"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:84
+msgid "Search Submissions"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:304
+msgid "All statuses"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/all.html:330
+#: hypha/apply/funds/templates/submissions/submenu/change-status.html:22
+msgid "No statuses found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:10
+#, python-format
+msgid ""
+"Are you sure you want to assign \"%(user_title)s\" as lead of the selected "
+"submissions?"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:11
+#, python-format
+msgid "Assign %(user_title)s as lead."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:19
+#: hypha/apply/funds/templates/submissions/submenu/bulk-update-lead.html:23
+msgid "No lead found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/category.html:11
+msgid "All Categories"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/category.html:41
+msgid "No categories found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/category.html:45
+msgid "No categories found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/change-status.html:10
+#, python-format
+msgid ""
+"Are you sure you want to change the status of the selected submissions to "
+"\"%(value)s\"?"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/change-status.html:18
+msgid "No status found for currently selected submissions."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/funds.html:11
+msgid "All Funds &amp; Labs"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/funds.html:35
+msgid "No funds found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/funds.html:39
+msgid "No funds found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/leads.html:10
+msgid "All Leads"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/leads.html:32
+msgid "No leads found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/leads.html:36
+msgid "No leads found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/meta-terms.html:10
+msgid "All Meta Terms"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/meta-terms.html:42
+msgid "No meta terms found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/meta-terms.html:46
+msgid "No meta terms found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/reviewers.html:10
+msgid "All Reviewers"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/reviewers.html:41
+msgid "No reviewers found."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/reviewers.html:45
+msgid "No reviewers found. Sorry about that."
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/rounds.html:14
+msgid "All Rounds"
+msgstr ""
+
+#: hypha/apply/funds/templates/submissions/submenu/rounds.html:86
+msgid "No rounds available"
+msgstr ""
+
+#: hypha/apply/funds/views.py:217 hypha/apply/funds/views.py:244
+#: hypha/apply/funds/views.py:263 hypha/apply/funds/views.py:282
+#: hypha/apply/projects/views/project.py:349
 msgid "Sorry something went wrong"
 msgstr ""
 
-#: hypha/apply/funds/views.py:363
+#: hypha/apply/funds/views.py:325
 msgid "Failed to update: "
 msgstr ""
 
-#: hypha/apply/funds/views.py:604 hypha/apply/funds/views.py:607
-#: hypha/apply/funds/views.py:640 hypha/apply/funds/views.py:643
+#: hypha/apply/funds/views.py:565 hypha/apply/funds/views.py:568
+#: hypha/apply/funds/views.py:601 hypha/apply/funds/views.py:604
 msgid "No Round or Lab found matching the query"
 msgstr ""
 
-#: hypha/apply/funds/views.py:667
+#: hypha/apply/funds/views.py:628
 msgid "No statuses match the requested value"
 msgstr ""
 
-#: hypha/apply/funds/views.py:741
+#: hypha/apply/funds/views.py:702
 msgid "Project Created!"
 msgstr ""
 
-#: hypha/apply/funds/views.py:1299
+#: hypha/apply/funds/views.py:1264
 msgid "Submission saved successfully"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:215 hypha/apply/funds/workflow.py:259
-#: hypha/apply/funds/workflow.py:342 hypha/apply/funds/workflow.py:380
-#: hypha/apply/funds/workflow.py:417 hypha/apply/funds/workflow.py:497
-#: hypha/apply/funds/workflow.py:559 hypha/apply/funds/workflow.py:596
-#: hypha/apply/funds/workflow.py:676 hypha/apply/funds/workflow.py:719
-#: hypha/apply/funds/workflow.py:792 hypha/apply/funds/workflow.py:833
-#: hypha/apply/funds/workflow.py:871
+#: hypha/apply/funds/views_beta.py:40
+msgid "No screening"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:200
+msgid "Newest"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:201
+msgid "Oldest"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:202
+msgid "Most Commented"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:203
+msgid "Least Commented"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:204
+msgid "Recently Updated"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:205
+msgid "Least Recently Updated"
+msgstr ""
+
+#: hypha/apply/funds/views_beta.py:206
+msgid "Best Match"
+msgstr ""
+
+#: hypha/apply/funds/workflow.py:230 hypha/apply/funds/workflow.py:274
+#: hypha/apply/funds/workflow.py:357 hypha/apply/funds/workflow.py:395
+#: hypha/apply/funds/workflow.py:432 hypha/apply/funds/workflow.py:512
+#: hypha/apply/funds/workflow.py:574 hypha/apply/funds/workflow.py:611
+#: hypha/apply/funds/workflow.py:691 hypha/apply/funds/workflow.py:734
+#: hypha/apply/funds/workflow.py:807 hypha/apply/funds/workflow.py:848
+#: hypha/apply/funds/workflow.py:886
 msgid "Request More Information"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:216 hypha/apply/funds/workflow.py:343
-#: hypha/apply/funds/workflow.py:499 hypha/apply/funds/workflow.py:677
-#: hypha/apply/funds/workflow.py:793
+#: hypha/apply/funds/workflow.py:231 hypha/apply/funds/workflow.py:358
+#: hypha/apply/funds/workflow.py:514 hypha/apply/funds/workflow.py:692
+#: hypha/apply/funds/workflow.py:808
 msgid "Open Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:217 hypha/apply/funds/workflow.py:234
-#: hypha/apply/funds/workflow.py:260 hypha/apply/funds/workflow.py:277
-#: hypha/apply/funds/workflow.py:344 hypha/apply/funds/workflow.py:382
-#: hypha/apply/funds/workflow.py:418 hypha/apply/funds/workflow.py:501
-#: hypha/apply/funds/workflow.py:561 hypha/apply/funds/workflow.py:597
+#: hypha/apply/funds/workflow.py:232 hypha/apply/funds/workflow.py:249
+#: hypha/apply/funds/workflow.py:275 hypha/apply/funds/workflow.py:292
+#: hypha/apply/funds/workflow.py:359 hypha/apply/funds/workflow.py:397
+#: hypha/apply/funds/workflow.py:433 hypha/apply/funds/workflow.py:516
+#: hypha/apply/funds/workflow.py:576 hypha/apply/funds/workflow.py:612
 msgid "Ready For Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:218 hypha/apply/funds/workflow.py:235
-#: hypha/apply/funds/workflow.py:262 hypha/apply/funds/workflow.py:278
-#: hypha/apply/funds/workflow.py:291 hypha/apply/funds/workflow.py:420
-#: hypha/apply/funds/workflow.py:445 hypha/apply/funds/workflow.py:599
-#: hypha/apply/funds/workflow.py:624 hypha/apply/funds/workflow.py:874
-#: hypha/apply/funds/workflow.py:899
+#: hypha/apply/funds/workflow.py:233 hypha/apply/funds/workflow.py:250
+#: hypha/apply/funds/workflow.py:277 hypha/apply/funds/workflow.py:293
+#: hypha/apply/funds/workflow.py:306 hypha/apply/funds/workflow.py:435
+#: hypha/apply/funds/workflow.py:460 hypha/apply/funds/workflow.py:614
+#: hypha/apply/funds/workflow.py:639 hypha/apply/funds/workflow.py:889
+#: hypha/apply/funds/workflow.py:914
 msgid "Accept but additional info required"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:219 hypha/apply/funds/workflow.py:236
-#: hypha/apply/funds/workflow.py:263 hypha/apply/funds/workflow.py:279
-#: hypha/apply/funds/workflow.py:292 hypha/apply/funds/workflow.py:309
-#: hypha/apply/funds/workflow.py:421 hypha/apply/funds/workflow.py:446
-#: hypha/apply/funds/workflow.py:463 hypha/apply/funds/workflow.py:600
-#: hypha/apply/funds/workflow.py:625 hypha/apply/funds/workflow.py:642
-#: hypha/apply/funds/workflow.py:875 hypha/apply/funds/workflow.py:900
-#: hypha/apply/funds/workflow.py:917
+#: hypha/apply/funds/workflow.py:234 hypha/apply/funds/workflow.py:251
+#: hypha/apply/funds/workflow.py:278 hypha/apply/funds/workflow.py:294
+#: hypha/apply/funds/workflow.py:307 hypha/apply/funds/workflow.py:324
+#: hypha/apply/funds/workflow.py:436 hypha/apply/funds/workflow.py:461
+#: hypha/apply/funds/workflow.py:478 hypha/apply/funds/workflow.py:615
+#: hypha/apply/funds/workflow.py:640 hypha/apply/funds/workflow.py:657
+#: hypha/apply/funds/workflow.py:890 hypha/apply/funds/workflow.py:915
+#: hypha/apply/funds/workflow.py:932
 #: hypha/cookieconsent/templates/includes/banner.html:12
 msgid "Accept"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:220 hypha/apply/funds/workflow.py:237
-#: hypha/apply/funds/workflow.py:264 hypha/apply/funds/workflow.py:280
-#: hypha/apply/funds/workflow.py:293 hypha/apply/funds/workflow.py:345
-#: hypha/apply/funds/workflow.py:384 hypha/apply/funds/workflow.py:422
-#: hypha/apply/funds/workflow.py:447 hypha/apply/funds/workflow.py:502
-#: hypha/apply/funds/workflow.py:524 hypha/apply/funds/workflow.py:537
-#: hypha/apply/funds/workflow.py:548 hypha/apply/funds/workflow.py:563
-#: hypha/apply/funds/workflow.py:601 hypha/apply/funds/workflow.py:626
-#: hypha/apply/funds/workflow.py:680 hypha/apply/funds/workflow.py:694
-#: hypha/apply/funds/workflow.py:723 hypha/apply/funds/workflow.py:748
-#: hypha/apply/funds/workflow.py:782 hypha/apply/funds/workflow.py:796
-#: hypha/apply/funds/workflow.py:811 hypha/apply/funds/workflow.py:837
-#: hypha/apply/funds/workflow.py:876 hypha/apply/funds/workflow.py:901
+#: hypha/apply/funds/workflow.py:235 hypha/apply/funds/workflow.py:252
+#: hypha/apply/funds/workflow.py:279 hypha/apply/funds/workflow.py:295
+#: hypha/apply/funds/workflow.py:308 hypha/apply/funds/workflow.py:360
+#: hypha/apply/funds/workflow.py:399 hypha/apply/funds/workflow.py:437
+#: hypha/apply/funds/workflow.py:462 hypha/apply/funds/workflow.py:517
+#: hypha/apply/funds/workflow.py:539 hypha/apply/funds/workflow.py:552
+#: hypha/apply/funds/workflow.py:563 hypha/apply/funds/workflow.py:578
+#: hypha/apply/funds/workflow.py:616 hypha/apply/funds/workflow.py:641
+#: hypha/apply/funds/workflow.py:695 hypha/apply/funds/workflow.py:709
+#: hypha/apply/funds/workflow.py:738 hypha/apply/funds/workflow.py:763
+#: hypha/apply/funds/workflow.py:797 hypha/apply/funds/workflow.py:811
+#: hypha/apply/funds/workflow.py:826 hypha/apply/funds/workflow.py:852
+#: hypha/apply/funds/workflow.py:891 hypha/apply/funds/workflow.py:916
 msgid "Dismiss"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:222 hypha/apply/funds/workflow.py:347
-#: hypha/apply/funds/workflow.py:504 hypha/apply/funds/workflow.py:682
+#: hypha/apply/funds/workflow.py:237 hypha/apply/funds/workflow.py:362
+#: hypha/apply/funds/workflow.py:519 hypha/apply/funds/workflow.py:697
 msgid "Need screening"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:223 hypha/apply/funds/workflow.py:348
-#: hypha/apply/funds/workflow.py:505
+#: hypha/apply/funds/workflow.py:238 hypha/apply/funds/workflow.py:363
+#: hypha/apply/funds/workflow.py:520
 msgid "Application Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:239 hypha/apply/funds/workflow.py:282
-#: hypha/apply/funds/workflow.py:360 hypha/apply/funds/workflow.py:398
-#: hypha/apply/funds/workflow.py:436 hypha/apply/funds/workflow.py:517
-#: hypha/apply/funds/workflow.py:577 hypha/apply/funds/workflow.py:615
-#: hypha/apply/funds/workflow.py:698 hypha/apply/funds/workflow.py:738
-#: hypha/apply/funds/workflow.py:813 hypha/apply/funds/workflow.py:852
-#: hypha/apply/funds/workflow.py:890
+#: hypha/apply/funds/workflow.py:254 hypha/apply/funds/workflow.py:297
+#: hypha/apply/funds/workflow.py:375 hypha/apply/funds/workflow.py:413
+#: hypha/apply/funds/workflow.py:451 hypha/apply/funds/workflow.py:532
+#: hypha/apply/funds/workflow.py:592 hypha/apply/funds/workflow.py:630
+#: hypha/apply/funds/workflow.py:713 hypha/apply/funds/workflow.py:753
+#: hypha/apply/funds/workflow.py:828 hypha/apply/funds/workflow.py:867
+#: hypha/apply/funds/workflow.py:905
 msgid "More information required"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:247 hypha/apply/funds/workflow.py:368
-#: hypha/apply/funds/workflow.py:406 hypha/apply/funds/workflow.py:535
-#: hypha/apply/funds/workflow.py:546 hypha/apply/funds/workflow.py:585
-#: hypha/apply/funds/workflow.py:706 hypha/apply/funds/workflow.py:821
-#: hypha/apply/funds/workflow.py:860
+#: hypha/apply/funds/workflow.py:262 hypha/apply/funds/workflow.py:383
+#: hypha/apply/funds/workflow.py:421 hypha/apply/funds/workflow.py:550
+#: hypha/apply/funds/workflow.py:561 hypha/apply/funds/workflow.py:600
+#: hypha/apply/funds/workflow.py:721 hypha/apply/funds/workflow.py:836
+#: hypha/apply/funds/workflow.py:875
 msgid "Close Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:248 hypha/apply/funds/workflow.py:369
-#: hypha/apply/funds/workflow.py:523 hypha/apply/funds/workflow.py:536
-#: hypha/apply/funds/workflow.py:707
+#: hypha/apply/funds/workflow.py:263 hypha/apply/funds/workflow.py:384
+#: hypha/apply/funds/workflow.py:538 hypha/apply/funds/workflow.py:551
+#: hypha/apply/funds/workflow.py:722
 msgid "Need screening (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:250 hypha/apply/funds/workflow.py:371
-#: hypha/apply/funds/workflow.py:539 hypha/apply/funds/workflow.py:710
-#: hypha/apply/funds/workflow.py:824 hypha/apply/funds/workflow.py:1131
+#: hypha/apply/funds/workflow.py:265 hypha/apply/funds/workflow.py:386
+#: hypha/apply/funds/workflow.py:554 hypha/apply/funds/workflow.py:725
+#: hypha/apply/funds/workflow.py:839 hypha/apply/funds/workflow.py:1146
 msgid "Internal Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:251 hypha/apply/funds/workflow.py:372
-#: hypha/apply/funds/workflow.py:540 hypha/apply/funds/workflow.py:551
-#: hypha/apply/funds/workflow.py:711 hypha/apply/funds/workflow.py:825
+#: hypha/apply/funds/workflow.py:266 hypha/apply/funds/workflow.py:387
+#: hypha/apply/funds/workflow.py:555 hypha/apply/funds/workflow.py:566
+#: hypha/apply/funds/workflow.py:726 hypha/apply/funds/workflow.py:840
 #, python-brace-format
 msgid "{org_short_name} Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:261 hypha/apply/funds/workflow.py:721
+#: hypha/apply/funds/workflow.py:276 hypha/apply/funds/workflow.py:736
 msgid "Open Review (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:266 hypha/apply/funds/workflow.py:386
-#: hypha/apply/funds/workflow.py:424 hypha/apply/funds/workflow.py:565
-#: hypha/apply/funds/workflow.py:603 hypha/apply/funds/workflow.py:725
-#: hypha/apply/funds/workflow.py:839 hypha/apply/funds/workflow.py:878
+#: hypha/apply/funds/workflow.py:281 hypha/apply/funds/workflow.py:401
+#: hypha/apply/funds/workflow.py:439 hypha/apply/funds/workflow.py:580
+#: hypha/apply/funds/workflow.py:618 hypha/apply/funds/workflow.py:740
+#: hypha/apply/funds/workflow.py:854 hypha/apply/funds/workflow.py:893
 msgid "Ready For Discussion"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:290 hypha/apply/funds/workflow.py:310
-#: hypha/apply/funds/workflow.py:407 hypha/apply/funds/workflow.py:444
-#: hypha/apply/funds/workflow.py:464 hypha/apply/funds/workflow.py:586
-#: hypha/apply/funds/workflow.py:623 hypha/apply/funds/workflow.py:643
-#: hypha/apply/funds/workflow.py:746 hypha/apply/funds/workflow.py:861
-#: hypha/apply/funds/workflow.py:898 hypha/apply/funds/workflow.py:918
+#: hypha/apply/funds/workflow.py:305 hypha/apply/funds/workflow.py:325
+#: hypha/apply/funds/workflow.py:422 hypha/apply/funds/workflow.py:459
+#: hypha/apply/funds/workflow.py:479 hypha/apply/funds/workflow.py:601
+#: hypha/apply/funds/workflow.py:638 hypha/apply/funds/workflow.py:658
+#: hypha/apply/funds/workflow.py:761 hypha/apply/funds/workflow.py:876
+#: hypha/apply/funds/workflow.py:913 hypha/apply/funds/workflow.py:933
 msgid "Ready For Discussion (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:295 hypha/apply/funds/workflow.py:449
-#: hypha/apply/funds/workflow.py:628 hypha/apply/funds/workflow.py:1151
+#: hypha/apply/funds/workflow.py:310 hypha/apply/funds/workflow.py:464
+#: hypha/apply/funds/workflow.py:643 hypha/apply/funds/workflow.py:1166
 msgid "Ready for Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:303 hypha/apply/funds/workflow.py:457
-#: hypha/apply/funds/workflow.py:636
+#: hypha/apply/funds/workflow.py:318 hypha/apply/funds/workflow.py:472
+#: hypha/apply/funds/workflow.py:651
 msgid "Application Outcome"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:312 hypha/apply/funds/workflow.py:466
-#: hypha/apply/funds/workflow.py:645 hypha/apply/funds/workflow.py:920
+#: hypha/apply/funds/workflow.py:327 hypha/apply/funds/workflow.py:481
+#: hypha/apply/funds/workflow.py:660 hypha/apply/funds/workflow.py:935
 msgid "Accepted but additional info required"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:381 hypha/apply/funds/workflow.py:560
-#: hypha/apply/funds/workflow.py:780 hypha/apply/funds/workflow.py:794
-#: hypha/apply/funds/workflow.py:809 hypha/apply/funds/workflow.py:834
-#: hypha/apply/funds/workflow.py:850
+#: hypha/apply/funds/workflow.py:396 hypha/apply/funds/workflow.py:575
+#: hypha/apply/funds/workflow.py:795 hypha/apply/funds/workflow.py:809
+#: hypha/apply/funds/workflow.py:824 hypha/apply/funds/workflow.py:849
+#: hypha/apply/funds/workflow.py:865
 msgid "Open External Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:383 hypha/apply/funds/workflow.py:547
-#: hypha/apply/funds/workflow.py:562 hypha/apply/funds/workflow.py:836
+#: hypha/apply/funds/workflow.py:398 hypha/apply/funds/workflow.py:562
+#: hypha/apply/funds/workflow.py:577 hypha/apply/funds/workflow.py:851
 msgid "Open Internal Review (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:409 hypha/apply/funds/workflow.py:588
-#: hypha/apply/funds/workflow.py:863 hypha/apply/funds/workflow.py:1147
+#: hypha/apply/funds/workflow.py:424 hypha/apply/funds/workflow.py:603
+#: hypha/apply/funds/workflow.py:878 hypha/apply/funds/workflow.py:1162
 msgid "External Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:419 hypha/apply/funds/workflow.py:598
-#: hypha/apply/funds/workflow.py:873
+#: hypha/apply/funds/workflow.py:434 hypha/apply/funds/workflow.py:613
+#: hypha/apply/funds/workflow.py:888
 msgid "Open External Review (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:500 hypha/apply/funds/workflow.py:534
+#: hypha/apply/funds/workflow.py:515 hypha/apply/funds/workflow.py:549
 msgid "Open Community Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:550
+#: hypha/apply/funds/workflow.py:565
 msgid "Community Review"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:678 hypha/apply/funds/workflow.py:696
-#: hypha/apply/funds/workflow.py:720
+#: hypha/apply/funds/workflow.py:693 hypha/apply/funds/workflow.py:711
+#: hypha/apply/funds/workflow.py:735
 msgid "Ready For Preliminary Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:679 hypha/apply/funds/workflow.py:695
-#: hypha/apply/funds/workflow.py:708 hypha/apply/funds/workflow.py:722
-#: hypha/apply/funds/workflow.py:736 hypha/apply/funds/workflow.py:747
+#: hypha/apply/funds/workflow.py:694 hypha/apply/funds/workflow.py:710
+#: hypha/apply/funds/workflow.py:723 hypha/apply/funds/workflow.py:737
+#: hypha/apply/funds/workflow.py:751 hypha/apply/funds/workflow.py:762
 msgid "Invite to Proposal"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:683
+#: hypha/apply/funds/workflow.py:698
 msgid "Concept Note Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:750
+#: hypha/apply/funds/workflow.py:765
 msgid "Ready for Preliminary Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:757
+#: hypha/apply/funds/workflow.py:772
 msgid "Concept Accepted"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:758
+#: hypha/apply/funds/workflow.py:773
 msgid "Preliminary Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:781 hypha/apply/funds/workflow.py:795
-#: hypha/apply/funds/workflow.py:810 hypha/apply/funds/workflow.py:835
-#: hypha/apply/funds/workflow.py:872
+#: hypha/apply/funds/workflow.py:796 hypha/apply/funds/workflow.py:810
+#: hypha/apply/funds/workflow.py:825 hypha/apply/funds/workflow.py:850
+#: hypha/apply/funds/workflow.py:887
 msgid "Ready For Final Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:784 hypha/apply/funds/workflow.py:1143
+#: hypha/apply/funds/workflow.py:799 hypha/apply/funds/workflow.py:1158
 msgid "Invited for Proposal"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:798
+#: hypha/apply/funds/workflow.py:813
 msgid "Proposal Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:822
+#: hypha/apply/funds/workflow.py:837
 msgid "Proposal Received (revert)"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:903
+#: hypha/apply/funds/workflow.py:918
 msgid "Ready for Final Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:911
+#: hypha/apply/funds/workflow.py:926
 msgid "Final Determination"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:1127
+#: hypha/apply/funds/workflow.py:1142
 msgid "Received"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:1135
+#: hypha/apply/funds/workflow.py:1150
 msgid "Ready for Discussion"
 msgstr ""
 
-#: hypha/apply/funds/workflow.py:1139
+#: hypha/apply/funds/workflow.py:1154
 msgid "More Information Requested"
 msgstr ""
 
@@ -3591,63 +3815,63 @@ msgid ""
 "usages and try again!."
 msgstr ""
 
-#: hypha/apply/projects/filters.py:83
+#: hypha/apply/projects/filters.py:88
 msgid "Reporting Period"
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:91
+#: hypha/apply/projects/forms/payment.py:89
 msgid "The invoice must be a PDF."
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:95
+#: hypha/apply/projects/forms/payment.py:93
 msgid ""
 "Files that are related to the invoice. They could be xls, microsoft office "
 "documents, open office documents, pdfs, txt files."
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:114
+#: hypha/apply/projects/forms/payment.py:112
 msgid "Invoice File"
 msgstr ""
 
-#: hypha/apply/projects/forms/payment.py:165
+#: hypha/apply/projects/forms/payment.py:163
 msgid "File not found on submission"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:47
+#: hypha/apply/projects/forms/project.py:58
 msgid "Something changed before your approval please re-review"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:51
+#: hypha/apply/projects/forms/project.py:62
 msgid "The contract you were trying to approve has already been approved"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:54
+#: hypha/apply/projects/forms/project.py:65
 msgid "You can only approve a signed contract"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:69
+#: hypha/apply/projects/forms/project.py:80
 msgid "Select Project Lead"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:87
+#: hypha/apply/projects/forms/project.py:98
 msgid "Project lead is a required field"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:275
+#: hypha/apply/projects/forms/project.py:279
 msgid "A Project can only be sent for Approval when Drafted."
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:292
-#: hypha/apply/projects/forms/project.py:304
+#: hypha/apply/projects/forms/project.py:337
+#: hypha/apply/projects/forms/project.py:349
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:49
 msgid "Contract"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:312
+#: hypha/apply/projects/forms/project.py:357
 msgid "Document"
 msgstr ""
 
-#: hypha/apply/projects/forms/project.py:327
+#: hypha/apply/projects/forms/project.py:372
 msgid "Contract Document"
 msgstr ""
 
@@ -3681,128 +3905,137 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:32
+#: hypha/apply/projects/models/payment.py:31
 msgid "Resubmitted"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:33
+#: hypha/apply/projects/models/payment.py:32
 msgid "Changes Requested by Staff"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:34
+#: hypha/apply/projects/models/payment.py:33
 msgid "Changes Requested by Finance 1"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:35
+#: hypha/apply/projects/models/payment.py:34
 msgid "Changes Requested by Finance 2"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:36
+#: hypha/apply/projects/models/payment.py:35
 msgid "Approved by Staff"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:37
+#: hypha/apply/projects/models/payment.py:36
 msgid "Approved by Finance 1"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:38
+#: hypha/apply/projects/models/payment.py:37
 msgid "Approved by Finance 2"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:39
+#: hypha/apply/projects/models/payment.py:38 hypha/apply/projects/utils.py:122
 msgid "Paid"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:40
-msgid "Converted"
-msgstr ""
-
-#: hypha/apply/projects/models/payment.py:41
+#: hypha/apply/projects/models/payment.py:39 hypha/apply/projects/utils.py:120
 msgid "Declined"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:123
+#: hypha/apply/projects/models/payment.py:121
 msgid "Quantity Selected on an Invoice"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:150
+#: hypha/apply/projects/models/payment.py:148
 msgid "Message"
 msgstr ""
 
-#: hypha/apply/projects/models/payment.py:162
+#: hypha/apply/projects/models/payment.py:150
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:19
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:29
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:90
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:100
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:20
+msgid "Invoice number"
+msgstr ""
+
+#: hypha/apply/projects/models/payment.py:156
+msgid "Invoice amount"
+msgstr ""
+
+#: hypha/apply/projects/models/payment.py:168
 #, python-brace-format
 msgid "Invoice requested for {project}"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:69
-msgid "Waiting for Approval"
+#: hypha/apply/projects/models/project.py:77
+msgid "Internal approval"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:70
+#: hypha/apply/projects/models/project.py:78
 msgid "Contracting"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:71
-msgid "In Progress"
+#: hypha/apply/projects/models/project.py:79
+msgid "Invoicing and reporting"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:72
+#: hypha/apply/projects/models/project.py:80
 msgid "Closing"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:73
+#: hypha/apply/projects/models/project.py:81
 msgid "Complete"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:161
+#: hypha/apply/projects/models/project.py:169
 msgid "Proposed Start Date"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:162
+#: hypha/apply/projects/models/project.py:170
 msgid "Proposed End Date"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:291
+#: hypha/apply/projects/models/project.py:299
 msgid "Proposed End Date must be after Proposed Start Date"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:459
+#: hypha/apply/projects/models/project.py:467
 msgid "user groups"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:461
+#: hypha/apply/projects/models/project.py:469
 msgid "Only selected group's users will be listed for this PAFReviewerRole"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:492
-#: hypha/apply/projects/models/project.py:494
+#: hypha/apply/projects/models/project.py:500
+#: hypha/apply/projects/models/project.py:502
 msgid "PAF Reviewers Roles"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:513
+#: hypha/apply/projects/models/project.py:521
 #, python-brace-format
 msgid "Approval of {project} by {user}"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:546
+#: hypha/apply/projects/models/project.py:554
 msgid "Counter Signed"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:546
+#: hypha/apply/projects/models/project.py:554
 msgid "Unsigned"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:549
+#: hypha/apply/projects/models/project.py:557
 #, python-brace-format
 msgid "Contract for {project} ({state})"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:564
+#: hypha/apply/projects/models/project.py:572
 #, python-brace-format
 msgid "Project file: {title}"
 msgstr ""
 
-#: hypha/apply/projects/models/project.py:594
+#: hypha/apply/projects/models/project.py:605
 #, python-brace-format
 msgid "Contract file: {title}"
 msgstr ""
@@ -3827,7 +4060,7 @@ msgstr ""
 msgid "Months"
 msgstr ""
 
-#: hypha/apply/projects/models/report.py:195 hypha/public/partner/tables.py:21
+#: hypha/apply/projects/models/report.py:195 hypha/public/partner/tables.py:22
 msgid "Years"
 msgstr ""
 
@@ -3881,12 +4114,7 @@ msgid "Every {occurrence} weeks on {weekday}"
 msgstr ""
 
 #: hypha/apply/projects/tables.py:13
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:19
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:28
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:89
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:98
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:25
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:24
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:26
 msgid "Invoice Number"
 msgstr ""
 
@@ -3895,7 +4123,6 @@ msgid "Project Name"
 msgstr ""
 
 #: hypha/apply/projects/tables.py:67
-#: hypha/apply/projects/templates/application_projects/includes/reports.html:8
 msgid "Reporting"
 msgstr ""
 
@@ -3912,7 +4139,7 @@ msgid "to"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:6
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:138
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:126
 msgid "Contracting documents"
 msgstr ""
 
@@ -3938,72 +4165,94 @@ msgstr ""
 msgid "Approve contract documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:77
-msgid "Need corrections/amendments to contract?"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:66
+msgid "Corrections/amendments?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:92
-msgid "Signed contract by Contracting team "
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:81
+msgid "Pending signed contract by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:120
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:216
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:81
+msgid "Signed contract by "
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:81
+msgid "Contracting team "
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:89
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:108
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:160
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:205
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:190
 #: hypha/apply/templates/forms/includes/field.html:8
 msgid "Upload"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:102
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:122
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:91
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:110
 msgid "Reupload"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:112
-msgid "Countersigned contract by Applicant/Contractor "
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "Pending countersigned contract by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:145
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:149
-msgid "Upload new"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "Countersigned contract by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:148
-msgid "Upload contracting documents"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "you "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:160
-msgid "Every project should have the following documents"
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:100
+msgid "Vendor "
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:140
+msgid "Pending "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:196
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:148
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:177
+msgid "View template"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:182
 #: hypha/apply/projects/templates/application_projects/includes/deliverables_block.html:35
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:195
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:214
 msgid "Remove"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:215
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:204
 msgid "Upload Countersigned Contract"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:218
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:207
 msgid "Upload Signed Contract"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:219
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:208
 msgid "The signed contract will be sent to Applicant once you submit."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:229
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:218
+msgid "Upload contracting documents"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:227
 msgid "Approve Contract"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:230
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:228
 msgid ""
 "You confirm that the uploaded contract is acceptable for commencing the "
 "project."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:231
+#: hypha/apply/projects/templates/application_projects/includes/contracting_documents.html:229
 msgid "This cannot be undone."
 msgstr ""
 
@@ -4047,16 +4296,23 @@ msgstr ""
 msgid "Add Invoice"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:64
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:18
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:28
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:89
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:99
+msgid "Date submitted"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:65
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:26
 msgid "Update Invoice status"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:74
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:75
 msgid "No active Invoices."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/invoices.html:82
+#: hypha/apply/projects/templates/application_projects/includes/invoices.html:83
 msgid "Show rejected"
 msgstr ""
 
@@ -4106,8 +4362,9 @@ msgstr ""
 #: hypha/apply/projects/templates/application_projects/project_form.html:34
 #: hypha/apply/projects/templates/application_projects/report_form.html:45
 #: hypha/apply/projects/templates/application_projects/report_form.html:56
-#: hypha/apply/projects/views/payment.py:169
-#: hypha/apply/projects/views/payment.py:222
+#: hypha/apply/projects/views/payment.py:183
+#: hypha/apply/projects/views/payment.py:236
+#: hypha/apply/projects/views/project.py:1201
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:69
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:97
 msgid "Save"
@@ -4155,6 +4412,12 @@ msgid ""
 "any time."
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/includes/reports.html:8
+#: hypha/apply/projects/templates/application_projects/overview.html:57
+#: hypha/apply/projects/templates/application_projects/report_list.html:6
+msgid "Reports"
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/includes/reports.html:14
 msgid "Report frequency"
 msgstr ""
@@ -4193,126 +4456,141 @@ msgstr ""
 msgid "Project documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:20
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:21
 msgid "Resubmit for approval"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:22
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:23
 msgid "Submit for approval"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:32
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:258
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:35
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:281
 msgid "View/Update Approvers"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:71
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:42
+msgid "Change approver"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:51
+msgid "Assign approver"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:91
 #: hypha/apply/projects/views/vendor.py:250
 msgid "Contracting Information"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:80
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:108
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:100
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:128
 msgid "Fill in"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:99
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:119
 msgid "Approval Form"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:124
-msgid "Scope Of Work (SOW)"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:144
+msgid "Scope of work (SOW)"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:143
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:163
 msgid "Supporting documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:158
-msgid "Every project should include the following documents"
-msgstr ""
-
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:211
-msgid "Select a document"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:233
+msgid "Upload supporting documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:213
-msgid "Copy"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:242
+msgid "Submit for Approval"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:218
-msgid "Upload supporting documents"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
+msgid ""
+"Are you sure you're ready to submit the project documents to be approved in"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:227
-msgid "Submit for Approval"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:246
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:258
+msgid "sequential order?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:230
-msgid "Are you sure you're ready to submit?"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:246
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:258
+msgid "parallel order?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:232
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:248
 msgid "This project is missing the following documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:239
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:255
 msgid "Submit anyway"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:244
-msgid "Please select approvers for PAF in "
-msgstr ""
-
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:244
-msgid "sequential order"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:257
+msgid "Are you ready to submit the project documents to be approved in"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:244
-msgid "parallel order"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:263
+msgid ""
+"By default all the members are notified when an approver is not selected. "
+"Optionally, you may select specific approvers to assign and notify them."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
-msgid "(please note that in "
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:269
+msgid "Please note that in "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
-msgid "sequential order, approvers will approve PAF one after the other)"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:269
+msgid "sequential order, approvers will approve PAF one after the other."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:245
-msgid "parallel order, approvers can approve PAF anytime)"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:269
+msgid "parallel order, approvers can approve PAF anytime."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:249
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:266
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:272
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:289
 msgid "No PAF Reviewer Roles created yet, please create these in "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:250
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:267
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:273
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:290
 msgid " project settings"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:262
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:285
 msgid "Are you sure you want to update the approvers?"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:262
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:285
 msgid "The uppermost active approver will be notified via email."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:262
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:285
 msgid "All approvers will be notified via email."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:275
-msgid "Update PAF Status"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:296
+msgid "Change Approver"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:276
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:174
-msgid "Project's current status"
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:297
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:307
+msgid ""
+"Selected approver will be notified. On unselecting, every listed member here "
+"will be notified."
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:306
+msgid "Assign Approver"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/includes/supporting_documents.html:315
+msgid "Update PAF Status"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/invoice_admin_detail.html:22
@@ -4321,36 +4599,54 @@ msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:4
 #: hypha/apply/projects/templates/application_projects/invoice_detail.html:4
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:11
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:29
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:12
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:51
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:4
 #: hypha/apply/projects/templates/application_projects/invoice_form.html:11
 msgid "Invoice"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:11
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:12
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:90
 msgid "Delete Invoice"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:23
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:22
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:24
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:23
 msgid "Vendor"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:30
+#: hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html:31
 msgid "Are you sure you want to delete this invoice for"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:34
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:137
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:41
+msgid "View status history"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:43
+msgid "Hide status history"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:56
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:133
 msgid "Supporting Documents"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/invoice_detail.html:51
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:73
 msgid ""
 "Only editable when 'Submitted' or you have been requested to make changes"
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/invoice_detail.html:82
+msgid "Edit Invoice"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/invoice_form.html:4
+#: hypha/apply/projects/templates/application_projects/invoice_form.html:11
+msgid "Add"
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/invoice_list.html:11
 msgid "All Invoices"
 msgstr ""
@@ -4382,18 +4678,13 @@ msgstr ""
 msgid "Project Invoices"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/overview.html:57
-#: hypha/apply/projects/templates/application_projects/report_list.html:6
-msgid "Reports"
-msgstr ""
-
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:18
 #: hypha/apply/projects/templates/application_projects/project_admin_detail.html:21
 msgid "Update Project Status"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:34
-#: hypha/apply/projects/templates/application_projects/project_detail.html:114
+#: hypha/apply/projects/templates/application_projects/project_detail.html:106
 msgid "Project Information"
 msgstr ""
 
@@ -4425,42 +4716,54 @@ msgstr ""
 msgid "Approvals"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:105
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:101
+msgid " - Pending"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:106
 #: hypha/apply/review/templates/review/review_detail.html:10
 msgid "Review"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:107
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:108
 msgid "Submission lead"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/project_approval_detail.html:111
-msgid "Staff Reviewers"
+msgid "Staff reviewers"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:123
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:133
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:121
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:129
 msgid "No reviews"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:157
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:123
+msgid "Advisory council"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:153
 msgid "Edit PAF"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:161
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:157
 msgid "Download Approval Form"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:165
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:35
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:161
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:28
 msgid "Download as PDF"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:167
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:37
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:163
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:30
 msgid "Download as DOCX"
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/project_approval_detail.html:170
+msgid "Project's current status"
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/project_approval_form.html:79
 msgid "Approval form not configured. Please add an approval form in the"
 msgstr ""
@@ -4474,32 +4777,40 @@ msgstr ""
 msgid " This project is in %(status)s state. "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:82
+#: hypha/apply/projects/templates/application_projects/project_detail.html:74
 msgid "Details"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:117
+#: hypha/apply/projects/templates/application_projects/project_detail.html:109
 msgid "Contractor"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:159
-#: hypha/apply/projects/templates/application_projects/project_detail.html:164
+#: hypha/apply/projects/templates/application_projects/project_detail.html:151
+#: hypha/apply/projects/templates/application_projects/project_detail.html:156
 msgid "Next Step"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:179
-#: hypha/apply/projects/templates/application_projects/project_detail.html:185
+#: hypha/apply/projects/templates/application_projects/project_detail.html:171
+#: hypha/apply/projects/templates/application_projects/project_detail.html:177
 msgid "PAF Approvals"
 msgstr ""
 
 #: hypha/apply/projects/templates/application_projects/project_detail.html:188
-msgid "Approved by "
+msgid "Requested changes by "
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_detail.html:190
+#: hypha/apply/projects/templates/application_projects/project_detail.html:196
 msgid "Pending approval from "
 msgstr ""
 
+#: hypha/apply/projects/templates/application_projects/project_detail.html:196
+msgid " (nobody assigned yet)"
+msgstr ""
+
+#: hypha/apply/projects/templates/application_projects/project_detail.html:199
+msgid "Approved by "
+msgstr ""
+
 #: hypha/apply/projects/templates/application_projects/project_list.html:11
 msgid "All Projects"
 msgstr ""
@@ -4512,11 +4823,11 @@ msgstr ""
 msgid "No Projects Available."
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:31
-msgid "Download"
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:24
+msgid "Download SOW"
 msgstr ""
 
-#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:45
+#: hypha/apply/projects/templates/application_projects/project_sow_detail.html:38
 msgid "Project scope of work(SOW)"
 msgstr ""
 
@@ -4651,84 +4962,204 @@ msgstr ""
 msgid "Visit Project Detail Page"
 msgstr ""
 
-#: hypha/apply/projects/views/payment.py:63
-#: hypha/apply/projects/views/payment.py:254
+#: hypha/apply/projects/templatetags/project_tags.py:33
+msgid "Fill in the Approval Form(PAF)"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:35
+msgid "Resubmit project documents for approval"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:36
+msgid "Submit project documents for approval"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:38
+#: hypha/apply/projects/templatetags/project_tags.py:46
 #, python-brace-format
-msgid "<p>Invoice status updated to: {status}.</p>"
+msgid ""
+"Awaiting project documents to be created and approved by {org_short_name} "
+"internally. Please check back when the project has moved to contracting "
+"stage."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:42
+msgid "Changes requested. Awaiting documents to be resubmitted."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:43
+msgid "Awaiting approval form to be created."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:56
+#: hypha/apply/projects/templatetags/project_tags.py:75
+#, python-brace-format
+msgid "Awaiting approval. Assigned to {approver}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:59
+#: hypha/apply/projects/templatetags/project_tags.py:77
+#, python-brace-format
+msgid "Awaiting {reviewer_role} to assign an approver"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:68
+msgid "Awaiting PAF approval form to be approved"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:72
+msgid "Awaiting approval from other approvers teams"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:80
+msgid "Awaiting project approval from assigned approvers"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:84
+#, python-brace-format
+msgid "Awaiting signed contract from {org_short_name}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:86
+msgid "Awaiting signed contract from Contracting team"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:91
+msgid "Awaiting contract documents to be submitted by you."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:92
+msgid "Awaiting countersigned contract from Vendor"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:95
+msgid "Awaiting contract documents submission by you"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:96
+msgid "Awaiting contract documents submission from Vendor"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:99
+msgid "Review the contract for all relevant details and approve."
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:101
+#, python-brace-format
+msgid "Awaiting contract approval from {org_short_name}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:103
+msgid "Awaiting contract approval from Staff"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:106
+msgid "Add invoices"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:108
+msgid "Review invoice and take action"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:120
+#, python-brace-format
+msgid "Please download the signed contract uploaded by {org_short_name}"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:122
+msgid "Countersign"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:123
+msgid "Upload it back"
+msgstr ""
+
+#: hypha/apply/projects/templatetags/project_tags.py:124
+msgid "Please also make sure to upload other required contracting documents"
 msgstr ""
 
-#: hypha/apply/projects/views/payment.py:181
-msgid "<p>Invoice created.</p>"
+#: hypha/apply/projects/utils.py:113
+msgid "Pending Approval"
 msgstr ""
 
-#: hypha/apply/projects/views/payment.py:204
-msgid "Invoice has been uploaded"
+#: hypha/apply/projects/utils.py:118
+msgid "Request for change or more information"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:125
+#: hypha/apply/projects/views/payment.py:63
+#: hypha/apply/projects/views/payment.py:268
+#, python-brace-format
+msgid "<p>Invoice status updated to: {status}.</p>"
+msgstr ""
+
+#: hypha/apply/projects/views/payment.py:195
+msgid "<p>Invoice added.</p>"
+msgstr ""
+
+#: hypha/apply/projects/views/project.py:157
 msgid "PAF has been submitted for approval"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:148
+#: hypha/apply/projects/views/project.py:180
 msgid "Document has been uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:168
+#: hypha/apply/projects/views/project.py:200
 msgid "Document has been removed"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:192
+#: hypha/apply/projects/views/project.py:224
 msgid "Contracting document has been removed"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:263
+#: hypha/apply/projects/views/project.py:296
 msgid "Lead has been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:347
+#: hypha/apply/projects/views/project.py:380
 msgid ""
 "Contractor documents have been approved. You can receive invoices from "
-"applicant now."
+"vendor now."
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:385
+#: hypha/apply/projects/views/project.py:418
 msgid "Countersigned contract uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:388
+#: hypha/apply/projects/views/project.py:421
 msgid "Signed contract uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:433
+#: hypha/apply/projects/views/project.py:466
 msgid "Contract documents submitted"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:455
+#: hypha/apply/projects/views/project.py:493
 msgid "Contracting document has been uploaded"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:480
+#: hypha/apply/projects/views/project.py:533
 #, python-brace-format
 msgid "<p>{role} has updated PAF status to {paf_status}.</p>"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:502
+#: hypha/apply/projects/views/project.py:560
 msgid "PAF status has been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:518
+#: hypha/apply/projects/views/project.py:584
 msgid "PAF has been approved"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:590
+#: hypha/apply/projects/views/project.py:656
 msgid "Project status has been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:637
+#: hypha/apply/projects/views/project.py:770
 msgid "PAF approvers have been updated"
 msgstr ""
 
-#: hypha/apply/projects/views/project.py:1046
+#: hypha/apply/projects/views/project.py:1206
 msgid "You are not allowed to edit the project at this time"
 msgstr ""
 
@@ -4848,15 +5279,15 @@ msgstr ""
 msgid "You have already posted a review for this submission"
 msgstr ""
 
-#: hypha/apply/review/views.py:86
+#: hypha/apply/review/views.py:66
 msgid "Edit Review"
 msgstr ""
 
-#: hypha/apply/review/views.py:156
+#: hypha/apply/review/views.py:136
 msgid "Update Review draft"
 msgstr ""
 
-#: hypha/apply/review/views.py:156
+#: hypha/apply/review/views.py:136
 msgid "Create Review"
 msgstr ""
 
@@ -4995,64 +5426,90 @@ msgstr ""
 msgid "Search users"
 msgstr ""
 
-#: hypha/apply/users/forms.py:43
+#: hypha/apply/users/forms.py:41
 msgid "A user with that email already exists."
 msgstr ""
 
-#: hypha/apply/users/forms.py:44
+#: hypha/apply/users/forms.py:42
 msgid "The two password fields didn't match."
 msgstr ""
 
-#: hypha/apply/users/forms.py:62
+#: hypha/apply/users/forms.py:73
 msgid ""
 "You are registered using OAuth, please contact an admin if you need to "
 "change your email address."
 msgstr ""
 
-#: hypha/apply/users/forms.py:80
+#: hypha/apply/users/forms.py:91
 msgid "Only includes active, non-superusers"
 msgstr ""
 
-#: hypha/apply/users/forms.py:89
-#: hypha/apply/users/templates/users/account.html:34
+#: hypha/apply/users/forms.py:100
+#: hypha/apply/users/templates/users/account.html:35
 #: hypha/apply/users/templates/users/activation/email.txt:13
 msgid "Password"
 msgstr ""
 
-#: hypha/apply/users/forms.py:90
+#: hypha/apply/users/forms.py:101
 msgid "Email change requires you to put password."
 msgstr ""
 
-#: hypha/apply/users/forms.py:103 hypha/apply/users/forms.py:132
+#: hypha/apply/users/forms.py:114 hypha/apply/users/forms.py:143
 msgid "Incorrect password. Please try again."
 msgstr ""
 
-#: hypha/apply/users/forms.py:119
+#: hypha/apply/users/forms.py:130
 msgid "Please type your password to confirm"
 msgstr ""
 
-#: hypha/apply/users/models.py:179
+#: hypha/apply/users/models.py:182
 msgid "email address"
 msgstr ""
 
-#: hypha/apply/users/models.py:182
+#: hypha/apply/users/models.py:185
 msgid "Slack name"
 msgstr ""
 
-#: hypha/apply/users/models.py:184
+#: hypha/apply/users/models.py:187
 msgid "This is the name we should \"@mention\" when sending notifications"
 msgstr ""
 
+#: hypha/apply/users/models.py:304
+msgid "Show consent checkbox?"
+msgstr ""
+
+#: hypha/apply/users/models.py:308
+msgid "Login extra text"
+msgstr ""
+
+#: hypha/apply/users/models.py:309
+msgid "Displayed along side login form"
+msgstr ""
+
+#: hypha/apply/users/models.py:312
+msgid "Extra text to be displayed on register form"
+msgstr ""
+
+#: hypha/apply/users/models.py:322
+msgid "User consent on login & register forms"
+msgstr ""
+
+#: hypha/apply/users/models.py:328
+msgid "Login form customizations"
+msgstr ""
+
+#: hypha/apply/users/models.py:334
+msgid "Register form customizations"
+msgstr ""
+
 #: hypha/apply/users/templates/two_factor/_base.html:9
 #: hypha/apply/users/templates/two_factor/_base_focus.html:9
-#: hypha/apply/users/templates/users/account.html:11
+#: hypha/apply/users/templates/users/account.html:12
 msgid "Go to my dashboard"
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/_wizard_actions.html:4
-#: hypha/apply/users/templates/users/login.html:5
-#: hypha/apply/users/templates/users/login.html:6
-#: hypha/apply/users/templates/users/login.html:37
+#: hypha/apply/users/templates/users/login.html:4
 #: hypha/public/utils/templates/utils/includes/login_button.html:7
 msgid "Login"
 msgstr ""
@@ -5082,9 +5539,8 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/admin/disable.html:23
-#: hypha/apply/users/templates/users/account.html:41
+#: hypha/apply/users/templates/users/account.html:42
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:76
-#: hypha/apply/users/templates/wagtailusers/users/edit.html:78
 msgid "Disable 2FA"
 msgstr ""
 
@@ -5158,16 +5614,16 @@ msgstr ""
 
 #: hypha/apply/users/templates/two_factor/core/backup_tokens_password.html:26
 #: hypha/apply/users/templates/two_factor/profile/disable.html:22
-#: hypha/apply/users/templates/users/change_password.html:20
+#: hypha/apply/users/templates/users/change_password.html:28
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:21
-#: hypha/apply/users/templates/users/password_reset/confirm.html:20
+#: hypha/apply/users/templates/users/password_reset/confirm.html:27
 msgid "<li>Please correct the error below.</li>"
 msgid_plural "<li>Please correct the errors below.</li>"
 msgstr[0] ""
 msgstr[1] ""
 
 #: hypha/apply/users/templates/two_factor/core/setup.html:9
-#: hypha/apply/users/templates/users/account.html:37
+#: hypha/apply/users/templates/users/account.html:38
 msgid "Two-Factor Authentication (2FA)"
 msgstr ""
 
@@ -5222,12 +5678,12 @@ msgid ""
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/core/setup.html:37
-#: hypha/apply/users/templates/users/login.html:12
+#: hypha/apply/users/templates/users/login.html:14
 msgid "We are calling your phone right now, please enter the digits you hear."
 msgstr ""
 
 #: hypha/apply/users/templates/two_factor/core/setup.html:40
-#: hypha/apply/users/templates/users/login.html:15
+#: hypha/apply/users/templates/users/login.html:17
 msgid "We sent you a text message, please enter the tokens we sent."
 msgstr ""
 
@@ -5301,6 +5757,7 @@ msgstr ""
 
 #: hypha/apply/users/templates/two_factor/profile/disable.html:6
 #: hypha/apply/users/templates/two_factor/profile/profile.html:6
+#: hypha/apply/users/templates/users/change_password.html:11
 msgid "Back to account"
 msgstr ""
 
@@ -5393,32 +5850,33 @@ msgstr ""
 msgid "Account"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:19
+#: hypha/apply/users/templates/users/account.html:20
 msgid "Profile"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:25
+#: hypha/apply/users/templates/users/account.html:26
 msgid "Update Profile"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:33
+#: hypha/apply/users/templates/users/account.html:34
 msgid "Account Security"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:35
+#: hypha/apply/users/templates/users/account.html:36
+#: hypha/apply/users/templates/users/change_password.html:3
 msgid "Update password"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:40
+#: hypha/apply/users/templates/users/account.html:41
 msgid "Backup codes"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:44
+#: hypha/apply/users/templates/users/account.html:45
 msgid "Enable 2FA"
 msgstr ""
 
-#: hypha/apply/users/templates/users/account.html:52
-#: hypha/apply/users/templates/users/account.html:59
+#: hypha/apply/users/templates/users/account.html:53
+#: hypha/apply/users/templates/users/account.html:60
 msgid "Become"
 msgstr ""
 
@@ -5495,18 +5953,8 @@ msgid ""
 "fails please contact %(ORG_SHORT_NAME)s at"
 msgstr ""
 
-#: hypha/apply/users/templates/users/change_password.html:4
-#: hypha/apply/users/templates/users/change_password.html:5
-msgid "Set a password"
-msgstr ""
-
-#: hypha/apply/users/templates/users/change_password.html:34
-#: hypha/apply/users/templates/users/password_reset/complete.html:4
-#: hypha/apply/users/templates/users/password_reset/confirm.html:34
-#: hypha/apply/users/templates/users/password_reset/done.html:5
-#: hypha/apply/users/templates/users/password_reset/form.html:5
-#: hypha/apply/users/templates/users/password_reset/form.html:6
-msgid "Reset password"
+#: hypha/apply/users/templates/users/change_password.html:8
+msgid "Change Password"
 msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/confirm_email.txt:4
@@ -5526,17 +5974,16 @@ msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:4
 #: hypha/apply/users/templates/users/email_change/confirm_password.html:5
-#: hypha/apply/users/views.py:159
+#: hypha/apply/users/views.py:174
 msgid "Enter Password"
 msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/done.html:4
-#: hypha/apply/users/templates/users/password_reset/done.html:4
 msgid "Check your email"
 msgstr ""
 
 #: hypha/apply/users/templates/users/email_change/done.html:5
-#: hypha/apply/users/views.py:205
+#: hypha/apply/users/views.py:220
 msgid "Verify Email"
 msgstr ""
 
@@ -5569,45 +6016,49 @@ msgid ""
 "%(ORG_SHORT_NAME)s at"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:18
+#: hypha/apply/users/templates/users/login.html:21
 msgid ""
 "Please enter the 6-digit verification code generated by your Authenticator "
 "App."
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:21
+#: hypha/apply/users/templates/users/login.html:24
 msgid ""
 "Please enter one of the backup codes to login to your account. Those codes "
 "were generated for you during 2FA setup to print or keep safe in a password "
 "manager."
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:33
+#: hypha/apply/users/templates/users/login.html:54
+#, python-format
+msgid "Log in with your %(ORG_SHORT_NAME)s email"
+msgstr ""
+
+#: hypha/apply/users/templates/users/login.html:60
+msgid "Create account"
+msgstr ""
+
+#: hypha/apply/users/templates/users/login.html:62
 msgid "Forgot your password?"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:45
+#: hypha/apply/users/templates/users/login.html:71
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:55
+#: hypha/apply/users/templates/users/login.html:86
 msgid "As a last resort, you can use a backup codes:"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:57
+#: hypha/apply/users/templates/users/login.html:88
 msgid "Use Backup Code"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:69
-#, python-format
-msgid "Log in with your %(ORG_SHORT_NAME)s email"
-msgstr ""
-
-#: hypha/apply/users/templates/users/login.html:76
+#: hypha/apply/users/templates/users/login.html:101
 msgid "Verification Code"
 msgstr ""
 
-#: hypha/apply/users/templates/users/login.html:80
+#: hypha/apply/users/templates/users/login.html:105
 msgid "Backup Code"
 msgstr ""
 
@@ -5623,28 +6074,48 @@ msgstr ""
 msgid "Available providers"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/complete.html:5
-msgid "Password change successful"
+#: hypha/apply/users/templates/users/password_reset/complete.html:3
+#: hypha/apply/users/templates/users/password_reset/form.html:4
+msgid "Reset password"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/complete.html:10
-msgid "Log in"
+#: hypha/apply/users/templates/users/password_reset/complete.html:8
+msgid "Password change successful"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/confirm.html:8
+#: hypha/apply/users/templates/users/password_reset/confirm.html:12
 msgid ""
 "Please enter your new password twice so we can verify you typed it in "
 "correctly."
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/confirm.html:37
+#: hypha/apply/users/templates/users/password_reset/confirm.html:39
+msgid "Reset"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/confirm.html:42
 msgid ""
 "The password reset link was invalid, possibly because it has already been "
 "used.  Please request a new password reset."
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/done.html:9
-msgid "A link to reset your password has been emailed to you."
+#: hypha/apply/users/templates/users/password_reset/done.html:4
+msgid "Password Reset"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/done.html:12
+msgid "Check your inbox for a password reset email!"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/done.html:15
+msgid ""
+"We have sent an email to you with a password recovery link, open the link in "
+"the email to change your password."
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/done.html:18
+#: hypha/apply/users/templates/users/register-success.html:30
+msgid "Check your \"Spam\" folder, if you don't find the email in your inbox."
 msgstr ""
 
 #: hypha/apply/users/templates/users/password_reset/email.txt:2
@@ -5655,22 +6126,48 @@ msgstr ""
 msgid "Your username (in case you've forgotten):"
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/form.html:21
+#: hypha/apply/users/templates/users/password_reset/form.html:22
+msgid "Forgot password?"
+msgstr ""
+
+#: hypha/apply/users/templates/users/password_reset/form.html:23
 msgid ""
-"Forgot or want to change your password? Please enter your user account's "
-"email address and we will send you a password reset link."
+"Please enter your user account's email address and we will send you a "
+"password reset link."
 msgstr ""
 
-#: hypha/apply/users/templates/users/password_reset/form.html:26
-msgid "Send password reset email"
+#: hypha/apply/users/templates/users/password_reset/form.html:28
+msgid "Send reset email"
 msgstr ""
 
-#: hypha/apply/users/templates/users/register.html:5
-#: hypha/apply/users/templates/users/register.html:6
-#: hypha/apply/users/templates/users/register.html:22
+#: hypha/apply/users/templates/users/register-success.html:4
+#: hypha/apply/users/templates/users/register.html:4
+#: hypha/public/utils/templates/utils/includes/register_button.html:3
 msgid "Register"
 msgstr ""
 
+#: hypha/apply/users/templates/users/register-success.html:18
+msgid "Hi "
+msgstr ""
+
+#: hypha/apply/users/templates/users/register-success.html:20
+msgid "your account"
+msgstr ""
+
+#: hypha/apply/users/templates/users/register-success.html:23
+msgid "with the email"
+msgstr ""
+
+#: hypha/apply/users/templates/users/register-success.html:26
+msgid ""
+"has been successfully created! We have sent you an account activatation "
+"email."
+msgstr ""
+
+#: hypha/apply/users/templates/users/register.html:29
+msgid "Already have an account?"
+msgstr ""
+
 #: hypha/apply/users/templates/wagtailusers/users/edit.html:23
 msgid "Roles"
 msgstr ""
@@ -5684,6 +6181,10 @@ msgstr ""
 msgid "This account do not have 2FA enabled."
 msgstr ""
 
+#: hypha/apply/users/templates/wagtailusers/users/edit.html:78
+msgid "2FA already disabled"
+msgstr ""
+
 #: hypha/apply/users/templates/wagtailusers/users/results.html:7
 #, python-format
 msgid "There is %(counter)s match"
@@ -5722,15 +6223,15 @@ msgstr ""
 msgid "Email is already in use."
 msgstr ""
 
-#: hypha/apply/users/views.py:190
+#: hypha/apply/users/views.py:205
 msgid "Password Page timed out. Try changing the email again."
 msgstr ""
 
-#: hypha/apply/users/views.py:211
+#: hypha/apply/users/views.py:226
 msgid "Hijack feature is not enabled."
 msgstr ""
 
-#: hypha/apply/users/views.py:243
+#: hypha/apply/users/views.py:258
 #, python-brace-format
 msgid "Your email has been successfully updated to {email}!"
 msgstr ""
@@ -5751,7 +6252,7 @@ msgstr ""
 msgid "Page size of downloadable Project and Submission PDFs"
 msgstr ""
 
-#: hypha/apply/utils/views.py:260
+#: hypha/apply/utils/views.py:265
 #, python-brace-format
 msgid "Page '{0}' can't be deleted because is in use in '{1}'."
 msgstr ""
@@ -5861,7 +6362,7 @@ msgstr ""
 msgid "The title of the newsletter signup form."
 msgstr ""
 
-#: hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html:17
+#: hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html:16
 msgid "Sign up"
 msgstr ""
 
@@ -5930,48 +6431,48 @@ msgid ""
 "name."
 msgstr ""
 
-#: hypha/public/partner/models.py:49
+#: hypha/public/partner/models.py:50
 msgid "Partner Page"
 msgstr ""
 
-#: hypha/public/partner/models.py:120
+#: hypha/public/partner/models.py:121
 msgid "Investment Category Settings"
 msgstr ""
 
-#: hypha/public/partner/models.py:124
+#: hypha/public/partner/models.py:125
 msgid "Select the categories that should be used in investments."
 msgstr ""
 
-#: hypha/public/partner/models.py:198
+#: hypha/public/partner/models.py:199
 msgid "Use format: <YYYY>"
 msgstr ""
 
-#: hypha/public/partner/models.py:204 hypha/public/partner/tables.py:47
+#: hypha/public/partner/models.py:205 hypha/public/partner/tables.py:48
 #, python-brace-format
 msgid "Amount Committed ({currency})"
 msgstr ""
 
-#: hypha/public/partner/tables.py:55
+#: hypha/public/partner/tables.py:58
 msgid "Items per page"
 msgstr ""
 
-#: hypha/public/partner/tables.py:56
+#: hypha/public/partner/tables.py:59
 msgid "Per page"
 msgstr ""
 
-#: hypha/public/partner/tables.py:95
+#: hypha/public/partner/tables.py:98
 msgid "Partner"
 msgstr ""
 
-#: hypha/public/partner/tables.py:96
+#: hypha/public/partner/tables.py:99
 msgid "Year"
 msgstr ""
 
-#: hypha/public/partner/tables.py:98
+#: hypha/public/partner/tables.py:101
 msgid "Amount Committed"
 msgstr ""
 
-#: hypha/public/partner/tables.py:111
+#: hypha/public/partner/tables.py:114
 msgid "No investments available"
 msgstr ""
 
@@ -6015,65 +6516,65 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: hypha/public/utils/models.py:125
+#: hypha/public/utils/models.py:129
 msgid ""
 "Choose the image you wish to be displayed when this page appears in listings"
 msgstr ""
 
-#: hypha/public/utils/models.py:127
+#: hypha/public/utils/models.py:131
 msgid "Override the page title used when this page appears in listings"
 msgstr ""
 
-#: hypha/public/utils/models.py:128
+#: hypha/public/utils/models.py:132
 msgid ""
 "The text summary used when this page appears in listings. It's also used as "
 "the description for search engines if the 'Search description' field above "
 "is not defined."
 msgstr ""
 
-#: hypha/public/utils/models.py:206
+#: hypha/public/utils/models.py:210
 msgid "Your Twitter username without the @, e.g. katyperry"
 msgstr ""
 
-#: hypha/public/utils/models.py:211
+#: hypha/public/utils/models.py:215
 msgid "Your Facebook app ID."
 msgstr ""
 
-#: hypha/public/utils/models.py:216
+#: hypha/public/utils/models.py:220
 msgid "Default sharing text to use if social text has not been set on a page."
 msgstr ""
 
-#: hypha/public/utils/models.py:222
+#: hypha/public/utils/models.py:226
 msgid "Site name, used by Open Graph."
 msgstr ""
 
-#: hypha/public/utils/models.py:240
+#: hypha/public/utils/models.py:244
 msgid "Default site logo"
 msgstr ""
 
-#: hypha/public/utils/models.py:249
+#: hypha/public/utils/models.py:253
 msgid "Mobil site logo (if not set default will be used)"
 msgstr ""
 
-#: hypha/public/utils/models.py:255
+#: hypha/public/utils/models.py:259
 msgid ""
 "Link for the site logo, e.g. \"https://www.example.org/\". If not set, "
 "defaults to page with slug set to \"home\"."
 msgstr ""
 
-#: hypha/public/utils/models.py:261
+#: hypha/public/utils/models.py:265
 msgid "This will be added to the footer, html tags is allowed."
 msgstr ""
 
-#: hypha/public/utils/models.py:321
+#: hypha/public/utils/models.py:325
 msgid "In months"
 msgstr ""
 
-#: hypha/public/utils/models.py:347
+#: hypha/public/utils/models.py:351
 msgid "Funding"
 msgstr ""
 
-#: hypha/templates/base-apply.html:111 hypha/templates/base-apply.html:135
+#: hypha/templates/base-apply.html:134 hypha/templates/base-apply.html:160
 msgid "Log out"
 msgstr ""
 
diff --git a/hypha/public/forms/apps.py b/hypha/public/forms/apps.py
index 00de0850bf451d39b5670231a4b6172585d8e493..14cd0e8917095a8f9b6f18ae6431bb228c7974dc 100644
--- a/hypha/public/forms/apps.py
+++ b/hypha/public/forms/apps.py
@@ -2,5 +2,5 @@ from django.apps import AppConfig
 
 
 class FormsConfig(AppConfig):
-    name = 'hypha.public.forms'
-    label = 'public_forms'
+    name = "hypha.public.forms"
+    label = "public_forms"
diff --git a/hypha/public/forms/migrations/0001_initial.py b/hypha/public/forms/migrations/0001_initial.py
index 996cd890214b0b1cd8031064cc8b12dc80e93047..ff91ec2a9d085cf3fa4e6b1d380b9424cd60c1bd 100644
--- a/hypha/public/forms/migrations/0001_initial.py
+++ b/hypha/public/forms/migrations/0001_initial.py
@@ -7,56 +7,191 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('images', '0003_customimage_drupal_id'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("images", "0003_customimage_drupal_id"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='FormField',
+            name="FormField",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('label', models.CharField(help_text='The label of the form field', max_length=255, verbose_name='label')),
-                ('field_type', models.CharField(choices=[('singleline', 'Single line text'), ('multiline', 'Multi-line text'), ('email', 'Email'), ('number', 'Number'), ('url', 'URL'), ('checkbox', 'Checkbox'), ('checkboxes', 'Checkboxes'), ('dropdown', 'Drop down'), ('multiselect', 'Multiple select'), ('radio', 'Radio buttons'), ('date', 'Date'), ('datetime', 'Date/time'), ('hidden', 'Hidden field')], max_length=16, verbose_name='field type')),
-                ('required', models.BooleanField(default=True, verbose_name='required')),
-                ('choices', models.TextField(blank=True, help_text='Comma separated list of choices. Only applicable in checkboxes, radio and dropdown.', verbose_name='choices')),
-                ('default_value', models.CharField(blank=True, help_text='Default value. Comma separated values supported for checkboxes.', max_length=255, verbose_name='default value')),
-                ('help_text', models.CharField(blank=True, max_length=255, verbose_name='help text')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "label",
+                    models.CharField(
+                        help_text="The label of the form field",
+                        max_length=255,
+                        verbose_name="label",
+                    ),
+                ),
+                (
+                    "field_type",
+                    models.CharField(
+                        choices=[
+                            ("singleline", "Single line text"),
+                            ("multiline", "Multi-line text"),
+                            ("email", "Email"),
+                            ("number", "Number"),
+                            ("url", "URL"),
+                            ("checkbox", "Checkbox"),
+                            ("checkboxes", "Checkboxes"),
+                            ("dropdown", "Drop down"),
+                            ("multiselect", "Multiple select"),
+                            ("radio", "Radio buttons"),
+                            ("date", "Date"),
+                            ("datetime", "Date/time"),
+                            ("hidden", "Hidden field"),
+                        ],
+                        max_length=16,
+                        verbose_name="field type",
+                    ),
+                ),
+                (
+                    "required",
+                    models.BooleanField(default=True, verbose_name="required"),
+                ),
+                (
+                    "choices",
+                    models.TextField(
+                        blank=True,
+                        help_text="Comma separated list of choices. Only applicable in checkboxes, radio and dropdown.",
+                        verbose_name="choices",
+                    ),
+                ),
+                (
+                    "default_value",
+                    models.CharField(
+                        blank=True,
+                        help_text="Default value. Comma separated values supported for checkboxes.",
+                        max_length=255,
+                        verbose_name="default value",
+                    ),
+                ),
+                (
+                    "help_text",
+                    models.CharField(
+                        blank=True, max_length=255, verbose_name="help text"
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='FormPage',
+            name="FormPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('to_address', models.CharField(blank=True, help_text='Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.', max_length=255, verbose_name='to address')),
-                ('from_address', models.CharField(blank=True, max_length=255, verbose_name='from address')),
-                ('subject', models.CharField(blank=True, max_length=255, verbose_name='subject')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('intro', wagtail.fields.RichTextField(blank=True)),
-                ('thank_you_text', wagtail.fields.RichTextField(blank=True)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "to_address",
+                    models.CharField(
+                        blank=True,
+                        help_text="Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.",
+                        max_length=255,
+                        verbose_name="to address",
+                    ),
+                ),
+                (
+                    "from_address",
+                    models.CharField(
+                        blank=True, max_length=255, verbose_name="from address"
+                    ),
+                ),
+                (
+                    "subject",
+                    models.CharField(
+                        blank=True, max_length=255, verbose_name="subject"
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("intro", wagtail.fields.RichTextField(blank=True)),
+                ("thank_you_text", wagtail.fields.RichTextField(blank=True)),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.AddField(
-            model_name='formfield',
-            name='page',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='form_fields', to='public_forms.FormPage'),
+            model_name="formfield",
+            name="page",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="form_fields",
+                to="public_forms.FormPage",
+            ),
         ),
     ]
diff --git a/hypha/public/forms/migrations/0002_add_document_choice.py b/hypha/public/forms/migrations/0002_add_document_choice.py
index fc99f0ea03d6218f0a25a3ca7b3f826f2f82aa28..391f58ceab83cd56c8cc3ad0db2aab0e9c5a78cd 100644
--- a/hypha/public/forms/migrations/0002_add_document_choice.py
+++ b/hypha/public/forms/migrations/0002_add_document_choice.py
@@ -4,15 +4,33 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_forms', '0001_initial'),
+        ("public_forms", "0001_initial"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='formfield',
-            name='field_type',
-            field=models.CharField(choices=[('singleline', 'Single line text'), ('multiline', 'Multi-line text'), ('email', 'Email'), ('number', 'Number'), ('url', 'URL'), ('checkbox', 'Checkbox'), ('checkboxes', 'Checkboxes'), ('dropdown', 'Drop down'), ('multiselect', 'Multiple select'), ('radio', 'Radio buttons'), ('date', 'Date'), ('datetime', 'Date/time'), ('hidden', 'Hidden field'), ('document', 'Upload Document')], max_length=16, verbose_name='field type'),
+            model_name="formfield",
+            name="field_type",
+            field=models.CharField(
+                choices=[
+                    ("singleline", "Single line text"),
+                    ("multiline", "Multi-line text"),
+                    ("email", "Email"),
+                    ("number", "Number"),
+                    ("url", "URL"),
+                    ("checkbox", "Checkbox"),
+                    ("checkboxes", "Checkboxes"),
+                    ("dropdown", "Drop down"),
+                    ("multiselect", "Multiple select"),
+                    ("radio", "Radio buttons"),
+                    ("date", "Date"),
+                    ("datetime", "Date/time"),
+                    ("hidden", "Hidden field"),
+                    ("document", "Upload Document"),
+                ],
+                max_length=16,
+                verbose_name="field type",
+            ),
         ),
     ]
diff --git a/hypha/public/forms/migrations/0003_formfield_clean_name.py b/hypha/public/forms/migrations/0003_formfield_clean_name.py
index 9dd32908a714c0da0ee2c43dbb5bb7e5bf3d872b..39506b2c2a79764d25944d19d177c09b580fee55 100644
--- a/hypha/public/forms/migrations/0003_formfield_clean_name.py
+++ b/hypha/public/forms/migrations/0003_formfield_clean_name.py
@@ -4,15 +4,20 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_forms', '0002_add_document_choice'),
+        ("public_forms", "0002_add_document_choice"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='formfield',
-            name='clean_name',
-            field=models.CharField(blank=True, default='', help_text='Safe name of the form field, the label converted to ascii_snake_case', max_length=255, verbose_name='name'),
+            model_name="formfield",
+            name="clean_name",
+            field=models.CharField(
+                blank=True,
+                default="",
+                help_text="Safe name of the form field, the label converted to ascii_snake_case",
+                max_length=255,
+                verbose_name="name",
+            ),
         ),
     ]
diff --git a/hypha/public/forms/migrations/0004_auto_20220722_0844.py b/hypha/public/forms/migrations/0004_auto_20220722_0844.py
index 89376f4a6c555d3c9a0745f3c58326026f3013f0..b211ce5934bc5bb38501352c3cbf76959f58cddd 100644
--- a/hypha/public/forms/migrations/0004_auto_20220722_0844.py
+++ b/hypha/public/forms/migrations/0004_auto_20220722_0844.py
@@ -5,30 +5,45 @@ import wagtail.contrib.forms.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_forms', '0003_formfield_clean_name'),
+        ("public_forms", "0003_formfield_clean_name"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='formfield',
-            name='choices',
-            field=models.TextField(blank=True, help_text='Comma or new line separated list of choices. Only applicable in checkboxes, radio and dropdown.', verbose_name='choices'),
+            model_name="formfield",
+            name="choices",
+            field=models.TextField(
+                blank=True,
+                help_text="Comma or new line separated list of choices. Only applicable in checkboxes, radio and dropdown.",
+                verbose_name="choices",
+            ),
         ),
         migrations.AlterField(
-            model_name='formfield',
-            name='default_value',
-            field=models.TextField(blank=True, help_text='Default value. Comma or new line separated values supported for checkboxes.', verbose_name='default value'),
+            model_name="formfield",
+            name="default_value",
+            field=models.TextField(
+                blank=True,
+                help_text="Default value. Comma or new line separated values supported for checkboxes.",
+                verbose_name="default value",
+            ),
         ),
         migrations.AlterField(
-            model_name='formpage',
-            name='from_address',
-            field=models.EmailField(blank=True, max_length=255, verbose_name='from address'),
+            model_name="formpage",
+            name="from_address",
+            field=models.EmailField(
+                blank=True, max_length=255, verbose_name="from address"
+            ),
         ),
         migrations.AlterField(
-            model_name='formpage',
-            name='to_address',
-            field=models.CharField(blank=True, help_text='Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.', max_length=255, validators=[wagtail.contrib.forms.models.validate_to_address], verbose_name='to address'),
+            model_name="formpage",
+            name="to_address",
+            field=models.CharField(
+                blank=True,
+                help_text="Optional - form submissions will be emailed to these addresses. Separate multiple addresses by comma.",
+                max_length=255,
+                validators=[wagtail.contrib.forms.models.validate_to_address],
+                verbose_name="to address",
+            ),
         ),
     ]
diff --git a/hypha/public/forms/models.py b/hypha/public/forms/models.py
index 7c85d556da5e50a447d173947501ee46186e8adf..463907b6716b5c37061b8357419413ef1a8df943 100644
--- a/hypha/public/forms/models.py
+++ b/hypha/public/forms/models.py
@@ -22,22 +22,23 @@ from wagtail.search import index
 
 from hypha.public.utils.models import BasePage
 
-webform_storage = get_storage_class(getattr(settings, 'PRIVATE_FILE_STORAGE', None))()
+webform_storage = get_storage_class(getattr(settings, "PRIVATE_FILE_STORAGE", None))()
 
 
 class FormField(AbstractFormField):
-    FORM_FIELD_CHOICES = FORM_FIELD_CHOICES + (('document', 'Upload Document'),)
+    FORM_FIELD_CHOICES = FORM_FIELD_CHOICES + (("document", "Upload Document"),)
     field_type = models.CharField(
-        verbose_name=_('field type'),
-        max_length=16,
-        choices=FORM_FIELD_CHOICES
+        verbose_name=_("field type"), max_length=16, choices=FORM_FIELD_CHOICES
     )
-    page = ParentalKey('FormPage', on_delete=models.CASCADE, related_name='form_fields')
+    page = ParentalKey("FormPage", on_delete=models.CASCADE, related_name="form_fields")
 
 
 class ExtendedFormBuilder(FormBuilder):
     def create_document_field(self, field, options):
-        return FileField(widget=FileInput(attrs={'accept': settings.FILE_ACCEPT_ATTR_VALUE}), **options)
+        return FileField(
+            widget=FileInput(attrs={"accept": settings.FILE_ACCEPT_ATTR_VALUE}),
+            **options,
+        )
 
     def clean(self):
         cleaned_data = self.cleaned_data
@@ -46,14 +47,17 @@ class ExtendedFormBuilder(FormBuilder):
                 file_data = cleaned_data[name]
                 if file_data:
                     file_name = file_data.name
-                    file_extension = file_name.split('.')[-1]
+                    file_extension = file_name.split(".")[-1]
                     if file_extension not in settings.FILE_ALLOWED_EXTENSIONS:
-                        self.add_error(name, f"File extension '{file_extension}' is not allowed. "
-                                             f"Allowed extensions are: '{', '.join(settings.FILE_ALLOWED_EXTENSIONS)}'")
+                        self.add_error(
+                            name,
+                            f"File extension '{file_extension}' is not allowed. "
+                            f"Allowed extensions are: '{', '.join(settings.FILE_ALLOWED_EXTENSIONS)}'",
+                        )
         return self.cleaned_data
 
 
-@method_decorator(never_cache, name='serve')
+@method_decorator(never_cache, name="serve")
 class FormPage(AbstractEmailForm, BasePage):
     form_builder = ExtendedFormBuilder
     subpage_types = []
@@ -62,20 +66,25 @@ class FormPage(AbstractEmailForm, BasePage):
     thank_you_text = RichTextField(blank=True)
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('intro'),
+        index.SearchField("intro"),
     ]
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('intro', classname="full"),
-        InlinePanel('form_fields', label=_('Form fields')),
-        FieldPanel('thank_you_text', classname="full"),
-        MultiFieldPanel([
-            FieldRowPanel([
-                FieldPanel('from_address', classname="col6"),
-                FieldPanel('to_address', classname="col6"),
-            ]),
-            FieldPanel('subject'),
-        ], "Email"),
+        FieldPanel("intro", classname="full"),
+        InlinePanel("form_fields", label=_("Form fields")),
+        FieldPanel("thank_you_text", classname="full"),
+        MultiFieldPanel(
+            [
+                FieldRowPanel(
+                    [
+                        FieldPanel("from_address", classname="col6"),
+                        FieldPanel("to_address", classname="col6"),
+                    ]
+                ),
+                FieldPanel("subject"),
+            ],
+            "Email",
+        ),
     ]
 
     def get_form(self, *args, **kwargs):
@@ -92,7 +101,7 @@ class FormPage(AbstractEmailForm, BasePage):
                 if file_data:
                     file_name = file_data.name
                     file_name = webform_storage.generate_filename(file_name)
-                    upload_to = os.path.join('webform', str(self.id), file_name)
+                    upload_to = os.path.join("webform", str(self.id), file_name)
                     saved_file_name = webform_storage.save(upload_to, file_data)
                     file_details_dict = {name: webform_storage.url(saved_file_name)}
                     cleaned_data.update(file_details_dict)
diff --git a/hypha/public/forms/templates/public_forms/form_page.html b/hypha/public/forms/templates/public_forms/form_page.html
index fde5b196505ad9e306cb9bca5387edb96c5f641a..8bdc10ee9b8516e28673ffe759fbb9be14683cfe 100644
--- a/hypha/public/forms/templates/public_forms/form_page.html
+++ b/hypha/public/forms/templates/public_forms/form_page.html
@@ -2,23 +2,23 @@
 {% load static wagtailcore_tags %}
 
 {% block content %}
-<div class="wrapper wrapper--medium wrapper--light-grey-bg wrapper--form">
-    <h1>{{ page.title }}</h1>
-    <div class="rich-text">{{ page.intro|richtext }}</div>
-    <form class="form wagtail-form" action="#" data-actionpath="{% pageurl page %}" method="post" enctype="multipart/form-data">
-        {% csrf_token %}
-        {{ form.media }}
-        {% for field in form %}
-            {% if field.field %}
-                {% include "forms/includes/field.html" %}
-            {% else %}
-                {{ field }}
-            {% endif %}
-        {% endfor %}
-        <button class="link link--button-secondary" type="submit" disabled>Submit</button>
-    </form>
-    <p class="wrapper--error message-no-js js-hidden">You must have Javascript enabled to use this form.</p>
-</div>
+    <div class="wrapper wrapper--medium wrapper--light-grey-bg wrapper--form">
+        <h1>{{ page.title }}</h1>
+        <div class="rich-text">{{ page.intro|richtext }}</div>
+        <form class="form wagtail-form" action="#" data-actionpath="{% pageurl page %}" method="post" enctype="multipart/form-data">
+            {% csrf_token %}
+            {{ form.media }}
+            {% for field in form %}
+                {% if field.field %}
+                    {% include "forms/includes/field.html" %}
+                {% else %}
+                    {{ field }}
+                {% endif %}
+            {% endfor %}
+            <button class="link link--button-secondary" type="submit" disabled>Submit</button>
+        </form>
+        <p class="wrapper--error message-no-js js-hidden">You must have Javascript enabled to use this form.</p>
+    </div>
 {% endblock %}
 
 {% block extra_js %}
diff --git a/hypha/public/forms/templates/public_forms/form_page_landing.html b/hypha/public/forms/templates/public_forms/form_page_landing.html
index 1ab1bcfd8255ecd77cdae43b4600896c2066d65f..e9740878d089b07c290f417c5d8c5144bb6cd1ba 100644
--- a/hypha/public/forms/templates/public_forms/form_page_landing.html
+++ b/hypha/public/forms/templates/public_forms/form_page_landing.html
@@ -2,10 +2,10 @@
 {% load wagtailcore_tags %}
 
 {% block content %}
-<div class="wrapper wrapper--medium wrapper--light-grey-bg wrapper--form">
-    <div class="wrapper--sidebar--inner">
-        <h1>Thank you</h1>
-        <div class="rich-text">{{ page.thank_you_text|richtext }}</div>
+    <div class="wrapper wrapper--medium wrapper--light-grey-bg wrapper--form">
+        <div class="wrapper--sidebar--inner">
+            <h1>Thank you</h1>
+            <div class="rich-text">{{ page.thank_you_text|richtext }}</div>
+        </div>
     </div>
-</div>
 {% endblock %}
diff --git a/hypha/public/forms/wagtail_hooks.py b/hypha/public/forms/wagtail_hooks.py
index b384db47b0f5a1c1771b5ef19c6202d48391349c..8fa930841a27ba9952049dcd485843a020c79d8e 100644
--- a/hypha/public/forms/wagtail_hooks.py
+++ b/hypha/public/forms/wagtail_hooks.py
@@ -4,7 +4,7 @@ from wagtail import hooks
 from hypha.public.forms.models import FormPage
 
 
-@hooks.register('filter_form_submissions_for_user')
+@hooks.register("filter_form_submissions_for_user")
 def construct_from_wagtail_forms(user, queryset):
     """only show wagtail forms (hiding all the ones created from the apply app)."""
 
diff --git a/hypha/public/funds/apps.py b/hypha/public/funds/apps.py
index a2e9fe6202a8553c917e8d4306f9e958324b0b16..64eead8a091b5761fac2592c84fc8021449cb673 100644
--- a/hypha/public/funds/apps.py
+++ b/hypha/public/funds/apps.py
@@ -2,5 +2,5 @@ from django.apps import AppConfig
 
 
 class FundsConfig(AppConfig):
-    name = 'hypha.public.funds'
-    label = 'public_funds'
+    name = "hypha.public.funds"
+    label = "public_funds"
diff --git a/hypha/public/funds/blocks.py b/hypha/public/funds/blocks.py
index cfabd7139f704a8f85d7dcf59358b27191ca5fd2..18ddc2a7b1f0e79e2fddef16532b6d918af5f5df 100644
--- a/hypha/public/funds/blocks.py
+++ b/hypha/public/funds/blocks.py
@@ -5,18 +5,18 @@ from hypha.public.utils.blocks import StoryBlock
 
 class ProjectsBlock(StaticBlock):
     class Meta:
-        icon = 'grip'
-        label = 'List of Projects funded'
-        admin_text = f'{label}: Will include the list of projects under this fund.'
-        template = 'public_funds/blocks/related_projects.html'
+        icon = "grip"
+        label = "List of Projects funded"
+        admin_text = f"{label}: Will include the list of projects under this fund."
+        template = "public_funds/blocks/related_projects.html"
 
 
 class ReviewersBlock(StaticBlock):
     class Meta:
-        icon = 'grip'
-        label = 'List of fund Reviewers'
-        admin_text = f'{label}: Will include the list of reviewers for this fund.'
-        template = 'public_funds/blocks/related_reviewers.html'
+        icon = "grip"
+        label = "List of fund Reviewers"
+        admin_text = f"{label}: Will include the list of reviewers for this fund."
+        template = "public_funds/blocks/related_reviewers.html"
 
 
 class FundBlock(StoryBlock):
diff --git a/hypha/public/funds/migrations/0001_initial.py b/hypha/public/funds/migrations/0001_initial.py
index e044c6d018d3a142a2f6d49158a050cf22a24ce0..19dd2e24fee141019391e9c11295ba4c7f4c87e9 100644
--- a/hypha/public/funds/migrations/0001_initial.py
+++ b/hypha/public/funds/migrations/0001_initial.py
@@ -13,49 +13,237 @@ import wagtail.snippets.blocks
 
 import hypha
 
-class Migration(migrations.Migration):
 
+class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('images', '0001_initial'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("images", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='FundIndex',
+            name="FundIndex",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='FundPage',
+            name="FundPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('body', wagtail.fields.StreamField((('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock((('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))))), ('quote', wagtail.blocks.StructBlock((('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))))), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock((('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))))), ('project_list', hypha.public.funds.blocks.ProjectsBlock()), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())))),
-                ('fund_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='fund_public', to='wagtailcore.Page')),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "body",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "heading",
+                                wagtail.blocks.CharBlock(
+                                    classname="full title", icon="title"
+                                ),
+                            ),
+                            ("paragraph", wagtail.blocks.RichTextBlock()),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(),
+                                        ),
+                                        (
+                                            "caption",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(classname="title"),
+                                        ),
+                                        (
+                                            "attribution",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                        (
+                                            "job_title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                            (
+                                "call_to_action",
+                                wagtail.snippets.blocks.SnippetChooserBlock(
+                                    "utils.CallToActionSnippet",
+                                    template="blocks/call_to_action_block.html",
+                                ),
+                            ),
+                            (
+                                "document",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "document",
+                                            wagtail.documents.blocks.DocumentChooserBlock(),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("project_list", hypha.public.funds.blocks.ProjectsBlock()),
+                            (
+                                "reviewer_list",
+                                hypha.public.funds.blocks.ReviewersBlock(),
+                            ),
+                        )
+                    ),
+                ),
+                (
+                    "fund_type",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="fund_public",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0002_labindex_labpage.py b/hypha/public/funds/migrations/0002_labindex_labpage.py
index d2d5e18ffd447f9846afa0a6382e0db1bbd31fbc..480c9f162edc800ba94e836814e8cc64a2762eea 100644
--- a/hypha/public/funds/migrations/0002_labindex_labpage.py
+++ b/hypha/public/funds/migrations/0002_labindex_labpage.py
@@ -14,50 +14,241 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('wagtailcore', '0040_page_draft_title'),
-        ('public_funds', '0001_initial'),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("public_funds", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='LabIndex',
+            name="LabIndex",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='LabPage',
+            name="LabPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('lab_link', models.URLField(blank=True, verbose_name='External link')),
-                ('link_text', models.CharField(help_text='Text to display on the button', max_length=255)),
-                ('body', wagtail.fields.StreamField((('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock((('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))))), ('quote', wagtail.blocks.StructBlock((('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))))), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock((('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))))), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())))),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('lab_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lab_public', to='wagtailcore.Page')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                ("lab_link", models.URLField(blank=True, verbose_name="External link")),
+                (
+                    "link_text",
+                    models.CharField(
+                        help_text="Text to display on the button", max_length=255
+                    ),
+                ),
+                (
+                    "body",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "heading",
+                                wagtail.blocks.CharBlock(
+                                    classname="full title", icon="title"
+                                ),
+                            ),
+                            ("paragraph", wagtail.blocks.RichTextBlock()),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(),
+                                        ),
+                                        (
+                                            "caption",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(classname="title"),
+                                        ),
+                                        (
+                                            "attribution",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                        (
+                                            "job_title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                            (
+                                "call_to_action",
+                                wagtail.snippets.blocks.SnippetChooserBlock(
+                                    "utils.CallToActionSnippet",
+                                    template="blocks/call_to_action_block.html",
+                                ),
+                            ),
+                            (
+                                "document",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "document",
+                                            wagtail.documents.blocks.DocumentChooserBlock(),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "reviewer_list",
+                                hypha.public.funds.blocks.ReviewersBlock(),
+                            ),
+                        )
+                    ),
+                ),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "lab_type",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="lab_public",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0003_icon_and_related_pages.py b/hypha/public/funds/migrations/0003_icon_and_related_pages.py
index ba0f01802a568464799cae603f07efae67b5f8d8..981f018084544b94a93a98ea34ab86382cfb8501 100644
--- a/hypha/public/funds/migrations/0003_icon_and_related_pages.py
+++ b/hypha/public/funds/migrations/0003_icon_and_related_pages.py
@@ -8,29 +8,61 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('public_funds', '0002_labindex_labpage'),
+        ("images", "0001_initial"),
+        ("public_funds", "0002_labindex_labpage"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='labpage',
-            name='icon',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="labpage",
+            name="icon",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
         migrations.CreateModel(
-            name='LabPageRelatedPage',
+            name="LabPageRelatedPage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_pages', to='public_funds.LabPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="related_pages",
+                        to="public_funds.LabPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/funds/migrations/0004_fundpagerelatedpage.py b/hypha/public/funds/migrations/0004_fundpagerelatedpage.py
index 4d654100a540905009d5b0fffdc1c64ffdf0319f..041ab86378e3b015e12c966e6b529d1ef42f6f5b 100644
--- a/hypha/public/funds/migrations/0004_fundpagerelatedpage.py
+++ b/hypha/public/funds/migrations/0004_fundpagerelatedpage.py
@@ -8,24 +8,50 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('public_funds', '0003_icon_and_related_pages'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("public_funds", "0003_icon_and_related_pages"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='FundPageRelatedPage',
+            name="FundPageRelatedPage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_pages', to='public_funds.FundPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="related_pages",
+                        to="public_funds.FundPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/funds/migrations/0005_link_text_optional.py b/hypha/public/funds/migrations/0005_link_text_optional.py
index c2a9bd5a1794d0d83764ac5381e43666f245ab8c..7a53f5e5874c01945a2efde2d96ef1a92d116f40 100644
--- a/hypha/public/funds/migrations/0005_link_text_optional.py
+++ b/hypha/public/funds/migrations/0005_link_text_optional.py
@@ -6,15 +6,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0004_fundpagerelatedpage'),
+        ("public_funds", "0004_fundpagerelatedpage"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='labpage',
-            name='link_text',
-            field=models.CharField(blank=True, help_text='Text to display on the button for external links', max_length=255),
+            model_name="labpage",
+            name="link_text",
+            field=models.CharField(
+                blank=True,
+                help_text="Text to display on the button for external links",
+                max_length=255,
+            ),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0006_fundindex_introduction.py b/hypha/public/funds/migrations/0006_fundindex_introduction.py
index 8c3b62a68fc2514241b2529e5a018b3da1d53047..c0ee39a3dc7757fe8cfa5a0aa9d0538058237c74 100644
--- a/hypha/public/funds/migrations/0006_fundindex_introduction.py
+++ b/hypha/public/funds/migrations/0006_fundindex_introduction.py
@@ -6,15 +6,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0005_link_text_optional'),
+        ("public_funds", "0005_link_text_optional"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='fundindex',
-            name='introduction',
+            model_name="fundindex",
+            name="introduction",
             field=models.TextField(blank=True),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0007_add_rfp_models_for_public.py b/hypha/public/funds/migrations/0007_add_rfp_models_for_public.py
index fa60703f66ea38bade3522d08e9d020ac9d7215b..92f0547a110b183004fb215a7db3615a99549705 100644
--- a/hypha/public/funds/migrations/0007_add_rfp_models_for_public.py
+++ b/hypha/public/funds/migrations/0007_add_rfp_models_for_public.py
@@ -5,53 +5,75 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('wagtailcore', '0040_page_draft_title'),
-        ('public_funds', '0006_fundindex_introduction'),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("public_funds", "0006_fundindex_introduction"),
     ]
 
     operations = [
         migrations.RenameModel(
-            old_name='FundPageRelatedPage',
-            new_name='BaseApplicationRelatedPage',
+            old_name="FundPageRelatedPage",
+            new_name="BaseApplicationRelatedPage",
         ),
         migrations.RenameModel(
-            old_name='FundPage',
-            new_name='BaseApplicationPage',
+            old_name="FundPage",
+            new_name="BaseApplicationPage",
         ),
-
         migrations.RenameField(
-            model_name='baseapplicationpage',
-            old_name='fund_type',
-            new_name='application_type',
+            model_name="baseapplicationpage",
+            old_name="fund_type",
+            new_name="application_type",
         ),
         migrations.AlterField(
-            model_name='baseapplicationpage',
-            name='application_type',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='application_public', to='wagtailcore.Page'),
+            model_name="baseapplicationpage",
+            name="application_type",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="application_public",
+                to="wagtailcore.Page",
+            ),
         ),
-
         migrations.CreateModel(
-            name='FundPage',
+            name="FundPage",
             fields=[
-                ('baseapplicationpage_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='public_funds.BaseApplicationPage')),
+                (
+                    "baseapplicationpage_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="public_funds.BaseApplicationPage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('public_funds.baseapplicationpage',),
+            bases=("public_funds.baseapplicationpage",),
         ),
         migrations.CreateModel(
-            name='RFPPage',
+            name="RFPPage",
             fields=[
-                ('baseapplicationpage_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='public_funds.BaseApplicationPage')),
+                (
+                    "baseapplicationpage_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="public_funds.BaseApplicationPage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('public_funds.baseapplicationpage',),
+            bases=("public_funds.baseapplicationpage",),
         ),
-
     ]
diff --git a/hypha/public/funds/migrations/0008_recreate_pages.py b/hypha/public/funds/migrations/0008_recreate_pages.py
index 5536b4b06fea3c1868624dbe1243c2cdc6795c55..62ad4a78681f6527684647070d7bc2e181e4863f 100644
--- a/hypha/public/funds/migrations/0008_recreate_pages.py
+++ b/hypha/public/funds/migrations/0008_recreate_pages.py
@@ -7,37 +7,36 @@ def recreate_objects(apps, schema_editor):
     # We removed the old definition of these objects, need to create
     # a new object with a pointer back to that object, the underlying
     # data structure was unaffected
-    ContentType = apps.get_model('contenttypes.ContentType')
-
+    ContentType = apps.get_model("contenttypes.ContentType")
 
     for model_name, new_model_name in [
-            ('FundPage', 'BaseApplicationPage'),
+        ("FundPage", "BaseApplicationPage"),
     ]:
-        content_type, _ = ContentType.objects.get_or_create(model=model_name.lower(), app_label='public_funds')
+        content_type, _ = ContentType.objects.get_or_create(
+            model=model_name.lower(), app_label="public_funds"
+        )
 
-        model = apps.get_model('public_funds', model_name)
-        new_model = apps.get_model('public_funds', new_model_name)
+        model = apps.get_model("public_funds", model_name)
+        new_model = apps.get_model("public_funds", new_model_name)
         for obj in new_model.objects.all():
             field_values = {}
             for field in obj._meta.fields:
-                if field.name not in ['page_ptr']:
+                if field.name not in ["page_ptr"]:
                     field_values[field.name] = getattr(obj, field.name)
 
             kwargs = {
-                f'{new_model_name.lower()}_ptr': obj,
-                'draft_title': obj.draft_title,
-                'content_type': content_type,
+                f"{new_model_name.lower()}_ptr": obj,
+                "draft_title": obj.draft_title,
+                "content_type": content_type,
             }
             field_values.update(**kwargs)
             new_obj = model(**field_values)
             new_obj.save()
 
 
-
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0007_add_rfp_models_for_public'),
+        ("public_funds", "0007_add_rfp_models_for_public"),
     ]
 
     operations = [
diff --git a/hypha/public/funds/migrations/0009_allow_mailto_in_linkfield.py b/hypha/public/funds/migrations/0009_allow_mailto_in_linkfield.py
index 25b760b2ffa9322fd6b3bf05e0a297f8aec20aa6..8b47887561c60ff4473b9eccf808da76ac13464d 100644
--- a/hypha/public/funds/migrations/0009_allow_mailto_in_linkfield.py
+++ b/hypha/public/funds/migrations/0009_allow_mailto_in_linkfield.py
@@ -5,15 +5,19 @@ import hypha.public.funds.models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0008_recreate_pages'),
+        ("public_funds", "0008_recreate_pages"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='labpage',
-            name='lab_link',
-            field=models.CharField(blank=True, max_length=255, validators=[hypha.public.funds.models.MailToAndURLValidator()], verbose_name='External link'),
+            model_name="labpage",
+            name="lab_link",
+            field=models.CharField(
+                blank=True,
+                max_length=255,
+                validators=[hypha.public.funds.models.MailToAndURLValidator()],
+                verbose_name="External link",
+            ),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0010_correct_related_page_required.py b/hypha/public/funds/migrations/0010_correct_related_page_required.py
index ec36b53a129aa6f10d25ee98bd6d5f207909501c..1b6bba664289b067ef85a31d805e416aa5884d72 100644
--- a/hypha/public/funds/migrations/0010_correct_related_page_required.py
+++ b/hypha/public/funds/migrations/0010_correct_related_page_required.py
@@ -5,20 +5,27 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0009_allow_mailto_in_linkfield'),
+        ("public_funds", "0009_allow_mailto_in_linkfield"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='baseapplicationrelatedpage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="baseapplicationrelatedpage",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='labpagerelatedpage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="labpagerelatedpage",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0011_opencallindexpage.py b/hypha/public/funds/migrations/0011_opencallindexpage.py
index 98889d43d209adf912a30660d3e1a356d55a5748..c2d820ed73093dc618bc90a782b0d7ccb4000597 100644
--- a/hypha/public/funds/migrations/0011_opencallindexpage.py
+++ b/hypha/public/funds/migrations/0011_opencallindexpage.py
@@ -5,29 +5,80 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0003_customimage_drupal_id'),
-        ('wagtailcore', '0040_page_draft_title'),
-        ('public_funds', '0010_correct_related_page_required'),
+        ("images", "0003_customimage_drupal_id"),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("public_funds", "0010_correct_related_page_required"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='OpenCallIndexPage',
+            name="OpenCallIndexPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0012_add_box_apply_link_fields.py b/hypha/public/funds/migrations/0012_add_box_apply_link_fields.py
index bbcc52e588c09e831dd293b876cf4fbce3626bf6..a8d12fd7562b15b3cf587132f519917e0c3432cb 100644
--- a/hypha/public/funds/migrations/0012_add_box_apply_link_fields.py
+++ b/hypha/public/funds/migrations/0012_add_box_apply_link_fields.py
@@ -11,20 +11,152 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0011_opencallindexpage'),
+        ("public_funds", "0011_opencallindexpage"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='baseapplicationpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('project_list', hypha.public.funds.blocks.ProjectsBlock()), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())]),
+            model_name="baseapplicationpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("project_list", hypha.public.funds.blocks.ProjectsBlock()),
+                    ("reviewer_list", hypha.public.funds.blocks.ReviewersBlock()),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='labpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())]),
+            model_name="labpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("reviewer_list", hypha.public.funds.blocks.ReviewersBlock()),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0013_add_more_block.py b/hypha/public/funds/migrations/0013_add_more_block.py
index d0b9e37b00ce951a6d42ec5ff97b812defd12da4..6deca3fc0ad77b37c4d2b6bc5fe24088af8cb92d 100644
--- a/hypha/public/funds/migrations/0013_add_more_block.py
+++ b/hypha/public/funds/migrations/0013_add_more_block.py
@@ -11,20 +11,188 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0012_add_box_apply_link_fields'),
+        ("public_funds", "0012_add_box_apply_link_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='baseapplicationpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('project_list', hypha.public.funds.blocks.ProjectsBlock()), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())]),
+            model_name="baseapplicationpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("project_list", hypha.public.funds.blocks.ProjectsBlock()),
+                    ("reviewer_list", hypha.public.funds.blocks.ReviewersBlock()),
+                ]
+            ),
         ),
         migrations.AlterField(
-            model_name='labpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())]),
+            model_name="labpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("reviewer_list", hypha.public.funds.blocks.ReviewersBlock()),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/funds/migrations/0014_auto_20220722_0844.py b/hypha/public/funds/migrations/0014_auto_20220722_0844.py
index 5e5464a6237303900914fda539e6003b97891528..dede021b89891d9182a733c3067b95b608523a22 100644
--- a/hypha/public/funds/migrations/0014_auto_20220722_0844.py
+++ b/hypha/public/funds/migrations/0014_auto_20220722_0844.py
@@ -11,20 +11,190 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('public_funds', '0013_add_more_block'),
+        ("public_funds", "0013_add_more_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='baseapplicationpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('project_list', hypha.public.funds.blocks.ProjectsBlock()), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())], use_json_field=True),
+            model_name="baseapplicationpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("project_list", hypha.public.funds.blocks.ProjectsBlock()),
+                    ("reviewer_list", hypha.public.funds.blocks.ReviewersBlock()),
+                ],
+                use_json_field=True,
+            ),
         ),
         migrations.AlterField(
-            model_name='labpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('reviewer_list', hypha.public.funds.blocks.ReviewersBlock())], use_json_field=True),
+            model_name="labpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("reviewer_list", hypha.public.funds.blocks.ReviewersBlock()),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/funds/models.py b/hypha/public/funds/models.py
index d8be4c3a46f8b462b27d6ddb588f892a228f3319..25627c81542787e671f855bf51306cb8ecb90db0 100644
--- a/hypha/public/funds/models.py
+++ b/hypha/public/funds/models.py
@@ -25,39 +25,39 @@ from .blocks import FundBlock, LabBlock
 
 
 class BaseApplicationRelatedPage(RelatedPage):
-    source_page = ParentalKey('BaseApplicationPage', related_name='related_pages')
+    source_page = ParentalKey("BaseApplicationPage", related_name="related_pages")
 
 
 class BaseApplicationPage(BasePage):
     subpage_types = []
     parent_page_types = []
 
-    application_type_model = ''
+    application_type_model = ""
 
     introduction = models.TextField(blank=True)
     application_type = models.ForeignKey(
-        'wagtailcore.Page',
+        "wagtailcore.Page",
         blank=True,
         null=True,
         on_delete=models.SET_NULL,
-        related_name='application_public',
+        related_name="application_public",
     )
     body = StreamField(FundBlock(), use_json_field=True)
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
-        index.SearchField('body')
+        index.SearchField("introduction"),
+        index.SearchField("body"),
     ]
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget()),
-        FieldPanel('body'),
-        InlinePanel('related_pages', label=_('Related pages')),
+        FieldPanel("introduction", widget=PagedownWidget()),
+        FieldPanel("body"),
+        InlinePanel("related_pages", label=_("Related pages")),
     ]
 
     def get_template(self, request, *args, **kwargs):
         # Make sure all children use the shared template
-        return 'public_funds/fund_page.html'
+        return "public_funds/fund_page.html"
 
     can_open = True
 
@@ -71,32 +71,34 @@ class BaseApplicationPage(BasePage):
 
 
 class FundPage(BaseApplicationPage):
-    parent_page_types = ['FundIndex']
+    parent_page_types = ["FundIndex"]
     content_panels = BaseApplicationPage.content_panels[:]
-    content_panels.insert(-2, PageChooserPanel('application_type', 'funds.FundType'))
+    content_panels.insert(-2, PageChooserPanel("application_type", "funds.FundType"))
 
 
 class RFPPage(BaseApplicationPage):
-    parent_page_types = ['LabPage']
+    parent_page_types = ["LabPage"]
     content_panels = BaseApplicationPage.content_panels[:]
-    content_panels.insert(-2, PageChooserPanel('application_type', 'funds.RequestForPartners'))
+    content_panels.insert(
+        -2, PageChooserPanel("application_type", "funds.RequestForPartners")
+    )
 
 
 class FundIndex(BasePage):
-    subpage_types = ['FundPage']
-    parent_page_types = ['home.HomePage']
+    subpage_types = ["FundPage"]
+    parent_page_types = ["home.HomePage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget())
+        FieldPanel("introduction", widget=PagedownWidget())
     ]
 
     def get_context(self, request, *args, **kwargs):
         funds = FundPage.objects.live().public().descendant_of(self)
 
         # Pagination
-        page = request.GET.get('page', 1)
+        page = request.GET.get("page", 1)
         paginator = Paginator(funds, settings.DEFAULT_PER_PAGE)
         try:
             funds = paginator.page(page)
@@ -111,7 +113,7 @@ class FundIndex(BasePage):
 
 
 class LabPageRelatedPage(RelatedPage):
-    source_page = ParentalKey('LabPage', related_name='related_pages')
+    source_page = ParentalKey("LabPage", related_name="related_pages")
 
 
 @deconstructible
@@ -120,58 +122,72 @@ class MailToAndURLValidator:
     url_validator = validators.URLValidator()
 
     def __call__(self, value):
-        if value.startswith('mailto://'):
-            mail_to, email = value.rsplit('://', 1)
+        if value.startswith("mailto://"):
+            mail_to, email = value.rsplit("://", 1)
             self.email_validator(email)
         else:
             self.url_validator(value)
 
 
 class LabPage(BasePage):
-    subpage_types = ['RFPPage']
-    parent_page_types = ['LabIndex']
+    subpage_types = ["RFPPage"]
+    parent_page_types = ["LabIndex"]
 
     introduction = models.TextField(blank=True)
     icon = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
-        related_name='+',
-        on_delete=models.SET_NULL
+        related_name="+",
+        on_delete=models.SET_NULL,
     )
     lab_type = models.ForeignKey(
-        'wagtailcore.Page',
+        "wagtailcore.Page",
         blank=True,
         null=True,
         on_delete=models.SET_NULL,
-        related_name='lab_public',
+        related_name="lab_public",
+    )
+    lab_link = models.CharField(
+        blank=True,
+        max_length=255,
+        verbose_name=_("External link"),
+        validators=[MailToAndURLValidator()],
+    )
+    link_text = models.CharField(
+        max_length=255,
+        help_text=_("Text to display on the button for external links"),
+        blank=True,
     )
-    lab_link = models.CharField(blank=True, max_length=255, verbose_name=_('External link'), validators=[MailToAndURLValidator()])
-    link_text = models.CharField(max_length=255, help_text=_('Text to display on the button for external links'), blank=True)
     body = StreamField(LabBlock(), use_json_field=True)
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
-        index.SearchField('body')
+        index.SearchField("introduction"),
+        index.SearchField("body"),
     ]
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('icon'),
-        FieldPanel('introduction'),
-        MultiFieldPanel([
-            PageChooserPanel('lab_type', 'funds.LabType'),
-            FieldRowPanel([
-                FieldPanel('lab_link'),
-                FieldPanel('link_text'),
-            ]),
-        ], heading=_('Link for lab application')),
-        FieldPanel('body'),
-        InlinePanel('related_pages', label=_('Related pages')),
+        FieldPanel("icon"),
+        FieldPanel("introduction"),
+        MultiFieldPanel(
+            [
+                PageChooserPanel("lab_type", "funds.LabType"),
+                FieldRowPanel(
+                    [
+                        FieldPanel("lab_link"),
+                        FieldPanel("link_text"),
+                    ]
+                ),
+            ],
+            heading=_("Link for lab application"),
+        ),
+        FieldPanel("body"),
+        InlinePanel("related_pages", label=_("Related pages")),
     ]
 
     def get_context(self, request):
         context = super().get_context(request)
-        context['rfps'] = self.get_children().live().public()
+        context["rfps"] = self.get_children().live().public()
         return context
 
     can_open = True
@@ -185,43 +201,53 @@ class LabPage(BasePage):
 
     def clean(self):
         if self.lab_type and self.lab_link:
-            raise ValidationError({
-                'lab_type': _('Cannot link to both a Lab page and external link'),
-                'lab_link': _('Cannot link to both a Lab page and external link'),
-            })
+            raise ValidationError(
+                {
+                    "lab_type": _("Cannot link to both a Lab page and external link"),
+                    "lab_link": _("Cannot link to both a Lab page and external link"),
+                }
+            )
 
         if not self.lab_type and not self.lab_link:
-            raise ValidationError({
-                'lab_type': _('Please provide a way for applicants to apply'),
-                'lab_link': _('Please provide a way for applicants to apply'),
-            })
+            raise ValidationError(
+                {
+                    "lab_type": _("Please provide a way for applicants to apply"),
+                    "lab_link": _("Please provide a way for applicants to apply"),
+                }
+            )
 
         if self.lab_type and self.link_text:
-            raise ValidationError({
-                'link_text': _('Cannot customise the text for internal lab pages, leave blank'),
-            })
+            raise ValidationError(
+                {
+                    "link_text": _(
+                        "Cannot customise the text for internal lab pages, leave blank"
+                    ),
+                }
+            )
 
         if self.lab_link and not self.link_text:
-            raise ValidationError({
-                'link_text': _('Please provide some text for the link button'),
-            })
+            raise ValidationError(
+                {
+                    "link_text": _("Please provide some text for the link button"),
+                }
+            )
 
 
 class LabIndex(BasePage):
-    subpage_types = ['LabPage']
-    parent_page_types = ['home.HomePage']
+    subpage_types = ["LabPage"]
+    parent_page_types = ["home.HomePage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget())
+        FieldPanel("introduction", widget=PagedownWidget())
     ]
 
     def get_context(self, request, *args, **kwargs):
         labs = LabPage.objects.live().public().descendant_of(self)
 
         # Pagination
-        page = request.GET.get('page', 1)
+        page = request.GET.get("page", 1)
         paginator = Paginator(labs, settings.DEFAULT_PER_PAGE)
         try:
             labs = paginator.page(page)
@@ -237,24 +263,27 @@ class LabIndex(BasePage):
 
 class OpenCallIndexPage(BasePage):
     subpage_types = []
-    parent_page_types = ['home.HomePage']
+    parent_page_types = ["home.HomePage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction'),
+        FieldPanel("introduction"),
     ]
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
+        index.SearchField("introduction"),
     ]
 
     def get_context(self, request, *args, **kwargs):
         context = super().get_context(request, *args, **kwargs)
-        open_call_submissions = ApplicationSubmission.objects.filter(
-            status__in=OPEN_CALL_PHASES).select_related('page').order_by('-submit_time')
+        open_call_submissions = (
+            ApplicationSubmission.objects.filter(status__in=OPEN_CALL_PHASES)
+            .select_related("page")
+            .order_by("-submit_time")
+        )
         per_page = settings.DEFAULT_PER_PAGE
-        page_number = request.GET.get('page')
+        page_number = request.GET.get("page")
         paginator = Paginator(open_call_submissions, per_page)
 
         try:
@@ -264,6 +293,6 @@ class OpenCallIndexPage(BasePage):
         except EmptyPage:
             open_call_submissions = paginator.page(paginator.num_pages)
 
-        context['open_call_submissions'] = open_call_submissions
+        context["open_call_submissions"] = open_call_submissions
 
         return context
diff --git a/hypha/public/funds/templates/public_funds/blocks/related_projects.html b/hypha/public/funds/templates/public_funds/blocks/related_projects.html
index d293c0e22d78c9f05aa6a0c70771f9808a8cd88f..94a7db4c4059f41597b89373ceed42b4e42f4328 100644
--- a/hypha/public/funds/templates/public_funds/blocks/related_projects.html
+++ b/hypha/public/funds/templates/public_funds/blocks/related_projects.html
@@ -2,17 +2,17 @@
     <div class="wrapper wrapper--breakout">
         <div class="wrapper--media-boxes">
             <div class="grid grid--two grid--medium-gap">
-            {% for project in page.projectfunding_set.projects %}
-                {% if forloop.counter0 == 10 %}
-                    <input class="show-more--checkbox" type="checkbox" id="projects-toggle">
-                    <label class="link link--button link--button__center show-more--button" for="projects-toggle">Show more</label>
-                {% endif %}
-                {% if forloop.counter0 < 10 %}
-                    {% include "public_funds/includes/project_listing.html" with project=project %}
-                {% else %}
-                    {% include "public_funds/includes/project_listing.html" with project=project class="show-more--target" %}
-                {% endif %}
-            {% endfor %}
+                {% for project in page.projectfunding_set.projects %}
+                    {% if forloop.counter0 == 10 %}
+                        <input class="show-more--checkbox" type="checkbox" id="projects-toggle">
+                        <label class="link link--button link--button__center show-more--button" for="projects-toggle">Show more</label>
+                    {% endif %}
+                    {% if forloop.counter0 < 10 %}
+                        {% include "public_funds/includes/project_listing.html" with project=project %}
+                    {% else %}
+                        {% include "public_funds/includes/project_listing.html" with project=project class="show-more--target" %}
+                    {% endif %}
+                {% endfor %}
             </div>
         </div>
     </div>
diff --git a/hypha/public/funds/templates/public_funds/includes/fund_apply_cta.html b/hypha/public/funds/templates/public_funds/includes/fund_apply_cta.html
index 052bd534b319a314ef788949925800ec1618324c..438c8dbc9de92f6410ff5963441e1430fd76885b 100644
--- a/hypha/public/funds/templates/public_funds/includes/fund_apply_cta.html
+++ b/hypha/public/funds/templates/public_funds/includes/fund_apply_cta.html
@@ -4,13 +4,13 @@
     <div class="wrapper wrapper--small apply-bar">
         {% if page.is_open %}
             {% if page.deadline and False %}
-              <div>
-                <h5 class="apply-bar__subheading">{% trans "Next deadline" %}</h5>
-                <h3 class="apply-bar__heading">
-                    <svg class="icon icon--calendar apply-bar__icon"><use xlink:href="#calendar"></use></svg>
-                    <span>{{ page.deadline|date:"M j, Y" }}</span>
-                </h3>
-              </div>
+                <div>
+                    <h5 class="apply-bar__subheading">{% trans "Next deadline" %}</h5>
+                    <h3 class="apply-bar__heading">
+                        <svg class="icon icon--calendar apply-bar__icon"><use xlink:href="#calendar"></use></svg>
+                        <span>{{ page.deadline|date:"M j, Y" }}</span>
+                    </h3>
+                </div>
             {% endif %}
             <a href="{% pageurl apply_page %}" class="link link--button-secondary">
                 {% trans "Apply for this" %} {% verbose_name apply_page %}
diff --git a/hypha/public/funds/templates/public_funds/includes/lab_apply_cta.html b/hypha/public/funds/templates/public_funds/includes/lab_apply_cta.html
index 64b7670a543bfc8a9193d4d5b8345864f3f59add..00ce891b5a688f83fd32f2ff0d2735cf38805c41 100644
--- a/hypha/public/funds/templates/public_funds/includes/lab_apply_cta.html
+++ b/hypha/public/funds/templates/public_funds/includes/lab_apply_cta.html
@@ -1,11 +1,11 @@
 {% if page.lab_type %}
     {% include "public_funds/includes/fund_apply_cta.html" with page=page apply_page=page.lab_type %}
 {% else %}
-<div class="wrapper wrapper--breakout wrapper--light-grey-bg wrapper--apply-bar{% if class %} {{class}} {% endif %}">
-    <div class="wrapper wrapper--small apply-bar">
-        <a href="{{ page.lab_link }}" class="link link--button-secondary">
-            {{ page.link_text }}
-        </a>
+    <div class="wrapper wrapper--breakout wrapper--light-grey-bg wrapper--apply-bar{% if class %} {{class}} {% endif %}">
+        <div class="wrapper wrapper--small apply-bar">
+            <a href="{{ page.lab_link }}" class="link link--button-secondary">
+                {{ page.link_text }}
+            </a>
+        </div>
     </div>
-</div>
 {% endif %}
diff --git a/hypha/public/funds/templates/public_funds/open_call_index_page.html b/hypha/public/funds/templates/public_funds/open_call_index_page.html
index 4c0760619809cd838df4be285218c56844f69537..a26e28b27b2bb14f3976c029f6eb4c834fea977d 100644
--- a/hypha/public/funds/templates/public_funds/open_call_index_page.html
+++ b/hypha/public/funds/templates/public_funds/open_call_index_page.html
@@ -3,35 +3,35 @@
 {% block body_class %}light-grey-bg{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
-    {% if page.introduction %}
-        <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
-    {% endif %}
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
+        {% if page.introduction %}
+            <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
+        {% endif %}
 
-    <div class="wrapper wrapper--listings">
+        <div class="wrapper wrapper--listings">
 
-        {% if open_call_submissions %}
-            {% for submission in open_call_submissions %}
-                <div class="listing listing--with-button">
-                    <h3 class="title">{{ submission.title }}</h3>
-                    <a class="button listing__button" href="{% pageurl submission.page %}?open_call_submission={{ submission.id }}" target="_blank">Build it</a>
-                    <div class="rich-text rich-text--answers">
-                        <section>
-                            <h4>Name</h4>
-                            <span>{{ submission.get_full_name_display }}</span>
-                        </section>
+            {% if open_call_submissions %}
+                {% for submission in open_call_submissions %}
+                    <div class="listing listing--with-button">
+                        <h3 class="title">{{ submission.title }}</h3>
+                        <a class="button listing__button" href="{% pageurl submission.page %}?open_call_submission={{ submission.id }}" target="_blank">Build it</a>
+                        <div class="rich-text rich-text--answers">
+                            <section>
+                                <h4>Name</h4>
+                                <span>{{ submission.get_full_name_display }}</span>
+                            </section>
 
-                        {{ submission.output_first_group_text_answers }}
+                            {{ submission.output_first_group_text_answers }}
+                        </div>
                     </div>
-                </div>
-            {% endfor %}
+                {% endfor %}
 
-            {% include "includes/pagination.html" with paginator_page=open_call_submissions %}
+                {% include "includes/pagination.html" with paginator_page=open_call_submissions %}
 
-        {% else %}
+            {% else %}
             {# no items on this page #}
-        {% endif %}
+            {% endif %}
+        </div>
     </div>
-</div>
 
 {% endblock %}
diff --git a/hypha/public/home/blocks.py b/hypha/public/home/blocks.py
index 95c8558d1b6e026190f1fb893784cb803c99afb3..1576090341a507caf6a3db17d25eafc92228507b 100644
--- a/hypha/public/home/blocks.py
+++ b/hypha/public/home/blocks.py
@@ -5,7 +5,7 @@ from wagtail.images.blocks import ImageChooserBlock
 
 class OurWorkBlock(blocks.StructBlock):
     icon = ImageChooserBlock()
-    description = blocks.TextBlock(help_text=_('The first word will be bold'))
+    description = blocks.TextBlock(help_text=_("The first word will be bold"))
 
     class Meta:
-        template = 'home/blocks/our_work.html'
+        template = "home/blocks/our_work.html"
diff --git a/hypha/public/home/management/commands/export_public_pages_json.py b/hypha/public/home/management/commands/export_public_pages_json.py
index e1e852e4da52cdb177e27c4afc6570b1693cf045..195e8d4a261e8bc5fac7a7b298a43ec4ad74b7f8 100644
--- a/hypha/public/home/management/commands/export_public_pages_json.py
+++ b/hypha/public/home/management/commands/export_public_pages_json.py
@@ -15,24 +15,24 @@ class Command(BaseCommand):
     def get_streamfield_as_blocks(self, field):
         streamfields = []
         for block in field:
-            if hasattr(block.value, 'render_as_block'):
+            if hasattr(block.value, "render_as_block"):
                 streamfields.append(str(block.value.render_as_block()))
             else:
                 streamfields.append(str(block.value))
-        body = ''.join(streamfields)
+        body = "".join(streamfields)
         return body
 
     def get_authors(self, items):
         related = []
         for item in items.all():
             related.append(item.author.slug)
-        return ','.join(related)
+        return ",".join(related)
 
     def get_related_pages(self, items):
         related = []
         for item in items.all():
             related.append(item.source_page.slug)
-        return ','.join(related)
+        return ",".join(related)
 
     def get_types(self, items):
         related = []
@@ -41,95 +41,107 @@ class Command(BaseCommand):
                 related.append(item.news_type.title)
             except AttributeError:
                 related.append(item.person_type.title)
-        return ','.join(related)
+        return ",".join(related)
 
     def get_funding(self, items):
         funding = []
         for item in items.all():
-            funding.append({
-                'year': str(item.year),
-                'duration': str(item.duration),
-                'value': int(item.value),
-                'source': str(item.source).strip(),
-            })
+            funding.append(
+                {
+                    "year": str(item.year),
+                    "duration": str(item.duration),
+                    "value": int(item.value),
+                    "source": str(item.source).strip(),
+                }
+            )
         return funding
 
     def get_contact(self, items):
         contact = []
         for item in items.all():
-            contact.append({
-                'url': str(item.url),
-                'service': str(item.service),
-            })
+            contact.append(
+                {
+                    "url": str(item.url),
+                    "service": str(item.service),
+                }
+            )
         return contact
 
     def get_image(self, item):
         try:
-            return item.file.path.replace(f'{settings.BASE_DIR}/media/original_images/', '')
+            return item.file.path.replace(
+                f"{settings.BASE_DIR}/media/original_images/", ""
+            )
         except AttributeError:
             pass
 
     def handle(self, *args, **options):
         try:
-            os.mkdir('exports')
+            os.mkdir("exports")
         except FileExistsError:
             pass
 
         # News export
         newsdata = []
         for page in NewsPage.objects.live().public():
-            newsdata.append({
-                'oldid': int(page.id),
-                'title': str(page.title).strip(),
-                'date': str(page.first_published_at.isoformat()),
-                'lastmod': str(page.latest_revision_created_at.isoformat()),
-                'authors': self.get_authors(page.authors),
-                'types': self.get_types(page.news_types),
-                'related_pages': self.get_related_pages(page.related_pages),
-                'related_projects': self.get_related_pages(page.related_projects),
-                'intro': str(page.introduction).strip(),
-                'body': self.get_streamfield_as_blocks(page.body),
-                'slug': str(page.slug).strip(),
-            })
-            with open('exports/news.json', 'w', newline='') as jsonfile:
+            newsdata.append(
+                {
+                    "oldid": int(page.id),
+                    "title": str(page.title).strip(),
+                    "date": str(page.first_published_at.isoformat()),
+                    "lastmod": str(page.latest_revision_created_at.isoformat()),
+                    "authors": self.get_authors(page.authors),
+                    "types": self.get_types(page.news_types),
+                    "related_pages": self.get_related_pages(page.related_pages),
+                    "related_projects": self.get_related_pages(page.related_projects),
+                    "intro": str(page.introduction).strip(),
+                    "body": self.get_streamfield_as_blocks(page.body),
+                    "slug": str(page.slug).strip(),
+                }
+            )
+            with open("exports/news.json", "w", newline="") as jsonfile:
                 json.dump(newsdata, jsonfile)
 
         # People export
         peopledata = []
         for page in PersonPage.objects.live().public():
-            peopledata.append({
-                'oldid': int(page.id),
-                'title': str(page.title).strip(),
-                'date': str(page.first_published_at.isoformat()),
-                'lastmod': str(page.latest_revision_created_at.isoformat()),
-                'active': bool(page.active),
-                'photo': self.get_image(page.photo),
-                'jobtitle': str(page.title).strip(),
-                'types': self.get_types(page.person_types),
-                'email': str(page.email).strip(),
-                'web': str(page.website).strip(),
-                'intro': str(page.introduction).strip(),
-                'body': self.get_streamfield_as_blocks(page.biography),
-                'slug': str(page.slug).strip(),
-            })
-            with open('exports/people.json', 'w', newline='') as jsonfile:
+            peopledata.append(
+                {
+                    "oldid": int(page.id),
+                    "title": str(page.title).strip(),
+                    "date": str(page.first_published_at.isoformat()),
+                    "lastmod": str(page.latest_revision_created_at.isoformat()),
+                    "active": bool(page.active),
+                    "photo": self.get_image(page.photo),
+                    "jobtitle": str(page.title).strip(),
+                    "types": self.get_types(page.person_types),
+                    "email": str(page.email).strip(),
+                    "web": str(page.website).strip(),
+                    "intro": str(page.introduction).strip(),
+                    "body": self.get_streamfield_as_blocks(page.biography),
+                    "slug": str(page.slug).strip(),
+                }
+            )
+            with open("exports/people.json", "w", newline="") as jsonfile:
                 json.dump(peopledata, jsonfile)
 
         # Project export
         projectdata = []
         for page in ProjectPage.objects.live().public():
-            projectdata.append({
-                'oldid': int(page.id),
-                'title': str(page.title).strip(),
-                'date': str(page.first_published_at.isoformat()),
-                'icon': self.get_image(page.icon),
-                'lastmod': str(page.latest_revision_created_at.isoformat()),
-                'funding': self.get_funding(page.funding),
-                'contact': self.get_contact(page.contact_details),
-                'related_pages': self.get_related_pages(page.related_pages),
-                'intro': str(page.introduction).strip(),
-                'body': self.get_streamfield_as_blocks(page.body),
-                'slug': str(page.slug).strip(),
-            })
-            with open('exports/projects.json', 'w', newline='') as jsonfile:
+            projectdata.append(
+                {
+                    "oldid": int(page.id),
+                    "title": str(page.title).strip(),
+                    "date": str(page.first_published_at.isoformat()),
+                    "icon": self.get_image(page.icon),
+                    "lastmod": str(page.latest_revision_created_at.isoformat()),
+                    "funding": self.get_funding(page.funding),
+                    "contact": self.get_contact(page.contact_details),
+                    "related_pages": self.get_related_pages(page.related_pages),
+                    "intro": str(page.introduction).strip(),
+                    "body": self.get_streamfield_as_blocks(page.body),
+                    "slug": str(page.slug).strip(),
+                }
+            )
+            with open("exports/projects.json", "w", newline="") as jsonfile:
                 json.dump(projectdata, jsonfile)
diff --git a/hypha/public/home/migrations/0001_initial.py b/hypha/public/home/migrations/0001_initial.py
index fccc58faec595b2863aa3d7bddc94bef959fdc01..b0719b70b13702099cc45b0df9ceceea5297dc68 100644
--- a/hypha/public/home/migrations/0001_initial.py
+++ b/hypha/public/home/migrations/0001_initial.py
@@ -6,29 +6,80 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('images', '0001_initial'),
-        ('utils', '0001_initial'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("images", "0001_initial"),
+        ("utils", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='HomePage',
+            name="HomePage",
             fields=[
-                ('page_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page', on_delete=models.CASCADE)),
-                ('call_to_action', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='utils.CallToActionSnippet')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('strapline', models.CharField(blank=True, max_length=255)),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        parent_link=True,
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                        on_delete=models.CASCADE,
+                    ),
+                ),
+                (
+                    "call_to_action",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="utils.CallToActionSnippet",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                ("strapline", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
     ]
diff --git a/hypha/public/home/migrations/0002_create_homepage.py b/hypha/public/home/migrations/0002_create_homepage.py
index e66db2fe5b36b4b20f56b44fc02fc831cfa8e34e..c81902ec9c690fbc5d6b04d65ab4c61b8d8a6b6f 100644
--- a/hypha/public/home/migrations/0002_create_homepage.py
+++ b/hypha/public/home/migrations/0002_create_homepage.py
@@ -6,43 +6,42 @@ from django.db import migrations
 
 def create_homepage(apps, schema_editor):
     # Get models
-    ContentType = apps.get_model('contenttypes.ContentType')
-    Page = apps.get_model('wagtailcore.Page')
-    Site = apps.get_model('wagtailcore.Site')
-    HomePage = apps.get_model('home.HomePage')
+    ContentType = apps.get_model("contenttypes.ContentType")
+    Page = apps.get_model("wagtailcore.Page")
+    Site = apps.get_model("wagtailcore.Site")
+    HomePage = apps.get_model("home.HomePage")
 
     # Delete the default homepage
     Page.objects.get(id=2).delete()
 
     # Create content type for homepage model
     homepage_content_type, created = ContentType.objects.get_or_create(
-        model='homepage', app_label='home')
+        model="homepage", app_label="home"
+    )
 
     # Create a new homepage
     homepage = HomePage.objects.create(
         title="Homepage",
         draft_title="Homepage",
-        slug='home',
+        slug="home",
         content_type=homepage_content_type,
-        path='00010001',
+        path="00010001",
         depth=2,
         numchild=0,
-        url_path='/home/',
+        url_path="/home/",
     )
 
     # Create a site with the new homepage set as the root
-    Site.objects.create(
-        hostname='localhost', root_page=homepage, is_default_site=True)
+    Site.objects.create(hostname="localhost", root_page=homepage, is_default_site=True)
 
 
 class Migration(migrations.Migration):
-
     run_before = [
-        ('wagtailcore', '0053_locale_model'),  # added for Wagtail 2.11 compatibility
+        ("wagtailcore", "0053_locale_model"),  # added for Wagtail 2.11 compatibility
     ]
 
     dependencies = [
-        ('home', '0001_initial'),
+        ("home", "0001_initial"),
     ]
 
     operations = [
diff --git a/hypha/public/home/migrations/0003_homepage_header_image.py b/hypha/public/home/migrations/0003_homepage_header_image.py
index 8059999f94553a032ea490220562bd3bb6ab0c9f..1c10cc0d4d7332e9ea968eb3483364607ed38c61 100644
--- a/hypha/public/home/migrations/0003_homepage_header_image.py
+++ b/hypha/public/home/migrations/0003_homepage_header_image.py
@@ -7,16 +7,21 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('home', '0002_create_homepage'),
+        ("images", "0001_initial"),
+        ("home", "0002_create_homepage"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='homepage',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="homepage",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
     ]
diff --git a/hypha/public/home/migrations/0004_add_related_models_to_homepage.py b/hypha/public/home/migrations/0004_add_related_models_to_homepage.py
index de5aeed287bd81e40cb6b3770506db04c6678945..d5d008b31227dc5d48fe1e26398b826b6746bc50 100644
--- a/hypha/public/home/migrations/0004_add_related_models_to_homepage.py
+++ b/hypha/public/home/migrations/0004_add_related_models_to_homepage.py
@@ -8,57 +8,104 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('home', '0003_homepage_header_image'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("home", "0003_homepage_header_image"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PromotedFunds',
+            name="PromotedFunds",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='PromotedLabs',
+            name="PromotedLabs",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.RemoveField(
-            model_name='homepage',
-            name='call_to_action',
+            model_name="homepage",
+            name="call_to_action",
         ),
         migrations.AddField(
-            model_name='promotedlabs',
-            name='source_page',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='promoted_labs', to='home.HomePage'),
+            model_name="promotedlabs",
+            name="source_page",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="promoted_labs",
+                to="home.HomePage",
+            ),
         ),
         migrations.AddField(
-            model_name='promotedfunds',
-            name='source_page',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='promoted_funds', to='home.HomePage'),
+            model_name="promotedfunds",
+            name="source_page",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="promoted_funds",
+                to="home.HomePage",
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='promotedlabs',
-            unique_together={('page',)},
+            name="promotedlabs",
+            unique_together={("page",)},
         ),
         migrations.AlterUniqueTogether(
-            name='promotedfunds',
-            unique_together={('page',)},
+            name="promotedfunds",
+            unique_together={("page",)},
         ),
     ]
diff --git a/hypha/public/home/migrations/0005_homepage_our_work.py b/hypha/public/home/migrations/0005_homepage_our_work.py
index bf34a9b583711779e2dd87eaafa21d0036ae9462..4020f2316ddf2119902c24f5b6b53e081655f208 100644
--- a/hypha/public/home/migrations/0005_homepage_our_work.py
+++ b/hypha/public/home/migrations/0005_homepage_our_work.py
@@ -8,16 +8,27 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('home', '0004_add_related_models_to_homepage'),
+        ("home", "0004_add_related_models_to_homepage"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='homepage',
-            name='our_work',
-            field=wagtail.fields.StreamField((('work', wagtail.blocks.ListBlock(wagtail.blocks.StreamBlock((('title', wagtail.blocks.CharBlock()),)))),), default=[]),
+            model_name="homepage",
+            name="our_work",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "work",
+                        wagtail.blocks.ListBlock(
+                            wagtail.blocks.StreamBlock(
+                                (("title", wagtail.blocks.CharBlock()),)
+                            )
+                        ),
+                    ),
+                ),
+                default=[],
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/public/home/migrations/0006_add_our_work_fields.py b/hypha/public/home/migrations/0006_add_our_work_fields.py
index 778b83fd655a64af0255654237827233d6753c8f..cca0c8fe03563d1565fe2356332a20f0d70d6a92 100644
--- a/hypha/public/home/migrations/0006_add_our_work_fields.py
+++ b/hypha/public/home/migrations/0006_add_our_work_fields.py
@@ -10,34 +10,55 @@ import wagtail.images.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('home', '0005_homepage_our_work'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("home", "0005_homepage_our_work"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='homepage',
-            name='our_work_link',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="our_work_link",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='our_work_link_text',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="our_work_link_text",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='our_work_title',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="our_work_title",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
         migrations.AlterField(
-            model_name='homepage',
-            name='our_work',
-            field=wagtail.fields.StreamField((('work', wagtail.blocks.StructBlock((('icon', wagtail.images.blocks.ImageChooserBlock()), ('description', wagtail.blocks.TextBlock(help_text='The first word will be bold'))))),)),
+            model_name="homepage",
+            name="our_work",
+            field=wagtail.fields.StreamField(
+                (
+                    (
+                        "work",
+                        wagtail.blocks.StructBlock(
+                            (
+                                ("icon", wagtail.images.blocks.ImageChooserBlock()),
+                                (
+                                    "description",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="The first word will be bold"
+                                    ),
+                                ),
+                            )
+                        ),
+                    ),
+                )
+            ),
         ),
     ]
diff --git a/hypha/public/home/migrations/0007_add_labs_and_funds_homepage.py b/hypha/public/home/migrations/0007_add_labs_and_funds_homepage.py
index 6c92075d711d2ab115d3160f4d17f3ce2aeed311..3959a6624ebc961145c64bce7db0304599245f39 100644
--- a/hypha/public/home/migrations/0007_add_labs_and_funds_homepage.py
+++ b/hypha/public/home/migrations/0007_add_labs_and_funds_homepage.py
@@ -7,59 +7,73 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('home', '0006_add_our_work_fields'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("home", "0006_add_our_work_fields"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='homepage',
-            name='funds_link',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="funds_link",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='funds_link_text',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="funds_link_text",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='funds_title',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="funds_title",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='labs_link',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="labs_link",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='labs_link_text',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="labs_link_text",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='labs_title',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="labs_title",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='strapline_link',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="strapline_link",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='strapline_link_text',
-            field=models.CharField(max_length=255, default=''),
+            model_name="homepage",
+            name="strapline_link_text",
+            field=models.CharField(max_length=255, default=""),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/public/home/migrations/0008_add_intro_to_lab_and_funds.py b/hypha/public/home/migrations/0008_add_intro_to_lab_and_funds.py
index 986084acccc3fa7d4e0f3fcf5b8b79d16d089ef2..67b9710263a8ac7311e485452ccf9ce09d139d7e 100644
--- a/hypha/public/home/migrations/0008_add_intro_to_lab_and_funds.py
+++ b/hypha/public/home/migrations/0008_add_intro_to_lab_and_funds.py
@@ -6,20 +6,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('home', '0007_add_labs_and_funds_homepage'),
+        ("home", "0007_add_labs_and_funds_homepage"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='homepage',
-            name='funds_intro',
+            model_name="homepage",
+            name="funds_intro",
             field=models.TextField(blank=True),
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='labs_intro',
+            model_name="homepage",
+            name="labs_intro",
             field=models.TextField(blank=True),
         ),
     ]
diff --git a/hypha/public/home/migrations/0009_django2_update.py b/hypha/public/home/migrations/0009_django2_update.py
index ba0047193bc4dc44d7cfd57b5f0c6db4bde5e38c..1a3209f640ae9da5bd13c997e340fab91119830c 100644
--- a/hypha/public/home/migrations/0009_django2_update.py
+++ b/hypha/public/home/migrations/0009_django2_update.py
@@ -5,30 +5,45 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('home', '0008_add_intro_to_lab_and_funds'),
+        ("home", "0008_add_intro_to_lab_and_funds"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='homepage',
-            name='funds_link',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="funds_link",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='homepage',
-            name='labs_link',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="labs_link",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='homepage',
-            name='our_work_link',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="our_work_link",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='homepage',
-            name='strapline_link',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="strapline_link",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/home/migrations/0010_add_rfp_to_homepage.py b/hypha/public/home/migrations/0010_add_rfp_to_homepage.py
index 55e83b1bd290e6cdfbb2f336f3fb2b1d8f4012cf..09d9bd643f3b19faeaa524b95811894720949656 100644
--- a/hypha/public/home/migrations/0010_add_rfp_to_homepage.py
+++ b/hypha/public/home/migrations/0010_add_rfp_to_homepage.py
@@ -6,43 +6,66 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('home', '0009_django2_update'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("home", "0009_django2_update"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PromotedRFPs',
+            name="PromotedRFPs",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='rfps_intro',
+            model_name="homepage",
+            name="rfps_intro",
             field=models.TextField(blank=True),
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='rfps_title',
-            field=models.CharField(default='Requests For Partners', max_length=255),
+            model_name="homepage",
+            name="rfps_title",
+            field=models.CharField(default="Requests For Partners", max_length=255),
             preserve_default=False,
         ),
         migrations.AddField(
-            model_name='promotedrfps',
-            name='source_page',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='promoted_rfps', to='home.HomePage'),
+            model_name="promotedrfps",
+            name="source_page",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="promoted_rfps",
+                to="home.HomePage",
+            ),
         ),
         migrations.AlterUniqueTogether(
-            name='promotedrfps',
-            unique_together={('page',)},
+            name="promotedrfps",
+            unique_together={("page",)},
         ),
     ]
diff --git a/hypha/public/home/migrations/0011_correct_related_page_behaviour.py b/hypha/public/home/migrations/0011_correct_related_page_behaviour.py
index d9ae0e233a007e87a0bac29e752089e9e2f7af7b..100322c459354b98f0de843b08b8663a4321e77c 100644
--- a/hypha/public/home/migrations/0011_correct_related_page_behaviour.py
+++ b/hypha/public/home/migrations/0011_correct_related_page_behaviour.py
@@ -5,25 +5,36 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('home', '0010_add_rfp_to_homepage'),
+        ("home", "0010_add_rfp_to_homepage"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='promotedfunds',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="promotedfunds",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='promotedlabs',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="promotedlabs",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='promotedrfps',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="promotedrfps",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/home/migrations/0012_add_news_homepage.py b/hypha/public/home/migrations/0012_add_news_homepage.py
index c342becc2a9544cb47f94258db9bbffae09d02a9..2e788609ff6bfec43ce0e36be5dcffb55ed71350 100644
--- a/hypha/public/home/migrations/0012_add_news_homepage.py
+++ b/hypha/public/home/migrations/0012_add_news_homepage.py
@@ -5,26 +5,31 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0045_assign_unlock_grouppagepermission'),
-        ('home', '0011_correct_related_page_behaviour'),
+        ("wagtailcore", "0045_assign_unlock_grouppagepermission"),
+        ("home", "0011_correct_related_page_behaviour"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='homepage',
-            name='news_link',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.Page'),
+            model_name="homepage",
+            name="news_link",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='news_link_text',
+            model_name="homepage",
+            name="news_link_text",
             field=models.CharField(blank=True, max_length=255),
         ),
         migrations.AddField(
-            model_name='homepage',
-            name='news_title',
+            model_name="homepage",
+            name="news_title",
             field=models.CharField(blank=True, max_length=255),
         ),
     ]
diff --git a/hypha/public/home/migrations/0013_alter_homepage_our_work.py b/hypha/public/home/migrations/0013_alter_homepage_our_work.py
index 6bbe6cc403e98d91b4c7bb756ca0366825d457a7..2aa2ed52586769208b269d47719290f81cf995ee 100644
--- a/hypha/public/home/migrations/0013_alter_homepage_our_work.py
+++ b/hypha/public/home/migrations/0013_alter_homepage_our_work.py
@@ -7,15 +7,32 @@ import wagtail.images.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('home', '0012_add_news_homepage'),
+        ("home", "0012_add_news_homepage"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='homepage',
-            name='our_work',
-            field=wagtail.fields.StreamField([('work', wagtail.blocks.StructBlock([('icon', wagtail.images.blocks.ImageChooserBlock()), ('description', wagtail.blocks.TextBlock(help_text='The first word will be bold'))]))], use_json_field=True),
+            model_name="homepage",
+            name="our_work",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "work",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("icon", wagtail.images.blocks.ImageChooserBlock()),
+                                (
+                                    "description",
+                                    wagtail.blocks.TextBlock(
+                                        help_text="The first word will be bold"
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/home/models.py b/hypha/public/home/models.py
index 5b4259c7fff30a02db939aed48cefa7ec406715d..4da791e218caf0bbd77c3056ea93a36968456ae0 100644
--- a/hypha/public/home/models.py
+++ b/hypha/public/home/models.py
@@ -19,127 +19,163 @@ from .blocks import OurWorkBlock
 
 
 class PromotedFunds(RelatedPage):
-    source_page = ParentalKey(
-        'home.HomePage',
-        related_name='promoted_funds'
-    )
+    source_page = ParentalKey("home.HomePage", related_name="promoted_funds")
 
     class Meta(RelatedPage.Meta):
-        unique_together = ('page',)
+        unique_together = ("page",)
 
     panels = [
-        PageChooserPanel('page', 'public_funds.FundPage'),
+        PageChooserPanel("page", "public_funds.FundPage"),
     ]
 
 
 class PromotedLabs(RelatedPage):
-    source_page = ParentalKey(
-        'home.HomePage',
-        related_name='promoted_labs'
-    )
+    source_page = ParentalKey("home.HomePage", related_name="promoted_labs")
 
     class Meta(RelatedPage.Meta):
-        unique_together = ('page',)
+        unique_together = ("page",)
 
     panels = [
-        PageChooserPanel('page', 'public_funds.LabPage'),
+        PageChooserPanel("page", "public_funds.LabPage"),
     ]
 
 
 class PromotedRFPs(RelatedPage):
-    source_page = ParentalKey(
-        'home.HomePage',
-        related_name='promoted_rfps'
-    )
+    source_page = ParentalKey("home.HomePage", related_name="promoted_rfps")
 
     class Meta(RelatedPage.Meta):
-        unique_together = ('page',)
+        unique_together = ("page",)
 
     panels = [
-        PageChooserPanel('page', 'public_funds.RFPPage'),
+        PageChooserPanel("page", "public_funds.RFPPage"),
     ]
 
 
 class HomePage(BasePage):
     # Only allow creating HomePages at the root level
-    parent_page_types = ['wagtailcore.Page']
+    parent_page_types = ["wagtailcore.Page"]
 
     NUM_RELATED = 6
 
     strapline = models.CharField(blank=True, max_length=255)
-    strapline_link = models.ForeignKey('wagtailcore.Page', related_name='+', on_delete=models.PROTECT)
+    strapline_link = models.ForeignKey(
+        "wagtailcore.Page", related_name="+", on_delete=models.PROTECT
+    )
     strapline_link_text = models.CharField(max_length=255)
 
     news_title = models.CharField(blank=True, max_length=255)
-    news_link = models.ForeignKey('wagtailcore.Page', blank=True, null=True, related_name='+', on_delete=models.PROTECT)
+    news_link = models.ForeignKey(
+        "wagtailcore.Page",
+        blank=True,
+        null=True,
+        related_name="+",
+        on_delete=models.PROTECT,
+    )
     news_link_text = models.CharField(blank=True, max_length=255)
 
     our_work_title = models.CharField(max_length=255)
-    our_work = StreamField([
-        ('work', OurWorkBlock()),
-    ], use_json_field=True)
-    our_work_link = models.ForeignKey('wagtailcore.Page', related_name='+', on_delete=models.PROTECT)
+    our_work = StreamField(
+        [
+            ("work", OurWorkBlock()),
+        ],
+        use_json_field=True,
+    )
+    our_work_link = models.ForeignKey(
+        "wagtailcore.Page", related_name="+", on_delete=models.PROTECT
+    )
     our_work_link_text = models.CharField(max_length=255)
 
     funds_title = models.CharField(max_length=255)
     funds_intro = models.TextField(blank=True)
-    funds_link = models.ForeignKey('wagtailcore.Page', related_name='+', on_delete=models.PROTECT)
+    funds_link = models.ForeignKey(
+        "wagtailcore.Page", related_name="+", on_delete=models.PROTECT
+    )
     funds_link_text = models.CharField(max_length=255)
 
     labs_title = models.CharField(max_length=255)
     labs_intro = models.TextField(blank=True)
-    labs_link = models.ForeignKey('wagtailcore.Page', related_name='+', on_delete=models.PROTECT)
+    labs_link = models.ForeignKey(
+        "wagtailcore.Page", related_name="+", on_delete=models.PROTECT
+    )
     labs_link_text = models.CharField(max_length=255)
 
     rfps_title = models.CharField(max_length=255)
     rfps_intro = models.TextField(blank=True)
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('strapline'),
+        index.SearchField("strapline"),
     ]
 
     content_panels = BasePage.content_panels + [
-        MultiFieldPanel([
-            FieldPanel('strapline'),
-            PageChooserPanel('strapline_link'),
-            FieldPanel('strapline_link_text'),
-        ], heading=_('Introduction')),
-        MultiFieldPanel([
-            FieldPanel('news_title'),
-            PageChooserPanel('news_link'),
-            FieldPanel('news_link_text'),
-        ], heading=_('News')),
-        MultiFieldPanel([
-            FieldPanel('our_work_title'),
-            FieldPanel('our_work'),
-            PageChooserPanel('our_work_link'),
-            FieldPanel('our_work_link_text'),
-        ], heading=_('Our Work')),
-        MultiFieldPanel([
-            FieldPanel('funds_title'),
-            FieldPanel('funds_intro'),
-            InlinePanel('promoted_funds', label=_('Promoted Funds'), max_num=NUM_RELATED),
-            PageChooserPanel('funds_link'),
-            FieldPanel('funds_link_text'),
-        ], heading=_('Funds')),
-        MultiFieldPanel([
-            FieldPanel('labs_title'),
-            FieldPanel('labs_intro'),
-            InlinePanel('promoted_labs', label=_('Promoted Labs'), max_num=NUM_RELATED),
-            PageChooserPanel('labs_link'),
-            FieldPanel('labs_link_text'),
-        ], heading=_('Labs')),
-        MultiFieldPanel([
-            FieldPanel('rfps_title'),
-            FieldPanel('rfps_intro'),
-            InlinePanel('promoted_rfps', label=_('Promoted RFPs'), max_num=NUM_RELATED),
-        ], heading=_('Labs')),
+        MultiFieldPanel(
+            [
+                FieldPanel("strapline"),
+                PageChooserPanel("strapline_link"),
+                FieldPanel("strapline_link_text"),
+            ],
+            heading=_("Introduction"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("news_title"),
+                PageChooserPanel("news_link"),
+                FieldPanel("news_link_text"),
+            ],
+            heading=_("News"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("our_work_title"),
+                FieldPanel("our_work"),
+                PageChooserPanel("our_work_link"),
+                FieldPanel("our_work_link_text"),
+            ],
+            heading=_("Our Work"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("funds_title"),
+                FieldPanel("funds_intro"),
+                InlinePanel(
+                    "promoted_funds", label=_("Promoted Funds"), max_num=NUM_RELATED
+                ),
+                PageChooserPanel("funds_link"),
+                FieldPanel("funds_link_text"),
+            ],
+            heading=_("Funds"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("labs_title"),
+                FieldPanel("labs_intro"),
+                InlinePanel(
+                    "promoted_labs", label=_("Promoted Labs"), max_num=NUM_RELATED
+                ),
+                PageChooserPanel("labs_link"),
+                FieldPanel("labs_link_text"),
+            ],
+            heading=_("Labs"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("rfps_title"),
+                FieldPanel("rfps_intro"),
+                InlinePanel(
+                    "promoted_rfps", label=_("Promoted RFPs"), max_num=NUM_RELATED
+                ),
+            ],
+            heading=_("Labs"),
+        ),
     ]
 
     def get_related(self, page_type, base_list):
-        related = page_type.objects.filter(id__in=base_list.values_list('page')).live().public()
+        related = (
+            page_type.objects.filter(id__in=base_list.values_list("page"))
+            .live()
+            .public()
+        )
         yield from related
-        selected = list(related.values_list('id', flat=True))
+        selected = list(related.values_list("id", flat=True))
         extra_needed = self.NUM_RELATED - len(selected)
         extra_qs = page_type.objects.public().live().exclude(id__in=selected)
         displayed = 0
@@ -166,7 +202,7 @@ class HomePage(BasePage):
 
     def get_context(self, *args, **kwargs):
         context = super().get_context(*args, **kwargs)
-        context['lab_list'] = list(self.get_related(LabPage, self.promoted_labs))
-        context['fund_list'] = list(self.get_related(FundPage, self.promoted_funds))
-        context['rfps_list'] = list(self.get_related(RFPPage, self.promoted_rfps))
+        context["lab_list"] = list(self.get_related(LabPage, self.promoted_labs))
+        context["fund_list"] = list(self.get_related(FundPage, self.promoted_funds))
+        context["rfps_list"] = list(self.get_related(RFPPage, self.promoted_rfps))
         return context
diff --git a/hypha/public/home/templates/home/home_page.html b/hypha/public/home/templates/home/home_page.html
index 1a40ae2864cf2d0e544742e90ce768e36fb67781..a6ee50260e26f88beee258f2c154c5ca9e990c62 100644
--- a/hypha/public/home/templates/home/home_page.html
+++ b/hypha/public/home/templates/home/home_page.html
@@ -10,20 +10,20 @@
         {% endblock %}
 
         <div class="header__inner wrapper wrapper--large">
-            <a href="{% site_logo_link current_site %}" aria-label="Home link">
-            {% if settings.utils.SystemMessagesSettings.site_logo_default %}
-                {% image settings.utils.SystemMessagesSettings.site_logo_default width-215 as logo_default %}
-                <img class="header__logo header__logo--desktop" src="{{ logo_default.url }}">
-                {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
-                    {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
-                    <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
+            <a href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" aria-label="Home link">
+                {% if settings.utils.SystemMessagesSettings.site_logo_default %}
+                    {% image settings.utils.SystemMessagesSettings.site_logo_default width-215 as logo_default %}
+                    <img class="header__logo header__logo--desktop" src="{{ logo_default.url }}">
+                    {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
+                        {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
+                        <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
+                    {% else %}
+                        <img class="header__logo header__logo--mobile" src="{{ logo_default.url }}">
+                    {% endif %}
                 {% else %}
-                    <img class="header__logo header__logo--mobile" src="{{ logo_default.url }}">
+                    <svg class="header__logo header__logo--desktop"><use xlink:href="#logo-desktop--dark-alt"></use></svg>
+                    <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile-dark"></use></svg>
                 {% endif %}
-            {% else %}
-                <svg class="header__logo header__logo--desktop"><use xlink:href="#logo-desktop--dark-alt"></use></svg>
-                <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile-dark"></use></svg>
-            {% endif %}
             </a>
 
             <div class="header__inner header__inner--mobile-buttons">
@@ -49,7 +49,7 @@
 
             <section class="header__menus header__menus--mobile">
                 <div class="header__inner header__inner--menu-open">
-                    <a href="{% site_logo_link current_site %}" aria-label="Home link">
+                    <a href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" aria-label="Home link">
                         {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
                             {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
                             <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
@@ -76,7 +76,6 @@
                 {% if ENABLE_REGISTRATION_WITHOUT_APPLICATION %}
                     {% include "utils/includes/register_button.html" %}
                 {% endif %}
-                <div class="button button--google-translate" id="google_translate_element"></div>
             </div>
         </div>
 
@@ -101,17 +100,17 @@
 
 {% block content %}
     {% if page.news_title and page.news_link and page.news_link_text %}
-    <div class="wrapper wrapper--inner-space-large">
-        <h2 class="heading heading--center heading--focus-areas">{{ page.news_title }}</h2>
-        <div class="wrapper wrapper--center">
-            <h5 class="heading heading--contains-link">
-                <a class="link link--arrow-pixels-blue" href="{% pageurl page.news_link %}">
-                    {{ page.news_link_text }}
-                    <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-                </a>
-            </h5>
+        <div class="wrapper wrapper--inner-space-large">
+            <h2 class="heading heading--center heading--focus-areas">{{ page.news_title }}</h2>
+            <div class="wrapper wrapper--center">
+                <h5 class="heading heading--contains-link">
+                    <a class="link link--arrow-pixels-blue" href="{% pageurl page.news_link %}">
+                        {{ page.news_link_text }}
+                        <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                    </a>
+                </h5>
+            </div>
         </div>
-    </div>
     {% endif %}
     <div class="wrapper wrapper--inner-space-large">
         <h2 class="heading heading--center heading--focus-areas">{{ page.our_work_title }}</h2>
diff --git a/hypha/public/home/templates/home/includes/list_block.html b/hypha/public/home/templates/home/includes/list_block.html
index 6d0813abc8670e64d018a2c2845766ab5ae3f94e..47e2424c15dec3eb2d7ea5a6b64a36bcb7be93b7 100644
--- a/hypha/public/home/templates/home/includes/list_block.html
+++ b/hypha/public/home/templates/home/includes/list_block.html
@@ -1,54 +1,54 @@
 {% load wagtailcore_tags wagtailimages_tags %}
 {% if listing %}
-<div class="wrapper wrapper--breakout wrapper--{{ bg_color }}-bg wrapper--inner-space-xl">
-    <div class="wrapper wrapper--medium">
-        <section class="section section--introduction">
-            <div>
-                <h2>{{ title }}</h2>
-                <p>{{ intro }}</p>
-            </div>
-            {% if link_text and link %}
-                <div class="show-tablet">
-                    <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
-                        {{ link_text }}
-                        <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-                    </a>
+    <div class="wrapper wrapper--breakout wrapper--{{ bg_color }}-bg wrapper--inner-space-xl">
+        <div class="wrapper wrapper--medium">
+            <section class="section section--introduction">
+                <div>
+                    <h2>{{ title }}</h2>
+                    <p>{{ intro }}</p>
                 </div>
-            {% endif %}
-        </section>
+                {% if link_text and link %}
+                    <div class="show-tablet">
+                        <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
+                            {{ link_text }}
+                            <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                        </a>
+                    </div>
+                {% endif %}
+            </section>
 
-        <section class="grid grid--max-three">
-            {% for item in listing %}
-                <a class="card {{ card_modifier }}" href="{{ item.url }}">
-                    {% if item.icon %}
-                        {% image item.icon max-50x50 as icon %}
-                        <img class="card__icon" src="{{ icon.url }}" alt="{{ icon.alt }}">
-                    {% endif %}
-                    {% if item.deadline and False %}
-                        <h6 class="card__subheading">
-                            <svg class="icon icon--calendar apply-bar__icon"><use xlink:href="#calendar"></use></svg>
-                            Next deadline:
-                            <span>{{ item.deadline|date:"M j, Y" }}</span>
-                        </h6>
-                    {% endif %}
-                    <h4 class="card__heading">{{ item }}</h4>
-                    {% if item.listing_summary or item.introduction %}
-                        <p class="card__teaser">{{ item.listing_summary|default:item.introduction|truncatechars_html:130  }}</p>
-                    {% endif %}
-                    <svg class="icon icon--card-pixels"><use xlink:href="#arrow-head-pixels--transparent"></use></svg>
-                </a>
-            {% endfor %}
-        </section>
-        {% if link_text and link %}
-            <div class="wrapper wrapper--center show-mobile">
-                <h5 class="heading heading--contains-link">
-                    <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
-                        {{ link_text }}
-                        <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+            <section class="grid grid--max-three">
+                {% for item in listing %}
+                    <a class="card {{ card_modifier }}" href="{{ item.url }}">
+                        {% if item.icon %}
+                            {% image item.icon max-50x50 as icon %}
+                            <img class="card__icon" src="{{ icon.url }}" alt="{{ icon.alt }}">
+                        {% endif %}
+                        {% if item.deadline and False %}
+                            <h6 class="card__subheading">
+                                <svg class="icon icon--calendar apply-bar__icon"><use xlink:href="#calendar"></use></svg>
+                                Next deadline:
+                                <span>{{ item.deadline|date:"M j, Y" }}</span>
+                            </h6>
+                        {% endif %}
+                        <h4 class="card__heading">{{ item }}</h4>
+                        {% if item.listing_summary or item.introduction %}
+                            <p class="card__teaser">{{ item.listing_summary|default:item.introduction|truncatechars_html:130  }}</p>
+                        {% endif %}
+                        <svg class="icon icon--card-pixels"><use xlink:href="#arrow-head-pixels--transparent"></use></svg>
                     </a>
-                </h5>
-            </div>
-        {% endif %}
+                {% endfor %}
+            </section>
+            {% if link_text and link %}
+                <div class="wrapper wrapper--center show-mobile">
+                    <h5 class="heading heading--contains-link">
+                        <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}">
+                            {{ link_text }}
+                            <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                        </a>
+                    </h5>
+                </div>
+            {% endif %}
+        </div>
     </div>
-</div>
 {% endif %}
diff --git a/hypha/public/home/templatetags/home_tags.py b/hypha/public/home/templatetags/home_tags.py
index 5e4e438690e9e520271d0c17e216cfb798d61880..9f45e71bd9cd9cb8a11d79468e6fb85d8f9e3a17 100644
--- a/hypha/public/home/templatetags/home_tags.py
+++ b/hypha/public/home/templatetags/home_tags.py
@@ -7,6 +7,6 @@ register = template.Library()
 @register.filter(name="spanify", is_safe=True)
 def spanify(text, num_words):
     parts = text.split()
-    parts.insert(num_words, '</span>')
-    parts.insert(0, '<span>')
-    return mark_safe(' '.join(parts))
+    parts.insert(num_words, "</span>")
+    parts.insert(0, "<span>")
+    return mark_safe(" ".join(parts))
diff --git a/hypha/public/mailchimp/apps.py b/hypha/public/mailchimp/apps.py
index e751b9eace5790bbf4126ba0a11924a36b712244..d952a8383af7aef582c6fbf9390c50399d4bdc6c 100644
--- a/hypha/public/mailchimp/apps.py
+++ b/hypha/public/mailchimp/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class MailchimpConfig(AppConfig):
-    name = 'hypha.public.mailchimp'
+    name = "hypha.public.mailchimp"
diff --git a/hypha/public/mailchimp/forms.py b/hypha/public/mailchimp/forms.py
index 5bfde3f361ee50a31ee8981ce1cc01befe9ed805..6e64b51b410a347a270d9c98939c40fdb70abef1 100644
--- a/hypha/public/mailchimp/forms.py
+++ b/hypha/public/mailchimp/forms.py
@@ -3,14 +3,14 @@ from django.utils.translation import gettext_lazy as _
 
 
 class NewsletterForm(forms.Form):
-    email = forms.EmailField(label=_('Email Address'))
-    fname = forms.CharField(label=_('First Name'), required=False)
-    lname = forms.CharField(label=_('Last Name'), required=False)
+    email = forms.EmailField(label=_("Email Address"))
+    fname = forms.CharField(label=_("First Name"), required=False)
+    lname = forms.CharField(label=_("Last Name"), required=False)
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         for field in self.fields.values():
-            class_name = 'input--secondary'
+            class_name = "input--secondary"
             if field.required:
-                class_name += ' input__secondary--required'
-            field.widget.attrs = {'class': class_name}
+                class_name += " input__secondary--required"
+            field.widget.attrs = {"class": class_name}
diff --git a/hypha/public/mailchimp/migrations/0001_add_newsletter_setting.py b/hypha/public/mailchimp/migrations/0001_add_newsletter_setting.py
index 0fba02a23744a9e84236495a361fda7416c6dde1..25a7613a9713b64d66f79116053b7de281975eac 100644
--- a/hypha/public/mailchimp/migrations/0001_add_newsletter_setting.py
+++ b/hypha/public/mailchimp/migrations/0001_add_newsletter_setting.py
@@ -5,23 +5,45 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0041_group_collection_permissions_verbose_name_plural'),
+        ("wagtailcore", "0041_group_collection_permissions_verbose_name_plural"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='NewsletterSettings',
+            name="NewsletterSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('newsletter_title', models.CharField(default='Get the latest internet freedom news', help_text='The title of the newsletter signup form.', max_length=255, verbose_name='Newsletter title')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "newsletter_title",
+                    models.CharField(
+                        default="Get the latest internet freedom news",
+                        help_text="The title of the newsletter signup form.",
+                        max_length=255,
+                        verbose_name="Newsletter title",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'newsletter settings',
+                "verbose_name": "newsletter settings",
             },
         ),
     ]
diff --git a/hypha/public/mailchimp/models.py b/hypha/public/mailchimp/models.py
index 68e66d82818fd962f45e6e32da22e5458aaec4bb..878fbe6895d8aef64c4041dd41558ec8e1cedece 100644
--- a/hypha/public/mailchimp/models.py
+++ b/hypha/public/mailchimp/models.py
@@ -9,15 +9,15 @@ from hypha.core.wagtail.admin import register_public_site_setting
 @register_public_site_setting
 class NewsletterSettings(BaseSiteSetting):
     class Meta:
-        verbose_name = 'newsletter settings'
+        verbose_name = "newsletter settings"
 
     newsletter_title = models.CharField(
         "Newsletter title",
         max_length=255,
-        default='Get the latest internet freedom news',
-        help_text=_('The title of the newsletter signup form.'),
+        default="Get the latest internet freedom news",
+        help_text=_("The title of the newsletter signup form."),
     )
 
     panels = [
-        FieldPanel('newsletter_title'),
+        FieldPanel("newsletter_title"),
     ]
diff --git a/hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html b/hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html
index e451b7b58476135821bf64fd8bba4b8af1fb9251..f56ceafa6783ccca321ec724654a495f22bc246e 100644
--- a/hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html
+++ b/hypha/public/mailchimp/templates/mailchimp/newsletter_signup.html
@@ -1,17 +1,16 @@
-{% if newsletter_enabled %}
 {% load static i18n %}
 
 <h4>{{ settings.mailchimp.NewsletterSettings.newsletter_title }}</h4>
 <form class="form newsletter-form" action="#" data-actionpath="{{ PUBLIC_SITE.root_url }}{% url "newsletter:subscribe" %}" method="post">
     <div>
         {% for field in newsletter_form %}
-        <label for="{{ field.id_for_label }}"{% if field.field.required %} required{% endif %}>
-            <span>{{ field.label }}</span>
-            {% if field.field.required %}
-                <span class="form__required">*</span>
-            {% endif %}
-        </label>
-        {{ field }}
+            <label for="{{ field.id_for_label }}"{% if field.field.required %} required{% endif %}>
+                <span>{{ field.label }}</span>
+                {% if field.field.required %}
+                    <span class="form__required">*</span>
+                {% endif %}
+            </label>
+            {{ field }}
         {% endfor %}
         <div class="form-actions form-wrapper">
             <button class="form-submit button button--transparent--wide link--footer-signup" type="submit">{% trans 'Sign up' %}</button>
@@ -22,8 +21,3 @@
 {% block extra_js %}
     <script src="{% static 'js/public/protect-form.js' %}"></script>
 {% endblock %}
-{% else %}
-<div>
-	<a href="https://www.leverforchange.org/bold-solutions-network/membership/small-grants/">Bold Solutions Network Small Grants & Awards</a>
-</div>
-{% endif %}
diff --git a/hypha/public/mailchimp/tests/test_views.py b/hypha/public/mailchimp/tests/test_views.py
index e3c7795b9bf24b7854eeaad7e9609306c6498986..b5f7d3c69256739b23a5a65abdad70f369f5222b 100644
--- a/hypha/public/mailchimp/tests/test_views.py
+++ b/hypha/public/mailchimp/tests/test_views.py
@@ -9,40 +9,50 @@ any_url = re.compile(".")
 
 
 class TestNewsletterView(TestCase):
-    url = reverse('newsletter:subscribe')
+    url = reverse("newsletter:subscribe")
 
     def setUp(self):
-        self.origin = 'https://testserver/'
+        self.origin = "https://testserver/"
 
     def assertNewsletterRedirects(self, response, target_url, *args, **kwargs):
         url = response.redirect_chain[0][0]
         parts = parse.urlsplit(url)
-        self.assertTrue(parts.query.startswith('newsletter-'))
-        target_url = target_url + '?' + parts.query
+        self.assertTrue(parts.query.startswith("newsletter-"))
+        target_url = target_url + "?" + parts.query
         return self.assertRedirects(response, target_url, *args, **kwargs)
 
     def test_redirected_home_if_get(self):
         response = self.client.get(self.url, secure=True, follow=True)
         request = response.request
-        self.assertRedirects(response, '{}://{}/'.format(request['wsgi.url_scheme'], request['SERVER_NAME']))
+        self.assertRedirects(
+            response,
+            "{}://{}/".format(request["wsgi.url_scheme"], request["SERVER_NAME"]),
+        )
 
-    @override_settings(
-        MAILCHIMP_API_KEY='a' * 32,
-        MAILCHIMP_LIST_ID='12345'
-    )
+    @override_settings(MAILCHIMP_API_KEY="a" * 32, MAILCHIMP_LIST_ID="12345")
     def test_can_subscribe(self):
-        with mock.patch("hypha.public.mailchimp.views.subscribe_to_mailchimp") as mc_mock:
+        with mock.patch(
+            "hypha.public.mailchimp.views.subscribe_to_mailchimp"
+        ) as mc_mock:
             mc_mock.return_value = None
-            response = self.client.post(self.url, data={'email': 'email@email.com'}, secure=True, follow=True)
+            response = self.client.post(
+                self.url, data={"email": "email@email.com"}, secure=True, follow=True
+            )
 
             self.assertNewsletterRedirects(response, self.origin)
 
-            mc_mock.assert_called_once_with(email='email@email.com', data={'fname': '', 'lname': ''})
+            mc_mock.assert_called_once_with(
+                email="email@email.com", data={"fname": "", "lname": ""}
+            )
 
     def test_error_in_form(self):
-        with mock.patch("hypha.public.mailchimp.views.subscribe_to_mailchimp") as mc_mock:
+        with mock.patch(
+            "hypha.public.mailchimp.views.subscribe_to_mailchimp"
+        ) as mc_mock:
             mc_mock.return_value = None
-            response = self.client.post(self.url, data={'email': 'email_is_bad.com'}, secure=True, follow=True)
+            response = self.client.post(
+                self.url, data={"email": "email_is_bad.com"}, secure=True, follow=True
+            )
             self.assertNewsletterRedirects(response, self.origin)
 
-            assert not mc_mock.called, 'method should not have been called'
+            assert not mc_mock.called, "method should not have been called"
diff --git a/hypha/public/mailchimp/urls.py b/hypha/public/mailchimp/urls.py
index f6500f54045cc9e2c3b338a28f60c79d1f369f79..82819cc22f6d2b79f5cb6228237d57a562ffa4fa 100644
--- a/hypha/public/mailchimp/urls.py
+++ b/hypha/public/mailchimp/urls.py
@@ -2,9 +2,7 @@ from django.urls import path
 
 from .views import MailchimpSubscribeView
 
-app_name = 'newsletter'
+app_name = "newsletter"
 
 
-urlpatterns = [
-    path('subscribe/', MailchimpSubscribeView.as_view(), name='subscribe')
-]
+urlpatterns = [path("subscribe/", MailchimpSubscribeView.as_view(), name="subscribe")]
diff --git a/hypha/public/mailchimp/views.py b/hypha/public/mailchimp/views.py
index e0c0d872ccda5c5961fce7aee9f1d1aa4cff2ff3..4fe50350e5de248e8890bf78dbcdd11be37067cc 100644
--- a/hypha/public/mailchimp/views.py
+++ b/hypha/public/mailchimp/views.py
@@ -20,12 +20,12 @@ logger = logging.getLogger(__name__)
 def subscribe_to_mailchimp(email: str, data) -> None:
     mailchimp_enabled = settings.MAILCHIMP_API_KEY and settings.MAILCHIMP_LIST_ID
 
-    dummy_key = 'a' * 32
+    dummy_key = "a" * 32
 
     if not mailchimp_enabled:
         raise Exception(
-            f'Incorrect Mailchimp configuration: '
-            f'API_KEY: {settings.MAILCHIMP_API_KEY}, LIST_ID: {settings.MAILCHIMP_LIST_ID}'
+            f"Incorrect Mailchimp configuration: "
+            f"API_KEY: {settings.MAILCHIMP_API_KEY}, LIST_ID: {settings.MAILCHIMP_LIST_ID}"
         )
 
     client = MailChimp(
@@ -38,16 +38,22 @@ def subscribe_to_mailchimp(email: str, data) -> None:
     client.lists.members.create(
         settings.MAILCHIMP_LIST_ID,
         {
-            'email_address': email,
-            'status': 'pending',
-            'merge_fields': data,
+            "email_address": email,
+            "status": "pending",
+            "merge_fields": data,
         },
     )
 
 
-@method_decorator(ratelimit(key='ip', rate=settings.DEFAULT_RATE_LIMIT, method='POST'), name='dispatch')
-@method_decorator(ratelimit(key='post:email', rate=settings.DEFAULT_RATE_LIMIT, method='POST'), name='dispatch')
-@method_decorator(csrf_exempt, name='dispatch')
+@method_decorator(
+    ratelimit(key="ip", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+@method_decorator(
+    ratelimit(key="post:email", rate=settings.DEFAULT_RATE_LIMIT, method="POST"),
+    name="dispatch",
+)
+@method_decorator(csrf_exempt, name="dispatch")
 class MailchimpSubscribeView(FormMixin, RedirectView):
     form_class = NewsletterForm
 
@@ -64,7 +70,7 @@ class MailchimpSubscribeView(FormMixin, RedirectView):
 
     def form_valid(self, form):
         data = form.cleaned_data.copy()
-        email = data.pop('email')
+        email = data.pop("email")
 
         try:
             subscribe_to_mailchimp(email=email, data=data)
@@ -77,27 +83,31 @@ class MailchimpSubscribeView(FormMixin, RedirectView):
     def error(self, form):
         messages.error(
             self.request,
-            _('Sorry, there were errors with your form.') + str(form.errors),
+            _("Sorry, there were errors with your form.") + str(form.errors),
         )
 
     def warning(self, e):
         messages.warning(
-            self.request, _('Sorry, there has been an problem. Please try again later.')
+            self.request, _("Sorry, there has been an problem. Please try again later.")
         )
         # If there is a problem with subscribing uncomment this to get notifications.
         # When things work warnings is only about spam scipts.
         # logger.error(e.args[0])
 
     def success(self):
-        messages.success(self.request, _('Thank you for subscribing'))
+        messages.success(self.request, _("Thank you for subscribing"))
 
     def get_success_url(self):
         # Go back to where you came from, default to front page.
-        origin = self.request.META.get('HTTP_ORIGIN') or self.request.META.get('HTTP_REFERER') or '/'
+        origin = (
+            self.request.META.get("HTTP_ORIGIN")
+            or self.request.META.get("HTTP_REFERER")
+            or "/"
+        )
 
         # Add cache busting query string.
-        return origin + '?newsletter-' + uuid.uuid4().hex
+        return origin + "?newsletter-" + uuid.uuid4().hex
 
     def get_redirect_url(self):
         # We don't know where you came from, go home
-        return '/'
+        return "/"
diff --git a/hypha/public/navigation/migrations/0001_initial.py b/hypha/public/navigation/migrations/0001_initial.py
index f40af63dbddd126609179fedec4fd6bc9a5e3be5..40a29e99ed0f3e853d4336b21ea12ac310664e9a 100644
--- a/hypha/public/navigation/migrations/0001_initial.py
+++ b/hypha/public/navigation/migrations/0001_initial.py
@@ -9,26 +9,151 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
+        ("wagtailcore", "0040_page_draft_title"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='NavigationSettings',
+            name="NavigationSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('primary_navigation', wagtail.fields.StreamField((('link', wagtail.blocks.StructBlock((('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(help_text="Leave blank to use the page's own title", required=False))))),), blank=True, help_text='Main site navigation')),
-                ('secondary_navigation', wagtail.fields.StreamField((('link', wagtail.blocks.StructBlock((('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(help_text="Leave blank to use the page's own title", required=False))))),), blank=True, help_text='Alternative navigation')),
-                ('footer_navigation', wagtail.fields.StreamField((('column', wagtail.blocks.StructBlock((('heading', wagtail.blocks.CharBlock(required=False, help_text='Leave blank if no header required.')), ('links', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock((('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(help_text="Leave blank to use the page's own title", required=False))))))))),), blank=True, help_text='Multiple columns of footer links with optional header.')),
-                ('footer_links', wagtail.fields.StreamField((('link', wagtail.blocks.StructBlock((('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(help_text="Leave blank to use the page's own title", required=False))))),), blank=True, help_text='Single list of elements at the base of the page.')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "primary_navigation",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "link",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        ("page", wagtail.blocks.PageChooserBlock()),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Leave blank to use the page's own title",
+                                                required=False,
+                                            ),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        ),
+                        blank=True,
+                        help_text="Main site navigation",
+                    ),
+                ),
+                (
+                    "secondary_navigation",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "link",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        ("page", wagtail.blocks.PageChooserBlock()),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Leave blank to use the page's own title",
+                                                required=False,
+                                            ),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        ),
+                        blank=True,
+                        help_text="Alternative navigation",
+                    ),
+                ),
+                (
+                    "footer_navigation",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "column",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "heading",
+                                            wagtail.blocks.CharBlock(
+                                                required=False,
+                                                help_text="Leave blank if no header required.",
+                                            ),
+                                        ),
+                                        (
+                                            "links",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.StructBlock(
+                                                    (
+                                                        (
+                                                            "page",
+                                                            wagtail.blocks.PageChooserBlock(),
+                                                        ),
+                                                        (
+                                                            "title",
+                                                            wagtail.blocks.CharBlock(
+                                                                help_text="Leave blank to use the page's own title",
+                                                                required=False,
+                                                            ),
+                                                        ),
+                                                    )
+                                                )
+                                            ),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        ),
+                        blank=True,
+                        help_text="Multiple columns of footer links with optional header.",
+                    ),
+                ),
+                (
+                    "footer_links",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "link",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        ("page", wagtail.blocks.PageChooserBlock()),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Leave blank to use the page's own title",
+                                                required=False,
+                                            ),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        ),
+                        blank=True,
+                        help_text="Single list of elements at the base of the page.",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/navigation/migrations/0002_remove_unused_navigation_elements.py b/hypha/public/navigation/migrations/0002_remove_unused_navigation_elements.py
index e3a9d091357f485095340e4bd6c7d8e6647bfa70..a9ef2ff6dd5d11420658d7f6ed52a09351f545f6 100644
--- a/hypha/public/navigation/migrations/0002_remove_unused_navigation_elements.py
+++ b/hypha/public/navigation/migrations/0002_remove_unused_navigation_elements.py
@@ -5,22 +5,21 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('navigation', '0001_initial'),
+        ("navigation", "0001_initial"),
     ]
 
     operations = [
         migrations.RemoveField(
-            model_name='navigationsettings',
-            name='footer_links',
+            model_name="navigationsettings",
+            name="footer_links",
         ),
         migrations.RemoveField(
-            model_name='navigationsettings',
-            name='footer_navigation',
+            model_name="navigationsettings",
+            name="footer_navigation",
         ),
         migrations.RemoveField(
-            model_name='navigationsettings',
-            name='secondary_navigation',
+            model_name="navigationsettings",
+            name="secondary_navigation",
         ),
     ]
diff --git a/hypha/public/navigation/migrations/0003_alter_navigationsettings_primary_navigation.py b/hypha/public/navigation/migrations/0003_alter_navigationsettings_primary_navigation.py
index 9f8fc2062094b2ee6444803d221d8923083fcb9b..5f56cbf855afad771b2e881b889b5a72e33c0b4a 100644
--- a/hypha/public/navigation/migrations/0003_alter_navigationsettings_primary_navigation.py
+++ b/hypha/public/navigation/migrations/0003_alter_navigationsettings_primary_navigation.py
@@ -6,15 +6,35 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('navigation', '0002_remove_unused_navigation_elements'),
+        ("navigation", "0002_remove_unused_navigation_elements"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='navigationsettings',
-            name='primary_navigation',
-            field=wagtail.fields.StreamField([('link', wagtail.blocks.StructBlock([('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(help_text="Leave blank to use the page's own title", required=False))]))], blank=True, help_text='Main site navigation', use_json_field=True),
+            model_name="navigationsettings",
+            name="primary_navigation",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "link",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("page", wagtail.blocks.PageChooserBlock()),
+                                (
+                                    "title",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Leave blank to use the page's own title",
+                                        required=False,
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                help_text="Main site navigation",
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/navigation/models.py b/hypha/public/navigation/models.py
index d49fa4938d95160dd20fa84949abff04f08fade6..14125c1baef889c749e7bd568c1efa0c60985992 100644
--- a/hypha/public/navigation/models.py
+++ b/hypha/public/navigation/models.py
@@ -10,21 +10,25 @@ from hypha.core.wagtail.admin import register_public_site_setting
 
 class LinkBlock(blocks.StructBlock):
     page = blocks.PageChooserBlock()
-    title = blocks.CharBlock(help_text=_("Leave blank to use the page's own title"), required=False)
+    title = blocks.CharBlock(
+        help_text=_("Leave blank to use the page's own title"), required=False
+    )
 
     class Meta:
-        template = 'navigation/blocks/menu_item.html',
+        template = ("navigation/blocks/menu_item.html",)
 
 
-@register_public_site_setting(icon='', classnames='icon icon-list-ul')
+@register_public_site_setting(icon="", classnames="icon icon-list-ul")
 class NavigationSettings(BaseSiteSetting, ClusterableModel):
     primary_navigation = StreamField(
-        [('link', LinkBlock()), ],
+        [
+            ("link", LinkBlock()),
+        ],
         blank=True,
-        help_text=_('Main site navigation'),
+        help_text=_("Main site navigation"),
         use_json_field=True,
     )
 
     panels = [
-        FieldPanel('primary_navigation'),
+        FieldPanel("primary_navigation"),
     ]
diff --git a/hypha/public/navigation/templates/navigation/breadcrumbs.html b/hypha/public/navigation/templates/navigation/breadcrumbs.html
index c27bd3a2dbceb632e4da18f83b6ad0afb3383af9..742343c26ed8bc877bd997e8a61f9a51eaefdc78 100644
--- a/hypha/public/navigation/templates/navigation/breadcrumbs.html
+++ b/hypha/public/navigation/templates/navigation/breadcrumbs.html
@@ -1,4 +1,4 @@
-{% load wagtailcore_tags util_tags %}
+{% load wagtailcore_tags %}
 
 {% if page.get_ancestors|length > 2 %}
     <nav role="navigation" aria-label="breadcrumb">
@@ -11,7 +11,7 @@
                         </li>
                     {% else %}
                         <li class="nav__item nav__item--breadcrumb">
-                            <a class="nav__link nav__link--breadcrumb" href="{% site_logo_link current_site %}" title="Home">
+                            <a class="nav__link nav__link--breadcrumb" href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" title="Home">
                                 Home
                             </a>
                         </li>
diff --git a/hypha/public/navigation/templates/navigation/includes/menu_item.html b/hypha/public/navigation/templates/navigation/includes/menu_item.html
index f69e80b642ae7e93effd072dcdc0385278c79093..06c413bf957d4efabcf72df65207bc6c98cbdf17 100644
--- a/hypha/public/navigation/templates/navigation/includes/menu_item.html
+++ b/hypha/public/navigation/templates/navigation/includes/menu_item.html
@@ -1,9 +1,9 @@
 {% load wagtailcore_tags %}{% pageurl page=page as item_url %}
 <li class="nav__item{% if class %} nav__item--{{class}}{% endif %}{% if has_children %} nav__item--is-parent{% endif %}" role="presentation">
     <a class="nav__link{% if has_children %} js-open-subnav{% endif %}" href="{{ item_url }}"
-        role="menuitem"
-        {% if has_children %} aria-haspopup="true" {% endif %}
-        >
+       role="menuitem"
+       {% if has_children %} aria-haspopup="true" {% endif %}
+    >
         {{ title|default:page.title }}
         {% if has_children %}
             <span class="nav__icon">&rsaquo;</span>
diff --git a/hypha/public/navigation/templates/navigation/primarynav-apply.html b/hypha/public/navigation/templates/navigation/primarynav-apply.html
index ca7fccd32c7dc88aa366f5ff2bfdfadf7b7e0fe8..72f8366482e3ca23c99c7f4a4fb686f468a5b484 100644
--- a/hypha/public/navigation/templates/navigation/primarynav-apply.html
+++ b/hypha/public/navigation/templates/navigation/primarynav-apply.html
@@ -1,14 +1,16 @@
-<nav role="navigation" aria-label="Primary" hx-boost="true">
-    <ul class="nav nav--primary" role="menubar">
-        {% if request.user.is_apply_staff %}
-            {% include "navigation/primarynav-apply-item.html" with name="My dashboard" url="dashboard:dashboard" %}
-            {% include "navigation/primarynav-apply-item.html" with name="Submissions" url="funds:submissions:overview" %}
-            {% include "navigation/primarynav-apply-item.html" with name="Projects" url="apply:projects:overview" %}
-        {% elif request.user.is_finance %}
-            {% include "navigation/primarynav-apply-item.html" with name="My dashboard" url="dashboard:dashboard" %}
-            {% include "navigation/primarynav-apply-item.html" with name="Projects" url="apply:projects:overview" %}
-        {% else %}
-            {% include "navigation/primarynav-apply-item.html" with name="My dashboard" url="dashboard:dashboard" %}
-        {% endif %}
-    </ul>
-</nav>
+{% if request.user.is_authenticated %}
+    <nav role="navigation" aria-label="Primary">
+        <ul class="nav nav--primary" role="menubar">
+            {% if request.user.is_apply_staff %}
+                {% include "navigation/primarynav-apply-item.html" with name="My dashboard" url="dashboard:dashboard" %}
+                {% include "navigation/primarynav-apply-item.html" with name="Submissions" url="funds:submissions:overview" %}
+                {% include "navigation/primarynav-apply-item.html" with name="Projects" url="apply:projects:overview" %}
+            {% elif request.user.is_finance or request.user.is_contracting %}
+                {% include "navigation/primarynav-apply-item.html" with name="My dashboard" url="dashboard:dashboard" %}
+                {% include "navigation/primarynav-apply-item.html" with name="Projects" url="apply:projects:overview" %}
+            {% else %}
+                {% include "navigation/primarynav-apply-item.html" with name="My dashboard" url="dashboard:dashboard" %}
+            {% endif %}
+        </ul>
+    </nav>
+{% endif %}
diff --git a/hypha/public/navigation/templatetags/navigation_tags.py b/hypha/public/navigation/templatetags/navigation_tags.py
index dfd1a1d27f8111f9330930ce67fa940098495ca8..28a37cf4595fb26590c1280cec2e60a5587b2407 100644
--- a/hypha/public/navigation/templatetags/navigation_tags.py
+++ b/hypha/public/navigation/templatetags/navigation_tags.py
@@ -7,14 +7,14 @@ register = template.Library()
 
 
 # Primary nav snippets
-@register.inclusion_tag('navigation/primarynav.html', takes_context=True)
+@register.inclusion_tag("navigation/primarynav.html", takes_context=True)
 def primarynav(context):
-    request = context['request']
+    request = context["request"]
     site_from_request = Site.find_for_request(request)
-    site = context.get('PUBLIC_SITE', site_from_request)
-    apply_site = context.get('APPLY_SITE', site_from_request)
+    site = context.get("PUBLIC_SITE", site_from_request)
+    apply_site = context.get("APPLY_SITE", site_from_request)
     return {
-        'primarynav': NavigationSettings.for_site(site).primary_navigation,
-        'request': request,
-        'APPLY_SITE': apply_site,
+        "primarynav": NavigationSettings.for_site(site).primary_navigation,
+        "request": request,
+        "APPLY_SITE": apply_site,
     }
diff --git a/hypha/public/news/blocks.py b/hypha/public/news/blocks.py
index ee0fd26f445465699f4a43cb21e6666f9e3ce083..b9ae574ddaaf0e22e873a9db080d3e1a530f999d 100644
--- a/hypha/public/news/blocks.py
+++ b/hypha/public/news/blocks.py
@@ -7,7 +7,9 @@ from hypha.public.utils.blocks import StoryBlock
 class AwesomeTableWidgetBlock(blocks.StructBlock):
     table_id = blocks.CharBlock(
         classname="title",
-        help_text=_('Please enter only table id from embed code. Table widget code creates automatically.')
+        help_text=_(
+            "Please enter only table id from embed code. Table widget code creates automatically."
+        ),
     )
 
     class Meta:
diff --git a/hypha/public/news/feeds.py b/hypha/public/news/feeds.py
index ece9f4febaf3a52fb4b654cc280b25ec16e2e13b..26739305a9620e2d7a8df4c81359a95f70dff058 100644
--- a/hypha/public/news/feeds.py
+++ b/hypha/public/news/feeds.py
@@ -26,7 +26,7 @@ class NewsFeed(Feed):
         return response
 
     def get_cache_key(self, *args, **kwargs):
-        tag = ''
+        tag = ""
         for key, value in kwargs.items():
             tag += f"-{key}-{value}"
         return f"{self.__class__.__module__}{tag}"
@@ -44,9 +44,12 @@ class NewsFeed(Feed):
         return self.site.root_url
 
     def items(self):
-        return NewsPage.objects.live().public().annotate(
-            date=Coalesce('publication_date', 'first_published_at')
-        ).order_by('-date')[:20]
+        return (
+            NewsPage.objects.live()
+            .public()
+            .annotate(date=Coalesce("publication_date", "first_published_at"))
+            .order_by("-date")[:20]
+        )
 
     def item_title(self, item):
         return item.title
@@ -75,6 +78,10 @@ class NewsTypeFeed(NewsFeed):
         return self.site.root_url
 
     def items(self, obj):
-        return NewsPage.objects.live().public().filter(news_types__news_type=obj).annotate(
-            date=Coalesce('publication_date', 'first_published_at')
-        ).order_by('-date')[:20]
+        return (
+            NewsPage.objects.live()
+            .public()
+            .filter(news_types__news_type=obj)
+            .annotate(date=Coalesce("publication_date", "first_published_at"))
+            .order_by("-date")[:20]
+        )
diff --git a/hypha/public/news/management/commands/migrate_news.py b/hypha/public/news/management/commands/migrate_news.py
index 73b7e7ab83e91da60f1c320c2aab498efe3dbc0b..2edc0cc0aa0a55c49294763a508dd94148ff6249 100644
--- a/hypha/public/news/management/commands/migrate_news.py
+++ b/hypha/public/news/management/commands/migrate_news.py
@@ -30,28 +30,32 @@ class Command(BaseCommand):
     whitelister = EditorHTMLConverter().whitelister
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
         # Prepare the list of categories.
         for item in CATEGORIES:
-            category, _ = Category.objects.get_or_create(name=item['category'])
-            option, _ = Option.objects.get_or_create(value=item['name'], category=category)
-            self.terms[item['tid']] = option
+            category, _ = Category.objects.get_or_create(name=item["category"])
+            option, _ = Option.objects.get_or_create(
+                value=item["name"], category=category
+            )
+            self.terms[item["tid"]] = option
 
         self.parent_page = NewsIndex.objects.first()
 
         if not self.parent_page:
-            raise NewsIndex.DoesNotExist('News Index Page must exist to import News')
+            raise NewsIndex.DoesNotExist("News Index Page must exist to import News")
 
         self.types = {
-            '4': NewsType.objects.get_or_create(title='Press Clip')[0],
-            '5': NewsType.objects.get_or_create(title='Program Update')[0],
-            '388': NewsType.objects.get_or_create(title='Research')[0],
+            "4": NewsType.objects.get_or_create(title="Press Clip")[0],
+            "5": NewsType.objects.get_or_create(title="Program Update")[0],
+            "388": NewsType.objects.get_or_create(title="Research")[0],
         }
 
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             counter = 0
@@ -65,67 +69,77 @@ class Command(BaseCommand):
         node = self.data[id]
 
         try:
-            news = NewsPage.objects.get(drupal_id=node['nid'])
+            news = NewsPage.objects.get(drupal_id=node["nid"])
         except NewsPage.DoesNotExist:
-            news = NewsPage(drupal_id=node['nid'])
+            news = NewsPage(drupal_id=node["nid"])
 
         # TODO timezone?
-        news.submit_time = datetime.fromtimestamp(int(node['created']), timezone.utc)
-        news.publication_date = datetime.fromtimestamp(int(node['created']), timezone.utc)
+        news.submit_time = datetime.fromtimestamp(int(node["created"]), timezone.utc)
+        news.publication_date = datetime.fromtimestamp(
+            int(node["created"]), timezone.utc
+        )
 
-        news.title = node['title']
+        news.title = node["title"]
 
-        news.introduction = self.get_field(node, 'field_preamble')
+        news.introduction = self.get_field(node, "field_preamble")
 
-        cleaned_body = self.whitelister.clean(self.get_field(node, 'body'))
-        news.body = [('paragraph', RichText(cleaned_body))]
+        cleaned_body = self.whitelister.clean(self.get_field(node, "body"))
+        news.body = [("paragraph", RichText(cleaned_body))]
 
         news.news_types.clear()
-        for news_type in self.ensure_iterable(node['field_article_type']):
-            news.news_types.add(NewsPageNewsType(
-                news_type=self.types[news_type['tid']],
-            ))
+        for news_type in self.ensure_iterable(node["field_article_type"]):
+            news.news_types.add(
+                NewsPageNewsType(
+                    news_type=self.types[news_type["tid"]],
+                )
+            )
 
         news.related_projects.clear()
-        for project in self.ensure_iterable(node['field_article_project']):
+        for project in self.ensure_iterable(node["field_article_project"]):
             try:
-                project_page = ProjectPage.objects.get(drupal_id=project['target_id'])
+                project_page = ProjectPage.objects.get(drupal_id=project["target_id"])
             except ProjectPage.DoesNotExist:
                 self.stdout.write(f"Missing project ID {project['target_id']}")
             else:
-                news.related_projects.add(NewsProjectRelatedPage(
-                    page=project_page,
-                ))
+                news.related_projects.add(
+                    NewsProjectRelatedPage(
+                        page=project_page,
+                    )
+                )
 
         news.authors.clear()
-        for author in self.ensure_iterable(node['field_article_authors']):
-            user = User.objects.get(drupal_id=author['target_id'])
-            news.authors.add(NewsPageAuthor(
-                author=PersonPage.objects.get(title=user.full_name)
-            ))
+        for author in self.ensure_iterable(node["field_article_authors"]):
+            user = User.objects.get(drupal_id=author["target_id"])
+            news.authors.add(
+                NewsPageAuthor(author=PersonPage.objects.get(title=user.full_name))
+            )
 
         try:
-            user = User.objects.get(drupal_id=node['uid'])
+            user = User.objects.get(drupal_id=node["uid"])
         except User.DoesNotExist:
             pass
         else:
-            user_map = {'Dan Blah': 'Dan "Blah" Meredith'}
+            user_map = {"Dan Blah": 'Dan "Blah" Meredith'}
             name = user_map.get(user.full_name, user.full_name)
             # missing amin jobran
             try:
-                news.authors.add(NewsPageAuthor(
-                    author=PersonPage.objects.get(title=name)
-                ))
+                news.authors.add(
+                    NewsPageAuthor(author=PersonPage.objects.get(title=name))
+                )
             except PersonPage.DoesNotExist:
-                self.stdout.write(f'Missing person page: {name}')
+                self.stdout.write(f"Missing person page: {name}")
 
         try:
             if not news.get_parent():
                 self.parent_page.add_child(instance=news)
             news.save_revision().publish()
-            self.stdout.write(f"Processed \"{node['title'].encode('utf8')}\" ({node['nid']})")
+            self.stdout.write(
+                f"Processed \"{node['title'].encode('utf8')}\" ({node['nid']})"
+            )
         except IntegrityError:
-            self.stdout.write(f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
 
     def ensure_iterable(self, value):
         if isinstance(value, dict):
@@ -134,10 +148,10 @@ class Command(BaseCommand):
 
     def get_field(self, node, field):
         try:
-            return node[field]['safe_value']
+            return node[field]["safe_value"]
         except TypeError:
             pass
         try:
-            return node[field]['value']
+            return node[field]["value"]
         except TypeError:
-            return ''
+            return ""
diff --git a/hypha/public/news/migrations/0001_initial.py b/hypha/public/news/migrations/0001_initial.py
index d1961a1e4a7bb6da0a8e6c0d9532d0cc3022110d..55f6e7a6e5ef9ae64c9a6a9b1b9994b49608686f 100644
--- a/hypha/public/news/migrations/0001_initial.py
+++ b/hypha/public/news/migrations/0001_initial.py
@@ -14,76 +14,294 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('images', '0001_initial'),
-        ('wagtailcore', '0032_add_bulk_delete_page_permission'),
-        ('wagtaildocs', '0007_merge'),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0032_add_bulk_delete_page_permission"),
+        ("wagtaildocs", "0007_merge"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='NewsType',
+            name="NewsType",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.CharField(max_length=128)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.CharField(max_length=128)),
             ],
         ),
         migrations.CreateModel(
-            name='NewsIndex',
+            name="NewsIndex",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='NewsPage',
+            name="NewsPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('publication_date', models.DateTimeField(blank=True, help_text='Use this field to override the date that the news item appears to have been published.', null=True)),
-                ('introduction', models.TextField(blank=True)),
-
-                ('body', wagtail.fields.StreamField((('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock((('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))))), ('quote', wagtail.blocks.StructBlock((('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))))), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock((('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False)))))))),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "publication_date",
+                    models.DateTimeField(
+                        blank=True,
+                        help_text="Use this field to override the date that the news item appears to have been published.",
+                        null=True,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "body",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "heading",
+                                wagtail.blocks.CharBlock(
+                                    classname="full title", icon="title"
+                                ),
+                            ),
+                            ("paragraph", wagtail.blocks.RichTextBlock()),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(),
+                                        ),
+                                        (
+                                            "caption",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(classname="title"),
+                                        ),
+                                        (
+                                            "attribution",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                        (
+                                            "job_title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                            (
+                                "call_to_action",
+                                wagtail.snippets.blocks.SnippetChooserBlock(
+                                    "utils.CallToActionSnippet",
+                                    template="blocks/call_to_action_block.html",
+                                ),
+                            ),
+                            (
+                                "document",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "document",
+                                            wagtail.documents.blocks.DocumentChooserBlock(),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        )
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='NewsPageNewsType',
+            name="NewsPageNewsType",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('news_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='NewsType')),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='news_types', to='news.NewsPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "news_type",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="+",
+                        to="NewsType",
+                    ),
+                ),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="news_types",
+                        to="news.NewsPage",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='NewsPageRelatedPage',
+            name="NewsPageRelatedPage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_pages', to='news.NewsPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="related_pages",
+                        to="news.NewsPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/news/migrations/0002_add_header_image.py b/hypha/public/news/migrations/0002_add_header_image.py
index 1cce5bc5f0661af95fbc6a3c95ef5e57989a664d..3b97b4c3d5714de5198c811a8e0f67b2dc86ccc8 100644
--- a/hypha/public/news/migrations/0002_add_header_image.py
+++ b/hypha/public/news/migrations/0002_add_header_image.py
@@ -7,21 +7,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('news', '0001_initial'),
+        ("images", "0001_initial"),
+        ("news", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='newsindex',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="newsindex",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
         migrations.AddField(
-            model_name='newspage',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="newspage",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
     ]
diff --git a/hypha/public/news/migrations/0003_newspageauthor.py b/hypha/public/news/migrations/0003_newspageauthor.py
index e6835c505ddb98c98100f9301074413194dd4477..d595032387bb2efabe8f8f835d56d23af765da81 100644
--- a/hypha/public/news/migrations/0003_newspageauthor.py
+++ b/hypha/public/news/migrations/0003_newspageauthor.py
@@ -8,24 +8,50 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('news', '0002_add_header_image'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("news", "0002_add_header_image"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='NewsPageAuthor',
+            name="NewsPageAuthor",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='authors', to='news.NewsPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "author",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="authors",
+                        to="news.NewsPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/news/migrations/0004_make_author_required.py b/hypha/public/news/migrations/0004_make_author_required.py
index 9faddebf05803e73754e4548777430e5ea631cb6..5282ebf8556d22b7147d8ef668972c870015b67f 100644
--- a/hypha/public/news/migrations/0004_make_author_required.py
+++ b/hypha/public/news/migrations/0004_make_author_required.py
@@ -7,16 +7,20 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0003_newspageauthor'),
+        ("news", "0003_newspageauthor"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspageauthor',
-            name='author',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.Page'),
+            model_name="newspageauthor",
+            name="author",
+            field=models.ForeignKey(
+                default=1,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
             preserve_default=False,
         ),
     ]
diff --git a/hypha/public/news/migrations/0005_newsprojectrelatedpage.py b/hypha/public/news/migrations/0005_newsprojectrelatedpage.py
index 4e32d8f35c15c4c6660bbaf11a9751efd1f18fb8..8ba4aae7646c225319f0bb6f636b3af596eeda70 100644
--- a/hypha/public/news/migrations/0005_newsprojectrelatedpage.py
+++ b/hypha/public/news/migrations/0005_newsprojectrelatedpage.py
@@ -8,24 +8,50 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('news', '0004_make_author_required'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("news", "0004_make_author_required"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='NewsProjectRelatedPage',
+            name="NewsProjectRelatedPage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='news_mentions', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_projects', to='news.NewsPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="news_mentions",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="related_projects",
+                        to="news.NewsPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/news/migrations/0006_newspage_drupal_id.py b/hypha/public/news/migrations/0006_newspage_drupal_id.py
index 0638e9f29be72684b77eea38d7015117583f2b52..3940fe298a642eda6cf34b3a65d59fb4f9317185 100644
--- a/hypha/public/news/migrations/0006_newspage_drupal_id.py
+++ b/hypha/public/news/migrations/0006_newspage_drupal_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0005_newsprojectrelatedpage'),
+        ("news", "0005_newsprojectrelatedpage"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='newspage',
-            name='drupal_id',
+            model_name="newspage",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/public/news/migrations/0007_newsindex_introduction.py b/hypha/public/news/migrations/0007_newsindex_introduction.py
index 82caa035da714a9a9ff7c56c56a34dd8064c9824..2974940fb7dd648f7faf7a233a4f136afedd2cef 100644
--- a/hypha/public/news/migrations/0007_newsindex_introduction.py
+++ b/hypha/public/news/migrations/0007_newsindex_introduction.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0006_newspage_drupal_id'),
+        ("news", "0006_newspage_drupal_id"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='newsindex',
-            name='introduction',
+            model_name="newsindex",
+            name="introduction",
             field=models.TextField(blank=True),
         ),
     ]
diff --git a/hypha/public/news/migrations/0008_correct_related_page_behaviour.py b/hypha/public/news/migrations/0008_correct_related_page_behaviour.py
index cc73bad761d0af282de744b1f72a8f307df17c3c..3e9566be01758c69168fffe7e4426ee5755eeb53 100644
--- a/hypha/public/news/migrations/0008_correct_related_page_behaviour.py
+++ b/hypha/public/news/migrations/0008_correct_related_page_behaviour.py
@@ -5,20 +5,27 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0007_newsindex_introduction'),
+        ("news", "0007_newsindex_introduction"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspagerelatedpage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="newspagerelatedpage",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
         migrations.AlterField(
-            model_name='newsprojectrelatedpage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='news_mentions', to='wagtailcore.Page'),
+            model_name="newsprojectrelatedpage",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="news_mentions",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/news/migrations/0009_add_awesome_table_block.py b/hypha/public/news/migrations/0009_add_awesome_table_block.py
index 47db5f90ce4028037baa0fa4eabe6bb12c7cdde7..0a87789c18d3f3426d30f05780626bac568f4841 100644
--- a/hypha/public/news/migrations/0009_add_awesome_table_block.py
+++ b/hypha/public/news/migrations/0009_add_awesome_table_block.py
@@ -10,15 +10,78 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0008_correct_related_page_behaviour'),
+        ("news", "0008_correct_related_page_behaviour"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('awesome_table_widget', wagtail.blocks.StructBlock([('table_id', wagtail.blocks.CharBlock(classname='title', help_text='Please enter only table id from embed code. Table widget code creates automatically.'))]))]),
+            model_name="newspage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "awesome_table_widget",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "table_id",
+                                    wagtail.blocks.CharBlock(
+                                        classname="title",
+                                        help_text="Please enter only table id from embed code. Table widget code creates automatically.",
+                                    ),
+                                )
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/news/migrations/0010_newsfeedsettings.py b/hypha/public/news/migrations/0010_newsfeedsettings.py
index be191d301a1361695828bb94f70812135a4a77c9..2596d961533487358d286311570575fc397fe38b 100644
--- a/hypha/public/news/migrations/0010_newsfeedsettings.py
+++ b/hypha/public/news/migrations/0010_newsfeedsettings.py
@@ -5,25 +5,62 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('news', '0009_add_awesome_table_block'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("news", "0009_add_awesome_table_block"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='NewsFeedSettings',
+            name="NewsFeedSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('news_title', models.CharField(help_text='The title of the main news feed.', max_length=255)),
-                ('news_description', models.CharField(help_text='The description of the main news feed.', max_length=255)),
-                ('news_per_type_title', models.CharField(help_text='The title of the news feed by type. Use {news_type} to insert the type name.', max_length=255)),
-                ('news_per_type_description', models.CharField(help_text='The description of the news feed by type. Use {news_type} to insert the type name.', max_length=255)),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "news_title",
+                    models.CharField(
+                        help_text="The title of the main news feed.", max_length=255
+                    ),
+                ),
+                (
+                    "news_description",
+                    models.CharField(
+                        help_text="The description of the main news feed.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "news_per_type_title",
+                    models.CharField(
+                        help_text="The title of the news feed by type. Use {news_type} to insert the type name.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "news_per_type_description",
+                    models.CharField(
+                        help_text="The description of the news feed by type. Use {news_type} to insert the type name.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/news/migrations/0011_add_box_apply_link_fields.py b/hypha/public/news/migrations/0011_add_box_apply_link_fields.py
index 777c8ee0cb8d43848cd56adb8b3d4c4316ff8536..3ff2b57d16720df2b8b5f46085162385f6b03837 100644
--- a/hypha/public/news/migrations/0011_add_box_apply_link_fields.py
+++ b/hypha/public/news/migrations/0011_add_box_apply_link_fields.py
@@ -10,15 +10,93 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0010_newsfeedsettings'),
+        ("news", "0010_newsfeedsettings"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('awesome_table_widget', wagtail.blocks.StructBlock([('table_id', wagtail.blocks.CharBlock(classname='title', help_text='Please enter only table id from embed code. Table widget code creates automatically.'))]))]),
+            model_name="newspage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "awesome_table_widget",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "table_id",
+                                    wagtail.blocks.CharBlock(
+                                        classname="title",
+                                        help_text="Please enter only table id from embed code. Table widget code creates automatically.",
+                                    ),
+                                )
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/news/migrations/0012_add_more_block.py b/hypha/public/news/migrations/0012_add_more_block.py
index bc68db90fa6c0564440f34f3ec72ec84f1576582..c0e795a3a721c770153f7834351c7a95141136b7 100644
--- a/hypha/public/news/migrations/0012_add_more_block.py
+++ b/hypha/public/news/migrations/0012_add_more_block.py
@@ -10,15 +10,111 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0011_add_box_apply_link_fields'),
+        ("news", "0011_add_box_apply_link_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('awesome_table_widget', wagtail.blocks.StructBlock([('table_id', wagtail.blocks.CharBlock(form_classname='title', help_text='Please enter only table id from embed code. Table widget code creates automatically.'))]))]),
+            model_name="newspage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "awesome_table_widget",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "table_id",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title",
+                                        help_text="Please enter only table id from embed code. Table widget code creates automatically.",
+                                    ),
+                                )
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/news/migrations/0013_alter_newspage_body.py b/hypha/public/news/migrations/0013_alter_newspage_body.py
index 4c5e22010b21e9858ed7bf1a549f3caec39f3a15..bfa3a2dc7fe0798fe83524c0bb611dc3de96bdc8 100644
--- a/hypha/public/news/migrations/0013_alter_newspage_body.py
+++ b/hypha/public/news/migrations/0013_alter_newspage_body.py
@@ -10,15 +10,112 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0012_add_more_block'),
+        ("news", "0012_add_more_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))])), ('awesome_table_widget', wagtail.blocks.StructBlock([('table_id', wagtail.blocks.CharBlock(form_classname='title', help_text='Please enter only table id from embed code. Table widget code creates automatically.'))]))], use_json_field=True),
+            model_name="newspage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "awesome_table_widget",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "table_id",
+                                    wagtail.blocks.CharBlock(
+                                        form_classname="title",
+                                        help_text="Please enter only table id from embed code. Table widget code creates automatically.",
+                                    ),
+                                )
+                            ]
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/news/migrations/0014_alter_newspagenewstype_news_type.py b/hypha/public/news/migrations/0014_alter_newspagenewstype_news_type.py
index d7d32f0018ea59279512141826984d18773191e6..520955af984ce28ea0de8dd7778597876e7101ee 100644
--- a/hypha/public/news/migrations/0014_alter_newspagenewstype_news_type.py
+++ b/hypha/public/news/migrations/0014_alter_newspagenewstype_news_type.py
@@ -5,15 +5,18 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('news', '0013_alter_newspage_body'),
+        ("news", "0013_alter_newspage_body"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='newspagenewstype',
-            name='news_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='news.newstype'),
+            model_name="newspagenewstype",
+            name="news_type",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="news.newstype",
+            ),
         ),
     ]
diff --git a/hypha/public/news/models.py b/hypha/public/news/models.py
index c898efd3032e4ea86422aacdadae241869635dc3..99636040dfc3abcccff06ec38b681a1fa0bc7028 100644
--- a/hypha/public/news/models.py
+++ b/hypha/public/news/models.py
@@ -25,93 +25,78 @@ class NewsType(models.Model):
 
 
 class NewsPageNewsType(models.Model):
-    page = ParentalKey(
-        'news.NewsPage',
-        related_name='news_types'
-    )
+    page = ParentalKey("news.NewsPage", related_name="news_types")
     news_type = models.ForeignKey(
-        'NewsType',
-        related_name='+',
-        on_delete=models.CASCADE
+        "NewsType", related_name="+", on_delete=models.CASCADE
     )
 
-    panels = [
-        FieldPanel('news_type')
-    ]
+    panels = [FieldPanel("news_type")]
 
     def __str__(self):
         return self.news_type.title
 
 
 class NewsPageRelatedPage(RelatedPage):
-    source_page = ParentalKey(
-        'news.NewsPage',
-        related_name='related_pages'
-    )
+    source_page = ParentalKey("news.NewsPage", related_name="related_pages")
 
 
 class NewsProjectRelatedPage(RelatedPage):
     page = models.ForeignKey(
-        'wagtailcore.Page',
+        "wagtailcore.Page",
         on_delete=models.CASCADE,
-        related_name='news_mentions',
-    )
-    source_page = ParentalKey(
-        'news.NewsPage',
-        related_name='related_projects'
+        related_name="news_mentions",
     )
+    source_page = ParentalKey("news.NewsPage", related_name="related_projects")
 
     panels = [
-        PageChooserPanel('page', 'projects.ProjectPage'),
+        PageChooserPanel("page", "projects.ProjectPage"),
     ]
 
 
 class NewsPageAuthor(Orderable):
-    source_page = ParentalKey(
-        'news.NewsPage',
-        related_name='authors'
-    )
+    source_page = ParentalKey("news.NewsPage", related_name="authors")
     author = models.ForeignKey(
-        'wagtailcore.Page',
+        "wagtailcore.Page",
         on_delete=models.PROTECT,
-        related_name='+',
+        related_name="+",
     )
 
-    panels = [
-        PageChooserPanel('author', 'people.PersonPage')
-    ]
+    panels = [PageChooserPanel("author", "people.PersonPage")]
 
 
 class NewsPage(BasePage):
     subpage_types = []
-    parent_page_types = ['NewsIndex']
+    parent_page_types = ["NewsIndex"]
 
     drupal_id = models.IntegerField(null=True, blank=True, editable=False)
 
     # It's datetime for easy comparison with first_published_at
     publication_date = models.DateTimeField(
-        null=True, blank=True,
-        help_text=_('Use this field to override the date that the news item appears to have been published.')
+        null=True,
+        blank=True,
+        help_text=_(
+            "Use this field to override the date that the news item appears to have been published."
+        ),
     )
     introduction = models.TextField(blank=True)
     body = StreamField(
-        NewsStoryBlock(block_counts={'awesome_table_widget': {'max_num': 1}}),
-        use_json_field=True
+        NewsStoryBlock(block_counts={"awesome_table_widget": {"max_num": 1}}),
+        use_json_field=True,
     )
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
-        index.SearchField('body')
+        index.SearchField("introduction"),
+        index.SearchField("body"),
     ]
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('publication_date'),
-        InlinePanel('authors', label=_('Authors')),
-        FieldPanel('introduction'),
-        FieldPanel('body'),
-        InlinePanel('news_types', label=_('News types')),
-        InlinePanel('related_projects', label=_('Mentioned project')),
-        InlinePanel('related_pages', label=_('Related pages')),
+        FieldPanel("publication_date"),
+        InlinePanel("authors", label=_("Authors")),
+        FieldPanel("introduction"),
+        FieldPanel("body"),
+        InlinePanel("news_types", label=_("News types")),
+        InlinePanel("related_projects", label=_("Mentioned project")),
+        InlinePanel("related_pages", label=_("Related pages")),
     ]
 
     @property
@@ -126,28 +111,33 @@ class NewsPage(BasePage):
 
 
 class NewsIndex(BasePage):
-    subpage_types = ['NewsPage']
-    parent_page_types = ['home.HomePage']
+    subpage_types = ["NewsPage"]
+    parent_page_types = ["home.HomePage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget())
+        FieldPanel("introduction", widget=PagedownWidget())
     ]
 
     def get_context(self, request, *args, **kwargs):
-        news = NewsPage.objects.live().public().descendant_of(self).annotate(
-            date=Coalesce('publication_date', 'first_published_at')
-        ).order_by('-date').prefetch_related(
-            'news_types__news_type',
-            'authors__author',
+        news = (
+            NewsPage.objects.live()
+            .public()
+            .descendant_of(self)
+            .annotate(date=Coalesce("publication_date", "first_published_at"))
+            .order_by("-date")
+            .prefetch_related(
+                "news_types__news_type",
+                "authors__author",
+            )
         )
 
-        if request.GET.get('news_type') and request.GET.get('news_type').isdigit():
-            news = news.filter(news_types__news_type=request.GET.get('news_type'))
+        if request.GET.get("news_type") and request.GET.get("news_type").isdigit():
+            news = news.filter(news_types__news_type=request.GET.get("news_type"))
 
         # Pagination
-        page = request.GET.get('page', 1)
+        page = request.GET.get("page", 1)
         paginator = Paginator(news, settings.DEFAULT_PER_PAGE)
         try:
             news = paginator.page(page)
@@ -160,19 +150,31 @@ class NewsIndex(BasePage):
         context.update(
             news=news,
             # Only show news types that have been used
-            news_types=NewsPageNewsType.objects.all().values_list(
-                'news_type__pk', 'news_type__title'
-            ).distinct()
+            news_types=NewsPageNewsType.objects.all()
+            .values_list("news_type__pk", "news_type__title")
+            .distinct(),
         )
         return context
 
 
 @register_public_site_setting
 class NewsFeedSettings(BaseSiteSetting):
-    news_title = models.CharField(max_length=255, help_text=_('The title of the main news feed.'))
-    news_description = models.CharField(max_length=255, help_text=_('The description of the main news feed.'))
+    news_title = models.CharField(
+        max_length=255, help_text=_("The title of the main news feed.")
+    )
+    news_description = models.CharField(
+        max_length=255, help_text=_("The description of the main news feed.")
+    )
 
     news_per_type_title = models.CharField(
-        max_length=255, help_text=_('The title of the news feed by type. Use {news_type} to insert the type name.'))
+        max_length=255,
+        help_text=_(
+            "The title of the news feed by type. Use {news_type} to insert the type name."
+        ),
+    )
     news_per_type_description = models.CharField(
-        max_length=255, help_text=_('The description of the news feed by type. Use {news_type} to insert the type name.'))
+        max_length=255,
+        help_text=_(
+            "The description of the news feed by type. Use {news_type} to insert the type name."
+        ),
+    )
diff --git a/hypha/public/news/templates/news/news_index.html b/hypha/public/news/templates/news/news_index.html
index 1e23535d93cd21d64fed58e16b750d9eb4787c9c..51200158743ad20ca83e5e0549f7c51d76f4c178 100644
--- a/hypha/public/news/templates/news/news_index.html
+++ b/hypha/public/news/templates/news/news_index.html
@@ -4,7 +4,7 @@
 {% block body_class %}light-grey-bg{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
 
         {% if page.introduction %}
             <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
@@ -29,9 +29,9 @@
                         {% if n.listing_image %}
                             {% image n.listing_image fill-450x300 %}
                         {% endif %}
-                            <h4 class="listing__title" role="listitem">
-                                {{ n.listing_title|default:n.title }}
-                            </h4>
+                        <h4 class="listing__title" role="listitem">
+                            {{ n.listing_title|default:n.title }}
+                        </h4>
                         {% if n.listing_summary or n.introduction %}
                             <h6 class="listing__teaser">{{ n.listing_summary|default:n.introduction }}</h6>
                         {% endif %}
@@ -52,5 +52,5 @@
             {# no items #}
         {% endif %}
 
-</div>
+    </div>
 {% endblock %}
diff --git a/hypha/public/news/templates/news/news_page.html b/hypha/public/news/templates/news/news_page.html
index 632ffe69f2b485be1568910f4afbe85cc08b9629..9d40bb989b4fdaf40414f30bbe1754185f919906 100644
--- a/hypha/public/news/templates/news/news_page.html
+++ b/hypha/public/news/templates/news/news_page.html
@@ -2,46 +2,46 @@
 {% load wagtailcore_tags wagtailimages_tags static %}
 
 {% block content %}
-<article class="wrapper wrapper--small">
-
-    <header class="heading heading--author heading-text epsilon">
-        <time datetime="{{ page.display_date|date:"c" }}">{{ page.display_date|date:"D, Y-m-d H:i" }}</time>
-        {% if page.authors.all %}
-            | By:
-            {% for author in page.authors.all %}
-                <a href="{% pageurl author.author %}">{{ author.author }}</a>
-            {% endfor %}
+    <article class="wrapper wrapper--small">
+
+        <header class="heading heading--author heading-text epsilon">
+            <time datetime="{{ page.display_date|date:"c" }}">{{ page.display_date|date:"D, Y-m-d H:i" }}</time>
+            {% if page.authors.all %}
+                | By:
+                {% for author in page.authors.all %}
+                    <a href="{% pageurl author.author %}">{{ author.author }}</a>
+                {% endfor %}
+            {% endif %}
+        </header>
+
+        {% if page.introduction %}
+            <h4 class="heading heading--introduction">{{ page.introduction }}</h4>
         {% endif %}
-    </header>
-
-    {% if page.introduction %}
-        <h4 class="heading heading--introduction">{{ page.introduction }}</h4>
-    {% endif %}
-
-    <div class="main-body">
-        {% include_block page.body %}
-    </div>
-
-    {% if page.news_types.all %}
-        <ul class="list list--flex">
-            {% for news_type in page.news_types.all %}
-                <li class="list__label">{{ news_type }}</li>
-            {% endfor %}
-        </ul>
-    {% endif %}
-
-    {% if page.related_projects.all %}
-        <h4 class="heading">Projects Mentioned</h4>
-        <ul class="list">
-            {% for project in page.related_projects.all %}
-            <li><a href="{% pageurl project.page %}">{{ project.page }}</a></li>
-            {% endfor %}
-        </ul>
-    {% endif %}
-
-    {% include "includes/share.html" %}
-</article>
-
-{% include "includes/relatedcontent.html" with related_documents=page.related_documents.all related_pages=page.related_pages.all %}
+
+        <div class="main-body">
+            {% include_block page.body %}
+        </div>
+
+        {% if page.news_types.all %}
+            <ul class="list list--flex">
+                {% for news_type in page.news_types.all %}
+                    <li class="list__label">{{ news_type }}</li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+
+        {% if page.related_projects.all %}
+            <h4 class="heading">Projects Mentioned</h4>
+            <ul class="list">
+                {% for project in page.related_projects.all %}
+                    <li><a href="{% pageurl project.page %}">{{ project.page }}</a></li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+
+        {% include "includes/share.html" %}
+    </article>
+
+    {% include "includes/relatedcontent.html" with related_documents=page.related_documents.all related_pages=page.related_pages.all %}
 
 {% endblock %}
diff --git a/hypha/public/partner/admin.py b/hypha/public/partner/admin.py
index ddf3d34af64e2e94a053b7d720678f19f48d218a..75e520bfbe1f3ca4f9d8aa6fed89e5d92ef29117 100644
--- a/hypha/public/partner/admin.py
+++ b/hypha/public/partner/admin.py
@@ -8,15 +8,15 @@ class InvestmentAdmin(ModelAdmin):
     model = Investment
     create_view_class = CreateInvestmentView
     edit_view_class = EditInvestmentView
-    form_fields_exclude = ('application', )
-    menu_label = 'Investments'
-    menu_icon = 'placeholder'
+    form_fields_exclude = ("application",)
+    menu_label = "Investments"
+    menu_icon = "placeholder"
     menu_order = 290
     add_to_settings_menu = False
     exclude_from_explorer = False
-    list_display = ('partner', 'name', 'amount_committed', 'year')
-    list_filter = ('partner__title', 'year', 'amount_committed')
-    search_fields = ('name', 'year')
+    list_display = ("partner", "name", "amount_committed", "year")
+    list_filter = ("partner__title", "year", "amount_committed")
+    search_fields = ("name", "year")
 
 
 modeladmin_register(InvestmentAdmin)
diff --git a/hypha/public/partner/admin_view.py b/hypha/public/partner/admin_view.py
index 27936aa3fa607135d012f2456cb9443bc4f30652..38391b7097c02cd7781864df642549c02321dad2 100644
--- a/hypha/public/partner/admin_view.py
+++ b/hypha/public/partner/admin_view.py
@@ -7,7 +7,7 @@ from .models import InvestmentCategorySettings
 class CreateInvestmentView(CreateView):
     def get_form_kwargs(self):
         kwargs = super(CreateInvestmentView, self).get_form_kwargs()
-        kwargs['request'] = self.request
+        kwargs["request"] = self.request
         return kwargs
 
     def get_context_data(self):
@@ -15,21 +15,21 @@ class CreateInvestmentView(CreateView):
         ics = InvestmentCategorySettings.for_request(self.request)
         categories = ics.categories.all()
         for category in categories:
-            field_name = category.name.lower().replace(' ', '_')
+            field_name = category.name.lower().replace(" ", "_")
             field_panel = FieldPanel(field_name).bind_to(
                 model=self.model,
-                instance=context['edit_handler'].instance,
-                request=context['edit_handler'].request,
-                form=context['form']
+                instance=context["edit_handler"].instance,
+                request=context["edit_handler"].request,
+                form=context["form"],
             )
-            context['edit_handler'].children.append(field_panel)
+            context["edit_handler"].children.append(field_panel)
         return context
 
 
 class EditInvestmentView(EditView):
     def get_form_kwargs(self):
         kwargs = super(EditInvestmentView, self).get_form_kwargs()
-        kwargs['request'] = self.request
+        kwargs["request"] = self.request
         return kwargs
 
     def get_context_data(self):
@@ -37,12 +37,12 @@ class EditInvestmentView(EditView):
         ics = InvestmentCategorySettings.for_request(self.request)
         categories = ics.categories.all()
         for category in categories:
-            field_name = category.name.lower().replace(' ', '_')
+            field_name = category.name.lower().replace(" ", "_")
             field_panel = FieldPanel(field_name).bind_to(
                 model=self.model,
-                instance=context['edit_handler'].instance,
-                request=context['edit_handler'].request,
-                form=context['form']
+                instance=context["edit_handler"].instance,
+                request=context["edit_handler"].request,
+                form=context["form"],
             )
-            context['edit_handler'].children.append(field_panel)
+            context["edit_handler"].children.append(field_panel)
         return context
diff --git a/hypha/public/partner/apps.py b/hypha/public/partner/apps.py
index 781c0bfdcc65e0798f809d803b66ae51a84356ab..2cfe9ecaf2996ab6d0c1bcd02a9fda66f9b1866d 100644
--- a/hypha/public/partner/apps.py
+++ b/hypha/public/partner/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class PartnerConfig(AppConfig):
-    name = 'hypha.public.partner'
+    name = "hypha.public.partner"
diff --git a/hypha/public/partner/migrations/0001_add_investments_table_and_partners_page.py b/hypha/public/partner/migrations/0001_add_investments_table_and_partners_page.py
index 369c1bd0d454c0e8f7912f9e68c81def3cededf4..662b016c607e2e84a880a90c6852dc5b039d2d19 100644
--- a/hypha/public/partner/migrations/0001_add_investments_table_and_partners_page.py
+++ b/hypha/public/partner/migrations/0001_add_investments_table_and_partners_page.py
@@ -9,91 +9,292 @@ import wagtailcache.cache
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('images', '0003_customimage_drupal_id'),
-        ('categories', '0006_use_category_options_as_submission_filter'),
-        ('wagtailcore', '0059_apply_collection_ordering'),
-        ('funds', '0087_applicationsettings'),
+        ("images", "0003_customimage_drupal_id"),
+        ("categories", "0006_use_category_options_as_submission_filter"),
+        ("wagtailcore", "0059_apply_collection_ordering"),
+        ("funds", "0087_applicationsettings"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Investment',
+            name="Investment",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=50)),
-                ('year', models.IntegerField(default=hypha.public.partner.models.current_year, help_text='Use format: <YYYY>', validators=[django.core.validators.MinValueValidator(1984), hypha.public.partner.models.max_value_current_year])),
-                ('amount_committed', models.DecimalField(decimal_places=2, default=0, max_digits=11, verbose_name='Ammount Commited US$')),
-                ('description', models.TextField()),
-                ('created_at', models.DateTimeField(auto_now_add=True)),
-                ('updated_at', models.DateTimeField(auto_now=True)),
-                ('application', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='funds.ApplicationSubmission')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(max_length=50)),
+                (
+                    "year",
+                    models.IntegerField(
+                        default=hypha.public.partner.models.current_year,
+                        help_text="Use format: <YYYY>",
+                        validators=[
+                            django.core.validators.MinValueValidator(1984),
+                            hypha.public.partner.models.max_value_current_year,
+                        ],
+                    ),
+                ),
+                (
+                    "amount_committed",
+                    models.DecimalField(
+                        decimal_places=2,
+                        default=0,
+                        max_digits=11,
+                        verbose_name="Ammount Commited US$",
+                    ),
+                ),
+                ("description", models.TextField()),
+                ("created_at", models.DateTimeField(auto_now_add=True)),
+                ("updated_at", models.DateTimeField(auto_now=True)),
+                (
+                    "application",
+                    models.OneToOneField(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        to="funds.ApplicationSubmission",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='PartnerPage',
+            name="PartnerPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('status', models.CharField(choices=[('active', 'Active'), ('inactive', 'Inactive')], default='current_partner', max_length=20)),
-                ('public', models.BooleanField(default=True)),
-                ('description', wagtail.fields.RichTextField(blank=True)),
-                ('web_url', models.URLField(blank=True)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('logo', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "status",
+                    models.CharField(
+                        choices=[("active", "Active"), ("inactive", "Inactive")],
+                        default="current_partner",
+                        max_length=20,
+                    ),
+                ),
+                ("public", models.BooleanField(default=True)),
+                ("description", wagtail.fields.RichTextField(blank=True)),
+                ("web_url", models.URLField(blank=True)),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "logo",
+                    models.OneToOneField(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Partner Page',
+                "verbose_name": "Partner Page",
             },
-            bases=(wagtailcache.cache.WagtailCacheMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                wagtailcache.cache.WagtailCacheMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='PartnerIndexPage',
+            name="PartnerIndexPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=(wagtailcache.cache.WagtailCacheMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                wagtailcache.cache.WagtailCacheMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='InvestmentCategorySettings',
+            name="InvestmentCategorySettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('categories', models.ManyToManyField(help_text='Select the categories that should be used in investments.', to='categories.Category')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "categories",
+                    models.ManyToManyField(
+                        help_text="Select the categories that should be used in investments.",
+                        to="categories.Category",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Investment Category Settings',
+                "verbose_name": "Investment Category Settings",
             },
         ),
         migrations.CreateModel(
-            name='InvestmentCategory',
+            name="InvestmentCategory",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(blank=True, max_length=255, null=True)),
-                ('value', models.CharField(blank=True, max_length=255, null=True)),
-                ('investment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='categories', to='partner.Investment')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("name", models.CharField(blank=True, max_length=255, null=True)),
+                ("value", models.CharField(blank=True, max_length=255, null=True)),
+                (
+                    "investment",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="categories",
+                        to="partner.Investment",
+                    ),
+                ),
             ],
         ),
         migrations.AddField(
-            model_name='investment',
-            name='partner',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='investments', to='partner.PartnerPage'),
+            model_name="investment",
+            name="partner",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="investments",
+                to="partner.PartnerPage",
+            ),
         ),
     ]
diff --git a/hypha/public/partner/migrations/0002_currency_symbol_setting.py b/hypha/public/partner/migrations/0002_currency_symbol_setting.py
index 59cb04fe97ab4837d33ba58096b5ff15cb085977..1cb2ad0f0ac869700d32fde7b9f1575402ab21fd 100644
--- a/hypha/public/partner/migrations/0002_currency_symbol_setting.py
+++ b/hypha/public/partner/migrations/0002_currency_symbol_setting.py
@@ -4,15 +4,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('partner', '0001_add_investments_table_and_partners_page'),
+        ("partner", "0001_add_investments_table_and_partners_page"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='investment',
-            name='amount_committed',
-            field=models.DecimalField(decimal_places=2, default=0, max_digits=11, verbose_name='Amount Committed ($)'),
+            model_name="investment",
+            name="amount_committed",
+            field=models.DecimalField(
+                decimal_places=2,
+                default=0,
+                max_digits=11,
+                verbose_name="Amount Committed ($)",
+            ),
         ),
     ]
diff --git a/hypha/public/partner/models.py b/hypha/public/partner/models.py
index d956dd3cbf1628c1becf3658ff9463a6a5f54313..49f319cad6c566007ada513d17ca46a7550269ac 100644
--- a/hypha/public/partner/models.py
+++ b/hypha/public/partner/models.py
@@ -1,5 +1,6 @@
 import datetime
 
+import babel.numbers
 from django import forms
 from django.conf import settings
 from django.core.validators import MaxValueValidator, MinValueValidator
@@ -22,55 +23,50 @@ from hypha.public.utils.models import BasePage
 
 
 class PartnerIndexPage(BasePage):
-    parent_page_types = ['standardpages.IndexPage']
-    subpage_types = ['partner.PartnerPage']
+    parent_page_types = ["standardpages.IndexPage"]
+    subpage_types = ["partner.PartnerPage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget()),
+        FieldPanel("introduction", widget=PagedownWidget()),
     ]
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
+        index.SearchField("introduction"),
     ]
 
     def serve(self, request, *args, **kwargs):
-        return redirect('investments')
+        return redirect("investments")
 
 
 class PartnerPage(BasePage):
-    STATUS = [
-        ('active', 'Active'),
-        ('inactive', 'Inactive')
-    ]
+    STATUS = [("active", "Active"), ("inactive", "Inactive")]
 
     class Meta:
-        verbose_name = _('Partner Page')
+        verbose_name = _("Partner Page")
 
-    parent_page_types = ['partner.PartnerIndexPage']
+    parent_page_types = ["partner.PartnerIndexPage"]
     subpage_types = []
 
-    status = models.CharField(
-        choices=STATUS, default='current_partner', max_length=20
-    )
+    status = models.CharField(choices=STATUS, default="current_partner", max_length=20)
     public = models.BooleanField(default=True)
     description = RichTextField(blank=True)
     web_url = models.URLField(blank=True)
     logo = models.OneToOneField(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
-        related_name='+',
-        on_delete=models.SET_NULL
+        related_name="+",
+        on_delete=models.SET_NULL,
     )
 
     content_panels = Page.content_panels + [
-        FieldPanel('status'),
-        FieldPanel('public'),
-        FieldPanel('description'),
-        FieldPanel('web_url'),
-        FieldPanel('logo'),
+        FieldPanel("status"),
+        FieldPanel("public"),
+        FieldPanel("description"),
+        FieldPanel("web_url"),
+        FieldPanel("logo"),
     ]
 
     def __str__(self):
@@ -78,7 +74,7 @@ class PartnerPage(BasePage):
 
     def get_context(self, request):
         context = super(PartnerPage, self).get_context(request)
-        context['total_investments'] = sum(
+        context["total_investments"] = sum(
             investment.amount_committed for investment in self.investments.all()
         )
         return context
@@ -117,23 +113,21 @@ def max_value_current_year(value):
 @register_public_site_setting
 class InvestmentCategorySettings(BaseSiteSetting):
     class Meta:
-        verbose_name = _('Investment Category Settings')
+        verbose_name = _("Investment Category Settings")
 
     categories = models.ManyToManyField(
         Category,
-        help_text=_('Select the categories that should be used in investments.')
+        help_text=_("Select the categories that should be used in investments."),
     )
 
     panels = [
-        FieldPanel('categories'),
+        FieldPanel("categories"),
     ]
 
 
 class InvestmentCategory(models.Model):
     investment = models.ForeignKey(
-        'Investment',
-        on_delete=models.CASCADE,
-        related_name='categories'
+        "Investment", on_delete=models.CASCADE, related_name="categories"
     )
     name = models.CharField(max_length=255, null=True, blank=True)
     value = models.CharField(max_length=255, null=True, blank=True)
@@ -144,12 +138,12 @@ class InvestmentCategory(models.Model):
 
 class InvestmentAdminForm(WagtailAdminModelForm):
     def __init__(self, *args, **kwargs):
-        self.request = kwargs.pop('request', None)
+        self.request = kwargs.pop("request", None)
         super().__init__(*args, **kwargs)
         ics = InvestmentCategorySettings.for_request(self.request)
         self.categories = ics.categories.all()
         for category in self.categories:
-            field_name = category.name.lower().replace(' ', '_')
+            field_name = category.name.lower().replace(" ", "_")
             self.fields[field_name] = forms.ModelChoiceField(
                 required=False,
                 queryset=category.options.all(),
@@ -157,15 +151,12 @@ class InvestmentAdminForm(WagtailAdminModelForm):
             if self.instance.name:
                 try:
                     ic = InvestmentCategory.objects.get(
-                        investment=self.instance,
-                        name=category.name
+                        investment=self.instance, name=category.name
                     )
                 except InvestmentCategory.DoesNotExist:
                     pass
                 else:
-                    self.initial[field_name] = Option.objects.get(
-                        value=ic.value
-                    )
+                    self.initial[field_name] = Option.objects.get(value=ic.value)
 
     def clean(self):
         cleaned_data = super().clean()
@@ -174,11 +165,10 @@ class InvestmentAdminForm(WagtailAdminModelForm):
     def save(self, commit=True):
         investment = super().save(commit)
         for category in self.categories:
-            field_name = category.name.lower().replace(' ', '_')
+            field_name = category.name.lower().replace(" ", "_")
             value = self.cleaned_data[field_name].value
             ic, _ = InvestmentCategory.objects.get_or_create(
-                investment=investment,
-                name=category.name
+                investment=investment, name=category.name
             )
             ic.value = value
             ic.save()
@@ -187,27 +177,27 @@ class InvestmentAdminForm(WagtailAdminModelForm):
 
 class Investment(models.Model):
     partner = models.ForeignKey(
-        PartnerPage,
-        on_delete=models.CASCADE,
-        related_name='investments'
+        PartnerPage, on_delete=models.CASCADE, related_name="investments"
     )
     name = models.CharField(max_length=50)
     year = models.IntegerField(
         default=current_year,
         validators=[MinValueValidator(1984), max_value_current_year],
-        help_text=_('Use format: <YYYY>')
+        help_text=_("Use format: <YYYY>"),
     )
     amount_committed = models.DecimalField(
         decimal_places=2,
         default=0,
         max_digits=11,
-        verbose_name=_('Amount Committed ({currency})').format(currency=settings.CURRENCY_SYMBOL.strip())
+        verbose_name=_("Amount Committed ({currency})").format(
+            currency=babel.numbers.get_currency_symbol(
+                settings.CURRENCY_CODE, locale=settings.CURRENCY_LOCALE
+            ).strip()
+        ),
     )
     description = models.TextField()
     application = models.OneToOneField(
-        ApplicationSubmission,
-        on_delete=models.SET_NULL,
-        blank=True, null=True
+        ApplicationSubmission, on_delete=models.SET_NULL, blank=True, null=True
     )
 
     created_at = models.DateTimeField(auto_now_add=True)
@@ -218,7 +208,7 @@ class Investment(models.Model):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         for category in self.categories.all():
-            field_name = category.name.lower().replace(' ', '_')
+            field_name = category.name.lower().replace(" ", "_")
             setattr(self, field_name, category.value)
 
     def __str__(self):
diff --git a/hypha/public/partner/tables.py b/hypha/public/partner/tables.py
index fcc0e3c7d53f83e0162f4a52dfe9f0715467e761..03d43b4c6e5251bcea0cceb912e74af894a01ad2 100644
--- a/hypha/public/partner/tables.py
+++ b/hypha/public/partner/tables.py
@@ -1,3 +1,4 @@
+import babel.numbers
 import django_filters as filters
 import django_tables2 as tables
 from django import forms
@@ -12,13 +13,17 @@ from .models import Investment, InvestmentCategorySettings, PartnerPage
 
 class YearMultipleChoiceFilter(Select2MultipleChoiceFilter):
     def __init__(self, *args, **kwargs):
-        years = Investment.objects.order_by('-year').values_list('year', flat=True).distinct()
+        years = (
+            Investment.objects.order_by("-year")
+            .values_list("year", flat=True)
+            .distinct()
+        )
         choices = [(year, str(year)) for year in years]
         super().__init__(
             *args,
-            field_name='year',
+            field_name="year",
             choices=choices,
-            label=_('Years'),
+            label=_("Years"),
             **kwargs,
         )
 
@@ -26,53 +31,57 @@ class YearMultipleChoiceFilter(Select2MultipleChoiceFilter):
         return any(item in second for item in first)
 
     def get_filter_predicate(self, v):
-        return {f'{ self.field_name }': v}
+        return {f"{ self.field_name }": v}
 
 
 class InvestmentFilter(filters.FilterSet):
     PAGE_CHOICES = (
-        (25, '25'),
-        (50, '50'),
-        (100, '100'),
+        (25, "25"),
+        (50, "50"),
+        (100, "100"),
     )
 
     AMOUNT_COMMITTED_CHOICES = (
-        ('0_250k', '0 > 250k'),
-        ('250k_1m', '250k > 1m'),
-        ('1m+', '1m+'),
+        ("0_250k", "0 > 250k"),
+        ("250k_1m", "250k > 1m"),
+        ("1m+", "1m+"),
     )
 
     amount_committed = Select2MultipleChoiceFilter(
         choices=AMOUNT_COMMITTED_CHOICES,
-        label=_('Amount Committed ({currency})').format(currency=settings.CURRENCY_SYMBOL.strip()),
-        method='filter_amount_committed'
+        label=_("Amount Committed ({currency})").format(
+            currency=babel.numbers.get_currency_symbol(
+                settings.CURRENCY_CODE, locale=settings.CURRENCY_LOCALE
+            ).strip()
+        ),
+        method="filter_amount_committed",
     )
     partner__status = Select2MultipleChoiceFilter(
-        choices=PartnerPage.STATUS, label=_('Status')
+        choices=PartnerPage.STATUS, label=_("Status")
     )
     per_page = filters.ChoiceFilter(
         choices=PAGE_CHOICES,
-        empty_label=_('Items per page'),
-        label=_('Per page'),
-        method='per_page_handler'
+        empty_label=_("Items per page"),
+        label=_("Per page"),
+        method="per_page_handler",
     )
 
     class Meta:
         model = Investment
-        fields = ('year', 'amount_committed')
+        fields = ("year", "amount_committed")
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.filters['year'] = YearMultipleChoiceFilter()
+        self.filters["year"] = YearMultipleChoiceFilter()
 
     def filter_amount_committed(self, queryset, name, value):
         query = Q()
         for v in value:
-            if v == '0_250k':
+            if v == "0_250k":
                 query |= Q(amount_committed__gte=0, amount_committed__lt=250000)
-            if v == '250k_1m':
+            if v == "250k_1m":
                 query |= Q(amount_committed__gte=250000, amount_committed__lt=1000000)
-            if v == '1m+':
+            if v == "1m+":
                 query |= Q(amount_committed__gte=1000000)
         return queryset.filter(query)
 
@@ -82,45 +91,57 @@ class InvestmentFilter(filters.FilterSet):
 
 
 class InvestmentFilterAndSearch(InvestmentFilter):
-    query = filters.CharFilter(field_name='partner__title', lookup_expr='icontains', widget=forms.HiddenInput)
+    query = filters.CharFilter(
+        field_name="partner__title", lookup_expr="icontains", widget=forms.HiddenInput
+    )
 
 
 def make_row_class(record):
-    css_class = 'all-investments-table__parent'
+    css_class = "all-investments-table__parent"
     return css_class
 
 
 class InvestmentTable(tables.Table):
     """Table for listing investments."""
-    partner = tables.Column(verbose_name=_('Partner'), linkify=True, attrs={'td': {'data-title-tooltip': lambda record: record.partner, 'class': 'js-title title'}})
-    year = tables.Column(verbose_name=_('Year'))
-    status = tables.Column(accessor='partner__status', verbose_name=_('Status'))
-    amount_committed = tables.Column(verbose_name=_('Amount Committed'))
+
+    partner = tables.Column(
+        verbose_name=_("Partner"),
+        linkify=True,
+        attrs={"td": {"class": "js-title title"}},
+    )
+    year = tables.Column(verbose_name=_("Year"))
+    status = tables.Column(accessor="partner__status", verbose_name=_("Status"))
+    amount_committed = tables.Column(verbose_name=_("Amount Committed"))
     description = tables.Column(visible=False)
 
     class Meta:
         model = Investment
-        order_by = ('-updated_at',)
-        fields = ('partner', 'year', 'status', 'amount_committed')
-        template_name = 'partner/table.html'
+        order_by = ("-updated_at",)
+        fields = ("partner", "year", "status", "amount_committed")
+        template_name = "partner/table.html"
         row_attrs = {
-            'class': make_row_class,
-            'data-record-id': lambda record: record.id,
+            "class": make_row_class,
+            "data-record-id": lambda record: record.id,
         }
-        attrs = {'class': 'all-investments-table'}
-        empty_text = _('No investments available')
+        attrs = {"class": "all-investments-table"}
+        empty_text = _("No investments available")
 
     def __init__(self, data, extra_columns=None, *args, **kwargs):
-        self.request = kwargs.pop('request', None)
+        self.request = kwargs.pop("request", None)
         extra_columns = extra_columns or []
         ics = InvestmentCategorySettings.for_request(self.request)
         categories = ics.categories.all()
         for category in categories:
-            field_name = category.name.lower().replace(' ', '_')
+            field_name = category.name.lower().replace(" ", "_")
             extra_columns.append(
-                (field_name, tables.Column(orderable=False,))
+                (
+                    field_name,
+                    tables.Column(
+                        orderable=False,
+                    ),
+                )
             )
         super().__init__(data, *args, **kwargs, extra_columns=extra_columns)
 
     def render_amount_committed(self, value):
-        return f'{int(value):,}'
+        return f"{int(value):,}"
diff --git a/hypha/public/partner/templates/partner/base_investments_table.html b/hypha/public/partner/templates/partner/base_investments_table.html
index 72a003fecfad06a8c3750bd7bfd8cac633e0fdd6..465ff7ee9fb54e40e181b270e2a1a396978dc10e 100644
--- a/hypha/public/partner/templates/partner/base_investments_table.html
+++ b/hypha/public/partner/templates/partner/base_investments_table.html
@@ -5,8 +5,8 @@
 {% load querystring from django_tables2 %}
 
 {% block extra_css %}
-<link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
-{{ filter.form.media.css }}
+    <link rel="stylesheet" href="{% static 'css/apply/fancybox.css' %}">
+    {{ filter.form.media.css }}
 {% endblock %}
 
 {% block content %}
diff --git a/hypha/public/partner/templates/partner/includes/table_filter_and_search.html b/hypha/public/partner/templates/partner/includes/table_filter_and_search.html
index 8c0ecb300ef8d238560efbfc87281964ec7a5bdf..a87def1243370276eeb6f0135f4dce61d2801b53 100644
--- a/hypha/public/partner/templates/partner/includes/table_filter_and_search.html
+++ b/hypha/public/partner/templates/partner/includes/table_filter_and_search.html
@@ -12,12 +12,12 @@
             <button class="button button--filters js-toggle-filters">Filters</button>
 
             {% if use_search|default:False %}
-            <form action="{{ search_action }}" method="get" role="search" class="form form--search-desktop">
-                <button class="button button--search" type="submit" aria-label="Search">
-                    <svg class="icon icon--magnifying-glass icon--search"><use xlink:href="#magnifying-glass"></use></svg>
-                </button>
-                <input class="input input--search input--secondary" type="text" placeholder="Search {{ search_placeholder|default:"by partner" }}" name="query"{% if search_term %} value="{{ search_term }}"{% endif %} aria-label="Search input">
-            </form>
+                <form action="{{ search_action }}" method="get" role="search" class="form form--search-desktop">
+                    <button class="button button--search" type="submit" aria-label="Search">
+                        <svg class="icon icon--magnifying-glass icon--search"><use xlink:href="#magnifying-glass"></use></svg>
+                    </button>
+                    <input class="input input--search input--secondary" type="text" placeholder="Search {{ search_placeholder|default:"by partner" }}" name="query"{% if search_term %} value="{{ search_term }}"{% endif %} aria-label="Search input">
+                </form>
             {% endif %}
         </div>
     </div>
diff --git a/hypha/public/partner/templates/partner/investments.html b/hypha/public/partner/templates/partner/investments.html
index f4ddc08bf3a055a957c6660d0e4cbd0d31b4ac12..5386c32ec71a11647349ad20efabaa51b1cac0e8 100644
--- a/hypha/public/partner/templates/partner/investments.html
+++ b/hypha/public/partner/templates/partner/investments.html
@@ -3,9 +3,9 @@
 {% block body_class %}light-grey-bg{% endblock %}
 {% block page_title %}Partners{% endblock %}
 {% block content %}
-<div class="wrapper wrapper--large wrapper--inner-space-medium">
-    {% block table %}
-        {{ block.super }}
-    {% endblock %}
-</div>
+    <div class="wrapper wrapper--large wrapper--inner-space-medium">
+        {% block table %}
+            {{ block.super }}
+        {% endblock %}
+    </div>
 {% endblock %}
diff --git a/hypha/public/partner/templates/partner/partner_page.html b/hypha/public/partner/templates/partner/partner_page.html
index a31ede321ed69e8e71774c50d754e091687dbd94..8be26a8aa8a1dfe40a413f61362357e88d5763af 100644
--- a/hypha/public/partner/templates/partner/partner_page.html
+++ b/hypha/public/partner/templates/partner/partner_page.html
@@ -1,30 +1,30 @@
 {% extends "base.html" %}
 
-{% load wagtailcore_tags wagtailimages_tags %}
+{% load wagtailcore_tags wagtailimages_tags apply_tags %}
 
 {% block content %}
-<section class="wrapper wrapper--small wrapper--inner-space-large wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
+    <section class="wrapper wrapper--small wrapper--inner-space-large wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
 
-        {{ page.description|richtext }}
+            {{ page.description|richtext }}
 
-        <p class="list list--contact"><span>Status</span><br>{{ page.get_status_display }}</p><br>
+            <p class="list list--contact"><span>Status</span><br>{{ page.get_status_display }}</p><br>
 
-        {% if page.web_url %}
-            <p class="list list--contact"><span>Website</span><br><a href="{{ page.web_url }}">{{ page.web_url }}</a></p><br>
-        {% endif %}
+            {% if page.web_url %}
+                <p class="list list--contact"><span>Website</span><br><a href="{{ page.web_url }}">{{ page.web_url }}</a></p><br>
+            {% endif %}
 
-        {% for key, value in page.category_questions.items %}
-            <p class="list list--contact"><span>{{ key }}</span><br>{{ value|join:', ' }}</p><br>
-        {% endfor %}
+            {% for key, value in page.category_questions.items %}
+                <p class="list list--contact"><span>{{ key }}</span><br>{{ value|join:', ' }}</p><br>
+            {% endfor %}
 
-        <p class="list list--contact"><span>Total Investments: </span>{{ CURRENCY_SYMBOL }}{{ total_investments }}</p>
-    </div>
+            <p class="list list--contact"><span>Total Investments: </span>{{ total_investments|format_number_as_currency }}</p>
+        </div>
 
-    <div>
-        {% if page.logo %}
-            {% image page.logo fill-210x235 class="image image--headshot-desktop" %}
-        {% endif %}
-    </div>
-</section>
+        <div>
+            {% if page.logo %}
+                {% image page.logo fill-210x235 class="image image--headshot-desktop" %}
+            {% endif %}
+        </div>
+    </section>
 {% endblock %}
diff --git a/hypha/public/partner/templates/partner/table.html b/hypha/public/partner/templates/partner/table.html
index 7e77a69e39f0f80ebd758a64463f11672e94e2c4..dcb39e6b47a5564ef8b9870f209c703aa28b380c 100644
--- a/hypha/public/partner/templates/partner/table.html
+++ b/hypha/public/partner/templates/partner/table.html
@@ -30,33 +30,33 @@
 {% endblock %}
 
 {% block table.tbody.empty_text %}
-<tr class="all-investments-table__empty"><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
+    <tr class="all-investments-table__empty"><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
 {% endblock table.tbody.empty_text %}
 
 {% block pagination %}
     {% if table.page and table.paginator.num_pages > 1 %}
-    <ul class="pagination">
-        {% if table.page.has_previous %}
-            <li class="previous">
-                <a href="{% querystring table.prefixed_page_field=table.page.previous_page_number %}">
-                    {% trans 'previous' %}
-                </a>
-            </li>
-        {% endif %}
-        {% if table.page.has_previous or table.page.has_next %}
-            <li class="cardinality">
-                <p>
-                    Page {{ table.page.number }}
-                </p>
-            </li>
-        {% endif %}
-        {% if table.page.has_next %}
-            <li class="next">
-                <a href="{% querystring table.prefixed_page_field=table.page.next_page_number %}">
-                    {% trans 'next' %}
-                </a>
-            </li>
-        {% endif %}
-    </ul>
+        <ul class="pagination">
+            {% if table.page.has_previous %}
+                <li class="previous">
+                    <a href="{% querystring table.prefixed_page_field=table.page.previous_page_number %}">
+                        {% trans 'previous' %}
+                    </a>
+                </li>
+            {% endif %}
+            {% if table.page.has_previous or table.page.has_next %}
+                <li class="cardinality">
+                    <p>
+                        Page {{ table.page.number }}
+                    </p>
+                </li>
+            {% endif %}
+            {% if table.page.has_next %}
+                <li class="next">
+                    <a href="{% querystring table.prefixed_page_field=table.page.next_page_number %}">
+                        {% trans 'next' %}
+                    </a>
+                </li>
+            {% endif %}
+        </ul>
     {% endif %}
 {% endblock pagination %}
diff --git a/hypha/public/partner/views.py b/hypha/public/partner/views.py
index f0fedec92d3e4c53dabdb73016f58753c27abbac..f3dc6ba9b39e7027dfcd7f3a17844b3ef3bb67d9 100644
--- a/hypha/public/partner/views.py
+++ b/hypha/public/partner/views.py
@@ -11,19 +11,19 @@ class InvestmentTableView(ExportMixin, SingleTableMixin, FilterView):
     model = Investment
     table_class = InvestmentTable
     filterset_class = InvestmentFilterAndSearch
-    filter_action = ''
+    filter_action = ""
     paginator_class = LazyPaginator
-    table_pagination = {'per_page': 25}
-    export_name = 'investments'
-    template_name = 'partner/investments.html'
+    table_pagination = {"per_page": 25}
+    export_name = "investments"
+    template_name = "partner/investments.html"
 
     def get_table_kwargs(self):
         kwargs = super(InvestmentTableView, self).get_table_kwargs()
-        kwargs['request'] = self.request
+        kwargs["request"] = self.request
         return kwargs
 
     def get_context_data(self, **kwargs):
-        search_term = self.request.GET.get('query')
+        search_term = self.request.GET.get("query")
 
         return super().get_context_data(
             search_term=search_term,
diff --git a/hypha/public/people/management/commands/migrate_people.py b/hypha/public/people/management/commands/migrate_people.py
index 2aaaf3ee8449b9fdfc3222d166c4b3ad416ba95e..781430151c6cb009f5d937d345e6b3de2a088473 100644
--- a/hypha/public/people/management/commands/migrate_people.py
+++ b/hypha/public/people/management/commands/migrate_people.py
@@ -40,9 +40,7 @@ VALID_IMAGE_EXTENSIONS = [
     ".gif",
 ]
 
-VALID_IMAGE_MIMETYPES = [
-    "image"
-]
+VALID_IMAGE_MIMETYPES = ["image"]
 
 
 def valid_url_extension(url, extension_list=VALID_IMAGE_EXTENSIONS):
@@ -64,47 +62,53 @@ class Command(BaseCommand):
     whitelister = EditorHTMLConverter().whitelister
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
         # Prepare the list of categories.
         for item in CATEGORIES:
-            category, _ = Category.objects.get_or_create(name=item['category'])
-            option, _ = Option.objects.get_or_create(value=item['name'], category=category)
-            self.terms[item['tid']] = option
+            category, _ = Category.objects.get_or_create(name=item["category"])
+            option, _ = Option.objects.get_or_create(
+                value=item["name"], category=category
+            )
+            self.terms[item["tid"]] = option
 
         self.parent_page = PersonIndexPage.objects.first()
 
         if not self.parent_page:
-            raise PersonIndexPage.DoesNotExist('Project Index Page must exist to import projects')
+            raise PersonIndexPage.DoesNotExist(
+                "Project Index Page must exist to import projects"
+            )
 
         self.types = {
-            'team': PersonType.objects.get_or_create(title='Team')[0],
-            'council': PersonType.objects.get_or_create(title='Advisory Council')[0],
-            'fellow': PersonType.objects.get_or_create(title='Fellow')[0],
+            "team": PersonType.objects.get_or_create(title="Team")[0],
+            "council": PersonType.objects.get_or_create(title="Advisory Council")[0],
+            "fellow": PersonType.objects.get_or_create(title="Fellow")[0],
         }
 
         self.funds = {
-            '3625': Page.objects.get(title='Internet Freedom Fund'),
-            '3654': Page.objects.get(title='Rapid Response Fund'),
-            '3905': Page.objects.get(title='Core Infrastructure Fund'),
-            '7791': Page.objects.get(title='Community Lab'),
-            '3618': Page.objects.get(title='Information Controls Fellowship'),
-            '3613': None,
-            '3681': Page.objects.get(title='Digital Integrity Fellowship'),
+            "3625": Page.objects.get(title="Internet Freedom Fund"),
+            "3654": Page.objects.get(title="Rapid Response Fund"),
+            "3905": Page.objects.get(title="Core Infrastructure Fund"),
+            "7791": Page.objects.get(title="Community Lab"),
+            "3618": Page.objects.get(title="Information Controls Fellowship"),
+            "3613": None,
+            "3681": Page.objects.get(title="Digital Integrity Fellowship"),
         }
 
         self.review_funds = {
-            '393': Page.objects.get(title='Internet Freedom Fund'),
-            '389': Page.objects.get(title='Rapid Response Fund'),
-            '391': Page.objects.get(title='Core Infrastructure Fund'),
-            'NOT_USED': Page.objects.get(title='Community Lab'),
-            '394': Page.objects.get(title='Information Controls Fellowship'),
-            '390': Page.objects.get(title='Digital Integrity Fellowship'),
+            "393": Page.objects.get(title="Internet Freedom Fund"),
+            "389": Page.objects.get(title="Rapid Response Fund"),
+            "391": Page.objects.get(title="Core Infrastructure Fund"),
+            "NOT_USED": Page.objects.get(title="Community Lab"),
+            "394": Page.objects.get(title="Information Controls Fellowship"),
+            "390": Page.objects.get(title="Digital Integrity Fellowship"),
         }
 
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             counter = 0
@@ -116,124 +120,142 @@ class Command(BaseCommand):
 
     def process(self, id):
         node = self.data[id]
-        print(node['title'].encode('utf8'))
+        print(node["title"].encode("utf8"))
 
         try:
-            person = PersonPage.objects.get(drupal_id=node['nid'])
+            person = PersonPage.objects.get(drupal_id=node["nid"])
         except PersonPage.DoesNotExist:
-            person = PersonPage(drupal_id=node['nid'])
+            person = PersonPage(drupal_id=node["nid"])
 
         # TODO timezone?
-        person.submit_time = datetime.fromtimestamp(int(node['created']), timezone.utc)
+        person.submit_time = datetime.fromtimestamp(int(node["created"]), timezone.utc)
 
-        *first_name, last_name = node['title'].split()
+        *first_name, last_name = node["title"].split()
 
-        person.first_name = ' '.join(first_name)
+        person.first_name = " ".join(first_name)
         person.last_name = last_name
 
-        person.title = node['title']
+        person.title = node["title"]
 
-        person.job_title = self.get_field(node, 'field_team_title')
+        person.job_title = self.get_field(node, "field_team_title")
 
-        person.active = bool(int(node['field_team_status']['value']))
+        person.active = bool(int(node["field_team_status"]["value"]))
 
         person.person_types.clear()
-        for person_type in self.ensure_iterable(node['field_team_type']):
-            person.person_types.add(PersonPagePersonType(
-                person_type=self.types[person_type['value']],
-            ))
+        for person_type in self.ensure_iterable(node["field_team_type"]):
+            person.person_types.add(
+                PersonPagePersonType(
+                    person_type=self.types[person_type["value"]],
+                )
+            )
 
-        image_url_base = 'https://www.opentech.fund/sites/default/files/'
+        image_url_base = "https://www.opentech.fund/sites/default/files/"
 
         try:
-            uri = node['field_team_photo']['uri']
+            uri = node["field_team_photo"]["uri"]
         except TypeError:
             # There was no image
             pass
         else:
             parts = urlsplit(uri)
             image_url = image_url_base + parts.netloc + parts.path
-            person.photo = self.wagtail_image_obj_from_url(image_url, node['field_team_photo']['fid'])
+            person.photo = self.wagtail_image_obj_from_url(
+                image_url, node["field_team_photo"]["fid"]
+            )
 
-        cleaned_body = self.whitelister.clean(self.get_field(node, 'body'))
+        cleaned_body = self.whitelister.clean(self.get_field(node, "body"))
 
         # Use the first sentence of the body as an intro
         very_clean_body = bleach.clean(cleaned_body, strip=True)
-        very_clean_body = very_clean_body.replace('.\n', '. ')
-        parts = very_clean_body.split('. ')
-        introduction = ''
+        very_clean_body = very_clean_body.replace(".\n", ". ")
+        parts = very_clean_body.split(". ")
+        introduction = ""
         while len(introduction) < 20:
             try:
                 introduction += parts.pop(0)
-                introduction += '. '
+                introduction += ". "
             except IndexError:
                 break
 
         introduction = introduction.strip()
         person.introduction = introduction
-        body_without_intro = cleaned_body.replace(introduction, '').strip()
-        person.biography = [('paragraph', RichText(body_without_intro))]
+        body_without_intro = cleaned_body.replace(introduction, "").strip()
+        person.biography = [("paragraph", RichText(body_without_intro))]
 
         person.social_media_profile.clear()
 
-        if self.get_field(node, 'field_team_twitter'):
-            person.social_media_profile.add(SocialMediaProfile(
-                service='twitter',
-                username=self.get_field(node, 'field_team_twitter')
-            ))
+        if self.get_field(node, "field_team_twitter"):
+            person.social_media_profile.add(
+                SocialMediaProfile(
+                    service="twitter",
+                    username=self.get_field(node, "field_team_twitter"),
+                )
+            )
 
         person.contact_details.clear()
-        for contact in ['im', 'otr', 'irc', 'pgp', 'phone']:
-            if self.get_field(node, f'field_team_{contact}'):
-                person.contact_details.add(PersonContactInfomation(
-                    contact_method=contact,
-                    contact_detail=self.get_field(node, f'field_team_{contact}')
-                ))
+        for contact in ["im", "otr", "irc", "pgp", "phone"]:
+            if self.get_field(node, f"field_team_{contact}"):
+                person.contact_details.add(
+                    PersonContactInfomation(
+                        contact_method=contact,
+                        contact_detail=self.get_field(node, f"field_team_{contact}"),
+                    )
+                )
 
         person.funds_reviewed.clear()
-        for reviewer in self.ensure_iterable(node['field_team_review_panel']):
-            person.funds_reviewed.add(FundReviewers(
-                page=self.review_funds[reviewer['tid']],
-            ))
+        for reviewer in self.ensure_iterable(node["field_team_review_panel"]):
+            person.funds_reviewed.add(
+                FundReviewers(
+                    page=self.review_funds[reviewer["tid"]],
+                )
+            )
 
         # Funding
         person.funding.clear()
 
-        years = self.ensure_iterable(node['field_project_funding_year'])
-        amounts = self.ensure_iterable(node['field_project_funding_amount'])
-        durations = self.ensure_iterable(node['field_project_term_time'])
-        funds = self.ensure_iterable(node['field_project_funding_request'])
-        for year, amount, duration, fund in itertools.zip_longest(years, amounts, durations, funds):
+        years = self.ensure_iterable(node["field_project_funding_year"])
+        amounts = self.ensure_iterable(node["field_project_funding_amount"])
+        durations = self.ensure_iterable(node["field_project_term_time"])
+        funds = self.ensure_iterable(node["field_project_funding_request"])
+        for year, amount, duration, fund in itertools.zip_longest(
+            years, amounts, durations, funds
+        ):
             try:
-                fund = self.funds[fund['target_id']]
+                fund = self.funds[fund["target_id"]]
             except TypeError:
                 fund = None
 
             try:
-                duration = duration['value']
+                duration = duration["value"]
             except TypeError:
                 duration = 0
 
             try:
-                amount = amount['value']
+                amount = amount["value"]
             except TypeError:
                 # This is an error, don't give funding
                 continue
 
-            person.funding.add(Funding(
-                value=amount,
-                year=year['value'],
-                duration=duration,
-                source=fund,
-            ))
+            person.funding.add(
+                Funding(
+                    value=amount,
+                    year=year["value"],
+                    duration=duration,
+                    source=fund,
+                )
+            )
 
         try:
             if not person.get_parent():
                 self.parent_page.add_child(instance=person)
             person.save_revision().publish()
-            self.stdout.write(f"Processed \"{node['title'].encode('utf8')}\" ({node['nid']})")
+            self.stdout.write(
+                f"Processed \"{node['title'].encode('utf8')}\" ({node['nid']})"
+            )
         except IntegrityError:
-            self.stdout.write(f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
             pass
 
     def ensure_iterable(self, value):
@@ -243,13 +265,13 @@ class Command(BaseCommand):
 
     def get_field(self, node, field):
         try:
-            return node[field]['safe_value']
+            return node[field]["safe_value"]
         except TypeError:
             pass
         try:
-            return node[field]['value']
+            return node[field]["value"]
         except TypeError:
-            return ''
+            return ""
 
     def get_referenced_term(self, tid):
         try:
@@ -258,7 +280,7 @@ class Command(BaseCommand):
             return None
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
 
     @staticmethod
     def wagtail_image_obj_from_url(url, drupal_id=None):
@@ -277,7 +299,7 @@ class Command(BaseCommand):
 
             if r.status_code == requests.codes.ok:
                 img_buffer = BytesIO(r.content)
-                img_filename = url.rsplit('/', 1)[1]
+                img_filename = url.rsplit("/", 1)[1]
 
                 # Test downloaded file is valid image file
                 try:
@@ -289,7 +311,7 @@ class Command(BaseCommand):
                     img = WagtailImage.objects.create(
                         title=img_filename,
                         file=ImageFile(img_buffer, name=img_filename),
-                        drupal_id=drupal_id
+                        drupal_id=drupal_id,
                     )
                     return img
         return None
diff --git a/hypha/public/people/migrations/0001_initial.py b/hypha/public/people/migrations/0001_initial.py
index 5676155a1b17f8106f44f9b2837ed67111046f8a..9ce3bbcbfd4e7f8b69bb9726d445264163ff97aa 100644
--- a/hypha/public/people/migrations/0001_initial.py
+++ b/hypha/public/people/migrations/0001_initial.py
@@ -14,93 +14,324 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtailcore', '0032_add_bulk_delete_page_permission'),
-        ('images', '0001_initial'),
+        ("wagtailcore", "0032_add_bulk_delete_page_permission"),
+        ("images", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PersonType',
+            name="PersonType",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.CharField(max_length=255)),
-            ]
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.CharField(max_length=255)),
+            ],
         ),
         migrations.CreateModel(
-            name='PersonIndexPage',
+            name="PersonIndexPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
         migrations.CreateModel(
-            name='PersonPage',
+            name="PersonPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('first_name', models.CharField(max_length=255)),
-                ('last_name', models.CharField(max_length=255)),
-                ('job_title', models.CharField(max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('website', models.URLField(blank=True, max_length=255)),
-                ('biography', wagtail.fields.StreamField((('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock((('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))))), ('quote', wagtail.blocks.StructBlock((('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))))), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock((('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False)))))), blank=True)),
-                ('email', models.EmailField(blank=True, max_length=254)),
-                ('mobile_phone', models.CharField(blank=True, max_length=255)),
-                ('landline_phone', models.CharField(blank=True, max_length=255)),
-                ('photo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("first_name", models.CharField(max_length=255)),
+                ("last_name", models.CharField(max_length=255)),
+                ("job_title", models.CharField(max_length=255)),
+                ("introduction", models.TextField(blank=True)),
+                ("website", models.URLField(blank=True, max_length=255)),
+                (
+                    "biography",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "heading",
+                                wagtail.blocks.CharBlock(
+                                    classname="full title", icon="title"
+                                ),
+                            ),
+                            ("paragraph", wagtail.blocks.RichTextBlock()),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(),
+                                        ),
+                                        (
+                                            "caption",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(classname="title"),
+                                        ),
+                                        (
+                                            "attribution",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                        (
+                                            "job_title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                            (
+                                "call_to_action",
+                                wagtail.snippets.blocks.SnippetChooserBlock(
+                                    "utils.CallToActionSnippet",
+                                    template="blocks/call_to_action_block.html",
+                                ),
+                            ),
+                            (
+                                "document",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "document",
+                                            wagtail.documents.blocks.DocumentChooserBlock(),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        ),
+                        blank=True,
+                    ),
+                ),
+                ("email", models.EmailField(blank=True, max_length=254)),
+                ("mobile_phone", models.CharField(blank=True, max_length=255)),
+                ("landline_phone", models.CharField(blank=True, max_length=255)),
+                (
+                    "photo",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page',),
+            bases=("wagtailcore.page",),
         ),
         migrations.CreateModel(
-            name='PersonPagePersonType',
+            name="PersonPagePersonType",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('person_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='people.PersonType')),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='person_types', to='people.PersonPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "person_type",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="+",
+                        to="people.PersonType",
+                    ),
+                ),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="person_types",
+                        to="people.PersonPage",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='SocialMediaProfile',
+            name="SocialMediaProfile",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('service', models.CharField(choices=[('twitter', 'Twitter'), ('linkedin', 'LinkedIn')], max_length=200)),
-                ('username', models.CharField(max_length=255)),
-                ('person_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='social_media_profile', to='people.PersonPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "service",
+                    models.CharField(
+                        choices=[("twitter", "Twitter"), ("linkedin", "LinkedIn")],
+                        max_length=200,
+                    ),
+                ),
+                ("username", models.CharField(max_length=255)),
+                (
+                    "person_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="social_media_profile",
+                        to="people.PersonPage",
+                    ),
+                ),
             ],
         ),
         migrations.CreateModel(
-            name='PersonPagePhoneNumber',
+            name="PersonPagePhoneNumber",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('phone_number', models.CharField(max_length=255)),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='phone_numbers', to='people.PersonPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("phone_number", models.CharField(max_length=255)),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="phone_numbers",
+                        to="people.PersonPage",
+                    ),
+                ),
             ],
         ),
         migrations.RemoveField(
-            model_name='personpage',
-            name='landline_phone',
+            model_name="personpage",
+            name="landline_phone",
         ),
         migrations.RemoveField(
-            model_name='personpage',
-            name='mobile_phone',
+            model_name="personpage",
+            name="mobile_phone",
         ),
     ]
diff --git a/hypha/public/people/migrations/0002_add_header_image.py b/hypha/public/people/migrations/0002_add_header_image.py
index ead04a815be630142e7e1d66f39656dae1d89ce4..13a49f80dcacb77b9198d51c442fe998b4bd71ba 100644
--- a/hypha/public/people/migrations/0002_add_header_image.py
+++ b/hypha/public/people/migrations/0002_add_header_image.py
@@ -7,21 +7,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('people', '0001_initial'),
+        ("images", "0001_initial"),
+        ("people", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='personindexpage',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="personindexpage",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
         migrations.AddField(
-            model_name='personpage',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="personpage",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
     ]
diff --git a/hypha/public/people/migrations/0003_update_contact_information.py b/hypha/public/people/migrations/0003_update_contact_information.py
index eaf3d477ce5ef807cec4831df65343d2089e35b8..56db777af653bf041dcc5e510a1788a21ceee291 100644
--- a/hypha/public/people/migrations/0003_update_contact_information.py
+++ b/hypha/public/people/migrations/0003_update_contact_information.py
@@ -8,32 +8,65 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0002_add_header_image'),
+        ("people", "0002_add_header_image"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='PersonContactInfomation',
+            name="PersonContactInfomation",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('contact_method', models.CharField(blank=True, choices=[('irc', 'IRC'), ('im_jabber_xmpp', 'IM/Jabber/XMPP'), ('phone', 'Phone'), ('pgp', 'PGP fingerprint'), ('otr', 'OTR fingerprint')], max_length=255)),
-                ('other_method', models.CharField(blank=True, max_length=255, verbose_name='Other')),
-                ('contact_detail', models.CharField(max_length=255)),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='contact_details', to='people.PersonPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "contact_method",
+                    models.CharField(
+                        blank=True,
+                        choices=[
+                            ("irc", "IRC"),
+                            ("im_jabber_xmpp", "IM/Jabber/XMPP"),
+                            ("phone", "Phone"),
+                            ("pgp", "PGP fingerprint"),
+                            ("otr", "OTR fingerprint"),
+                        ],
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "other_method",
+                    models.CharField(blank=True, max_length=255, verbose_name="Other"),
+                ),
+                ("contact_detail", models.CharField(max_length=255)),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="contact_details",
+                        to="people.PersonPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.RemoveField(
-            model_name='personpagephonenumber',
-            name='page',
+            model_name="personpagephonenumber",
+            name="page",
         ),
         migrations.DeleteModel(
-            name='PersonPagePhoneNumber',
+            name="PersonPagePhoneNumber",
         ),
     ]
diff --git a/hypha/public/people/migrations/0004_funding.py b/hypha/public/people/migrations/0004_funding.py
index 55de7f9893f22efa21be3836d0b621a1faab9e01..61359f4a21eef54d4354e33c3d4a8f4fc8b81193 100644
--- a/hypha/public/people/migrations/0004_funding.py
+++ b/hypha/public/people/migrations/0004_funding.py
@@ -8,27 +8,50 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('people', '0003_update_contact_information'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("people", "0003_update_contact_information"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='Funding',
+            name="Funding",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('value', models.PositiveIntegerField()),
-                ('year', models.PositiveIntegerField()),
-                ('duration', models.PositiveIntegerField(help_text='In months')),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='funding', to='people.PersonPage')),
-                ('source', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='wagtailcore.Page')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                ("value", models.PositiveIntegerField()),
+                ("year", models.PositiveIntegerField()),
+                ("duration", models.PositiveIntegerField(help_text="In months")),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="funding",
+                        to="people.PersonPage",
+                    ),
+                ),
+                (
+                    "source",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/people/migrations/0005_django2_update.py b/hypha/public/people/migrations/0005_django2_update.py
index bc45d7def2c7c73eead8f953451e2c438d111e66..a63dd22f574c7e725adc1e1f4071913979139bd3 100644
--- a/hypha/public/people/migrations/0005_django2_update.py
+++ b/hypha/public/people/migrations/0005_django2_update.py
@@ -5,15 +5,18 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0004_funding'),
+        ("people", "0004_funding"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='personpagepersontype',
-            name='person_type',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='people.PersonType'),
+            model_name="personpagepersontype",
+            name="person_type",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="people.PersonType",
+            ),
         ),
     ]
diff --git a/hypha/public/people/migrations/0006_fundreviewers.py b/hypha/public/people/migrations/0006_fundreviewers.py
index bc88c87b1a0730b34d635d67551af3c44ed32dec..6a62ada9c0d7b98c44cc5ce0a97ae1caa8db99f6 100644
--- a/hypha/public/people/migrations/0006_fundreviewers.py
+++ b/hypha/public/people/migrations/0006_fundreviewers.py
@@ -6,24 +6,50 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('people', '0005_django2_update'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("people", "0005_django2_update"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='FundReviewers',
+            name="FundReviewers",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewers', to='wagtailcore.Page')),
-                ('reviewer', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='funds_reviewed', to='people.PersonPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="reviewers",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "reviewer",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="funds_reviewed",
+                        to="people.PersonPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/people/migrations/0007_allow_blank_source.py b/hypha/public/people/migrations/0007_allow_blank_source.py
index a7491a136e043caf004d4a038712f752eda1f2b9..b6f5367e6e74c2452f9b88eed853ba829f0462fb 100644
--- a/hypha/public/people/migrations/0007_allow_blank_source.py
+++ b/hypha/public/people/migrations/0007_allow_blank_source.py
@@ -5,15 +5,19 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0006_fundreviewers'),
+        ("people", "0006_fundreviewers"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='funding',
-            name='source',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='wagtailcore.Page'),
+            model_name="funding",
+            name="source",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/people/migrations/0008_personpage_drupal_id.py b/hypha/public/people/migrations/0008_personpage_drupal_id.py
index baa53f0483ef48575696b1752d4be97feda66690..625653eeb39b4c020f10f45627c1b5325e97fa52 100644
--- a/hypha/public/people/migrations/0008_personpage_drupal_id.py
+++ b/hypha/public/people/migrations/0008_personpage_drupal_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0007_allow_blank_source'),
+        ("people", "0007_allow_blank_source"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='personpage',
-            name='drupal_id',
+            model_name="personpage",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/public/people/migrations/0009_dont_insist_on_first_name_or_title.py b/hypha/public/people/migrations/0009_dont_insist_on_first_name_or_title.py
index 88e2f143767295b5e405888b7131f21163a77083..49bcd4addf713a54a75e7f276ee107b2e5935f35 100644
--- a/hypha/public/people/migrations/0009_dont_insist_on_first_name_or_title.py
+++ b/hypha/public/people/migrations/0009_dont_insist_on_first_name_or_title.py
@@ -4,20 +4,19 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0008_personpage_drupal_id'),
+        ("people", "0008_personpage_drupal_id"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='personpage',
-            name='first_name',
+            model_name="personpage",
+            name="first_name",
             field=models.CharField(blank=True, max_length=255),
         ),
         migrations.AlterField(
-            model_name='personpage',
-            name='job_title',
+            model_name="personpage",
+            name="job_title",
             field=models.CharField(blank=True, max_length=255),
         ),
     ]
diff --git a/hypha/public/people/migrations/0010_personpage_active.py b/hypha/public/people/migrations/0010_personpage_active.py
index 26264de65f20aa3ac60ad01652d944e7ecc5b307..506fb6dd9ac58c25eadedf70d3d73c75466a2dae 100644
--- a/hypha/public/people/migrations/0010_personpage_active.py
+++ b/hypha/public/people/migrations/0010_personpage_active.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0009_dont_insist_on_first_name_or_title'),
+        ("people", "0009_dont_insist_on_first_name_or_title"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='personpage',
-            name='active',
+            model_name="personpage",
+            name="active",
             field=models.BooleanField(default=True),
         ),
     ]
diff --git a/hypha/public/people/migrations/0011_change_the_contact_keys.py b/hypha/public/people/migrations/0011_change_the_contact_keys.py
index 53014e3b2b329ae93a9339cff452515bbe8339ce..d21a21b305c2e7c34953a0d9648c0389748c37e3 100644
--- a/hypha/public/people/migrations/0011_change_the_contact_keys.py
+++ b/hypha/public/people/migrations/0011_change_the_contact_keys.py
@@ -4,15 +4,24 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0010_personpage_active'),
+        ("people", "0010_personpage_active"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='personcontactinfomation',
-            name='contact_method',
-            field=models.CharField(blank=True, choices=[('irc', 'IRC'), ('im', 'IM/Jabber/XMPP'), ('phone', 'Phone'), ('pgp', 'PGP fingerprint'), ('otr', 'OTR fingerprint')], max_length=255),
+            model_name="personcontactinfomation",
+            name="contact_method",
+            field=models.CharField(
+                blank=True,
+                choices=[
+                    ("irc", "IRC"),
+                    ("im", "IM/Jabber/XMPP"),
+                    ("phone", "Phone"),
+                    ("pgp", "PGP fingerprint"),
+                    ("otr", "OTR fingerprint"),
+                ],
+                max_length=255,
+            ),
         ),
     ]
diff --git a/hypha/public/people/migrations/0012_personindexpage_introduction.py b/hypha/public/people/migrations/0012_personindexpage_introduction.py
index 1a4b6015c94f20e51df70afbbe8d7c323c033b9e..72a133f703c1acc8bbe01d1926bec02fd6ac115c 100644
--- a/hypha/public/people/migrations/0012_personindexpage_introduction.py
+++ b/hypha/public/people/migrations/0012_personindexpage_introduction.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0011_change_the_contact_keys'),
+        ("people", "0011_change_the_contact_keys"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='personindexpage',
-            name='introduction',
+            model_name="personindexpage",
+            name="introduction",
             field=models.TextField(blank=True),
         ),
     ]
diff --git a/hypha/public/people/migrations/0013_add_box_apply_link_fields.py b/hypha/public/people/migrations/0013_add_box_apply_link_fields.py
index e8c7a0cd38c095e07620dd3f9e23fad65d244809..977daaa672a35c786f5e97055d7b2ecdc8fba4af 100644
--- a/hypha/public/people/migrations/0013_add_box_apply_link_fields.py
+++ b/hypha/public/people/migrations/0013_add_box_apply_link_fields.py
@@ -10,15 +10,80 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0012_personindexpage_introduction'),
+        ("people", "0012_personindexpage_introduction"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='personpage',
-            name='biography',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))], blank=True),
+            model_name="personpage",
+            name="biography",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ],
+                blank=True,
+            ),
         ),
     ]
diff --git a/hypha/public/people/migrations/0014_add_more_block.py b/hypha/public/people/migrations/0014_add_more_block.py
index 4092b57ea8f598c76e265c2817cd9a170e6d889a..17c5a964d532c3b9018372d944d41d177d1368c7 100644
--- a/hypha/public/people/migrations/0014_add_more_block.py
+++ b/hypha/public/people/migrations/0014_add_more_block.py
@@ -10,15 +10,98 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0013_add_box_apply_link_fields'),
+        ("people", "0013_add_box_apply_link_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='personpage',
-            name='biography',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))], blank=True),
+            model_name="personpage",
+            name="biography",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ],
+                blank=True,
+            ),
         ),
     ]
diff --git a/hypha/public/people/migrations/0015_alter_personpage_biography.py b/hypha/public/people/migrations/0015_alter_personpage_biography.py
index 9c4fb4fcf947cb7733a103be5384e9ab146ec488..dbda22b4bee70fceeb8f400c6bbc64b9426fb606 100644
--- a/hypha/public/people/migrations/0015_alter_personpage_biography.py
+++ b/hypha/public/people/migrations/0015_alter_personpage_biography.py
@@ -10,15 +10,99 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('people', '0014_add_more_block'),
+        ("people", "0014_add_more_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='personpage',
-            name='biography',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))], blank=True, use_json_field=True),
+            model_name="personpage",
+            name="biography",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ],
+                blank=True,
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/people/models.py b/hypha/public/people/models.py
index 5e01d02a1f358344d7b17c14803838875b92db99..5a800da65519b97670a1226bc027df2cb5deca46 100644
--- a/hypha/public/people/models.py
+++ b/hypha/public/people/models.py
@@ -22,22 +22,16 @@ from hypha.public.utils.models import BaseFunding, BasePage, FundingMixin, Relat
 
 
 class SocialMediaProfile(models.Model):
-    person_page = ParentalKey(
-        'PersonPage',
-        related_name='social_media_profile'
-    )
+    person_page = ParentalKey("PersonPage", related_name="social_media_profile")
     site_titles = (
-        ('twitter', "Twitter"),
-        ('linkedin', "LinkedIn"),
+        ("twitter", "Twitter"),
+        ("linkedin", "LinkedIn"),
     )
     site_urls = (
-        ('twitter', 'https://twitter.com/'),
-        ('linkedin', 'https://www.linkedin.com/in/')
-    )
-    service = models.CharField(
-        max_length=200,
-        choices=site_titles
+        ("twitter", "https://twitter.com/"),
+        ("linkedin", "https://www.linkedin.com/in/"),
     )
+    service = models.CharField(max_length=200, choices=site_titles)
     username = models.CharField(max_length=255)
 
     @property
@@ -45,7 +39,7 @@ class SocialMediaProfile(models.Model):
         return dict(self.site_urls)[self.service] + self.username
 
     def clean(self):
-        if self.service == 'twitter' and self.username.startswith('@'):
+        if self.service == "twitter" and self.username.startswith("@"):
             self.username = self.username[1:]
 
 
@@ -57,16 +51,14 @@ class PersonType(models.Model):
 
 
 class PersonPagePersonType(models.Model):
-    page = ParentalKey('PersonPage', related_name='person_types')
+    page = ParentalKey("PersonPage", related_name="person_types")
     person_type = models.ForeignKey(
-        'PersonType',
-        related_name='+',
+        "PersonType",
+        related_name="+",
         on_delete=models.PROTECT,
     )
 
-    panels = [
-        FieldPanel('person_type')
-    ]
+    panels = [FieldPanel("person_type")]
 
     def __str__(self):
         return self.person_type.title
@@ -74,34 +66,41 @@ class PersonPagePersonType(models.Model):
 
 class FundingQuerySet(models.QuerySet):
     def people(self):
-        return PersonPage.objects.filter(id__in=self.values_list('page__id')).live().active().public()
+        return (
+            PersonPage.objects.filter(id__in=self.values_list("page__id"))
+            .live()
+            .active()
+            .public()
+        )
 
 
 class Funding(BaseFunding):
-    page = ParentalKey('PersonPage', related_name='funding')
+    page = ParentalKey("PersonPage", related_name="funding")
 
     objects = FundingQuerySet.as_manager()
 
 
 class PersonContactInfomation(Orderable):
     methods = (
-        ('irc', 'IRC'),
-        ('im', 'IM/Jabber/XMPP'),
-        ('phone', 'Phone'),
-        ('pgp', 'PGP fingerprint'),
-        ('otr', 'OTR fingerprint'),
+        ("irc", "IRC"),
+        ("im", "IM/Jabber/XMPP"),
+        ("phone", "Phone"),
+        ("pgp", "PGP fingerprint"),
+        ("otr", "OTR fingerprint"),
     )
-    page = ParentalKey('PersonPage', related_name='contact_details')
+    page = ParentalKey("PersonPage", related_name="contact_details")
     contact_method = models.CharField(max_length=255, choices=methods, blank=True)
-    other_method = models.CharField(max_length=255, blank=True, verbose_name=_('Other'))
+    other_method = models.CharField(max_length=255, blank=True, verbose_name=_("Other"))
     contact_detail = models.CharField(max_length=255)
 
     panels = [
-        FieldRowPanel([
-            FieldPanel('contact_method'),
-            FieldPanel('other_method'),
-        ]),
-        FieldPanel('contact_detail'),
+        FieldRowPanel(
+            [
+                FieldPanel("contact_method"),
+                FieldPanel("other_method"),
+            ]
+        ),
+        FieldPanel("contact_detail"),
     ]
 
     @property
@@ -110,31 +109,46 @@ class PersonContactInfomation(Orderable):
 
     def clean(self):
         if not (self.contact_method or self.other_method):
-            raise ValidationError({
-                'contact_method': 'Please select or type at least one contact method.',
-                'other_method': '',
-            })
+            raise ValidationError(
+                {
+                    "contact_method": "Please select or type at least one contact method.",
+                    "other_method": "",
+                }
+            )
 
         if self.contact_method and self.other_method:
-            raise ValidationError({
-                'contact_method': 'Please only select or type one contact method.',
-                'other_method': '',
-            })
+            raise ValidationError(
+                {
+                    "contact_method": "Please only select or type one contact method.",
+                    "other_method": "",
+                }
+            )
 
 
 class ReviewerQuerySet(models.QuerySet):
     def people(self):
-        return PersonPage.objects.filter(id__in=self.values_list('reviewer__id')).live().active().public()
+        return (
+            PersonPage.objects.filter(id__in=self.values_list("reviewer__id"))
+            .live()
+            .active()
+            .public()
+        )
 
 
 class FundReviewers(RelatedPage):
-    page = models.ForeignKey('wagtailcore.Page', null=True, blank=True, on_delete=models.SET_NULL, related_name='reviewers')
-    reviewer = ParentalKey('PersonPage', related_name='funds_reviewed')
+    page = models.ForeignKey(
+        "wagtailcore.Page",
+        null=True,
+        blank=True,
+        on_delete=models.SET_NULL,
+        related_name="reviewers",
+    )
+    reviewer = ParentalKey("PersonPage", related_name="funds_reviewed")
 
     objects = ReviewerQuerySet.as_manager()
 
     panels = [
-        PageChooserPanel('page', 'public_funds.FundPage'),
+        PageChooserPanel("page", "public_funds.FundPage"),
     ]
 
 
@@ -145,18 +159,18 @@ class PersonQuerySet(PageQuerySet):
 
 class PersonPage(FundingMixin, BasePage):
     subpage_types = []
-    parent_page_types = ['PersonIndexPage']
+    parent_page_types = ["PersonIndexPage"]
 
     drupal_id = models.IntegerField(null=True, blank=True, editable=False)
 
     first_name = models.CharField(max_length=255, blank=True)
     last_name = models.CharField(max_length=255)
     photo = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
-        related_name='+',
-        on_delete=models.SET_NULL
+        related_name="+",
+        on_delete=models.SET_NULL,
     )
     active = models.BooleanField(default=True)
     job_title = models.CharField(max_length=255, blank=True)
@@ -168,61 +182,80 @@ class PersonPage(FundingMixin, BasePage):
     objects = PageManager.from_queryset(PersonQuerySet)()
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
-        index.SearchField('biography')
+        index.SearchField("introduction"),
+        index.SearchField("biography"),
     ]
 
-    content_panels = BasePage.content_panels + [
-        MultiFieldPanel([
-            FieldPanel('first_name'),
-            FieldPanel('last_name'),
-        ], heading=_('Name')),
-        FieldPanel('active'),
-        FieldPanel('photo'),
-        FieldPanel('job_title'),
-        InlinePanel('social_media_profile', label=_('Social accounts')),
-        FieldPanel('website'),
-        MultiFieldPanel([
-            FieldPanel('email'),
-            InlinePanel('contact_details', label=_('Other Contact Methods')),
-        ], heading=_('Contact information')),
-        InlinePanel('person_types', label=_('Person types')),
-        FieldPanel('introduction'),
-        FieldPanel('biography'),
-        InlinePanel('funds_reviewed', label=_('Funds Reviewed')),
-    ] + FundingMixin.content_panels
+    content_panels = (
+        BasePage.content_panels
+        + [
+            MultiFieldPanel(
+                [
+                    FieldPanel("first_name"),
+                    FieldPanel("last_name"),
+                ],
+                heading=_("Name"),
+            ),
+            FieldPanel("active"),
+            FieldPanel("photo"),
+            FieldPanel("job_title"),
+            InlinePanel("social_media_profile", label=_("Social accounts")),
+            FieldPanel("website"),
+            MultiFieldPanel(
+                [
+                    FieldPanel("email"),
+                    InlinePanel("contact_details", label=_("Other Contact Methods")),
+                ],
+                heading=_("Contact information"),
+            ),
+            InlinePanel("person_types", label=_("Person types")),
+            FieldPanel("introduction"),
+            FieldPanel("biography"),
+            InlinePanel("funds_reviewed", label=_("Funds Reviewed")),
+        ]
+        + FundingMixin.content_panels
+    )
 
 
 class PersonIndexPage(BasePage):
-    subpage_types = ['PersonPage']
-    parent_page_types = ['standardpages.IndexPage']
+    subpage_types = ["PersonPage"]
+    parent_page_types = ["standardpages.IndexPage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget()),
+        FieldPanel("introduction", widget=PagedownWidget()),
     ]
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
+        index.SearchField("introduction"),
     ]
 
     def get_context(self, request, *args, **kwargs):
-        people = PersonPage.objects.live().public().descendant_of(self).order_by(
-            'title',
-        ).select_related(
-            'photo',
-        ).prefetch_related(
-            'person_types__person_type',
+        people = (
+            PersonPage.objects.live()
+            .public()
+            .descendant_of(self)
+            .order_by(
+                "title",
+            )
+            .select_related(
+                "photo",
+            )
+            .prefetch_related(
+                "person_types__person_type",
+            )
         )
 
-        if request.GET.get('person_type') and request.GET.get('person_type').isdigit():
-            people = people.filter(person_types__person_type=request.GET.get('person_type'))
+        if request.GET.get("person_type") and request.GET.get("person_type").isdigit():
+            people = people.filter(
+                person_types__person_type=request.GET.get("person_type")
+            )
 
-        if not request.GET.get('include_inactive') == 'true':
+        if not request.GET.get("include_inactive") == "true":
             people = people.filter(active=True)
 
-        page_number = request.GET.get('page')
+        page_number = request.GET.get("page")
         paginator = Paginator(people, settings.DEFAULT_PER_PAGE)
         try:
             people = paginator.page(page_number)
@@ -235,9 +268,9 @@ class PersonIndexPage(BasePage):
         context.update(
             people=people,
             # Only show person types that have been used
-            person_types=PersonPagePersonType.objects.all().values_list(
-                'person_type__pk', 'person_type__title'
-            ).distinct()
+            person_types=PersonPagePersonType.objects.all()
+            .values_list("person_type__pk", "person_type__title")
+            .distinct(),
         )
 
         return context
diff --git a/hypha/public/people/static/people/admin/js/update_person_title.js b/hypha/public/people/static/people/admin/js/update_person_title.js
index 589f89eec9ca9264439f3404a7bb5ca4e3fe246e..c956d262c68dbeb03015ae384086f607976bbb28 100644
--- a/hypha/public/people/static/people/admin/js/update_person_title.js
+++ b/hypha/public/people/static/people/admin/js/update_person_title.js
@@ -1,21 +1,25 @@
 $(document).ready(function () {
-    var $lastNameInput = $('#id_last_name');
-    var $firstNameInput = $('#id_first_name');
-    var $titleInput = $('#id_title');
-    var $slugInput = $('#id_slug');
+    var $lastNameInput = $("#id_last_name");
+    var $firstNameInput = $("#id_first_name");
+    var $titleInput = $("#id_title");
+    var $slugInput = $("#id_slug");
 
-    $firstNameInput.on('input', function () {joinFirstNameLastName();});
+    $firstNameInput.on("input", function () {
+        joinFirstNameLastName();
+    });
 
-    $lastNameInput.on('input', function () {joinFirstNameLastName();});
+    $lastNameInput.on("input", function () {
+        joinFirstNameLastName();
+    });
 
     function joinFirstNameLastName() {
         var firstName = $firstNameInput.val();
         var lastName = $lastNameInput.val();
-        var title = firstName + ' ' + lastName;
+        var title = firstName + " " + lastName;
 
-        $slugInput.data('previous-val', $slugInput.val());
-        $titleInput.data('previous-val', $titleInput.val());
+        $slugInput.data("previous-val", $slugInput.val());
+        $titleInput.data("previous-val", $titleInput.val());
         $titleInput.val(title);
-        $titleInput.blur();  // Trigger slug update
+        $titleInput.blur(); // Trigger slug update
     }
 });
diff --git a/hypha/public/people/templates/people/person_index_page.html b/hypha/public/people/templates/people/person_index_page.html
index 6fd80c5cbcb87ba3a49674c35a1b0c62d88d9bf8..b4ce4bd5910c84bb8ced122820a092552552be10 100644
--- a/hypha/public/people/templates/people/person_index_page.html
+++ b/hypha/public/people/templates/people/person_index_page.html
@@ -2,10 +2,10 @@
 {% load wagtailcore_tags markdown_tags bleach_tags %}
 {% block body_class %}light-grey-bg{% endblock %}
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
-    {% if page.introduction %}
-        <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
-    {% endif %}
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
+        {% if page.introduction %}
+            <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
+        {% endif %}
 
         <form class="form" method="GET">
             <div class="form__group form__group--checkbox">
@@ -28,17 +28,17 @@
             <button class="link link--button link--button__stretch" type="submit">Filter</button>
         </form>
 
-    <div class="wrapper wrapper--listings">
-        {% if people.paginator.count %}
-            {% for person in people %}
-                {% include "people/includes/person_listing.html" with person=person %}
-            {% endfor %}
+        <div class="wrapper wrapper--listings">
+            {% if people.paginator.count %}
+                {% for person in people %}
+                    {% include "people/includes/person_listing.html" with person=person %}
+                {% endfor %}
 
-            {% include "includes/pagination.html" with paginator_page=people %}
-        {% else %}
+                {% include "includes/pagination.html" with paginator_page=people %}
+            {% else %}
             {# no results #}
-        {% endif %}
+            {% endif %}
+        </div>
     </div>
-</div>
 
 {% endblock %}
diff --git a/hypha/public/people/templates/people/person_page.html b/hypha/public/people/templates/people/person_page.html
index f6f605655f1c639264c935b87947a27a42b35f93..02fe3ce112bd08e54af880133aa260e6b8a0956f 100644
--- a/hypha/public/people/templates/people/person_page.html
+++ b/hypha/public/people/templates/people/person_page.html
@@ -3,57 +3,57 @@
 {% load wagtailcore_tags wagtailimages_tags %}
 
 {% block content %}
-<section class="wrapper wrapper--small wrapper--inner-space-large wrapper--sidebar">
-    <div class="wrapper--sidebar--inner">
-        {% for person_type in page.person_types.all %}
-            <h5 class="heading heading--no-margin">{{ person_type }}</h5>
-        {% endfor %}
-
-        {% if page.job_title %}
-            <h4 class="heading">{{ page.job_title }}</h4>
-        {% endif %}
-
-        {% if page.photo %}
-            {% image page.photo fill-210x235 class="image image--headshot-mobile" %}
-        {% endif %}
-
-        {% if page.introduction %}
-            <h4 class="heading heading--person-introduction">{{ page.introduction }}</h4>
-        {% endif %}
-
-        {% include_block page.biography %}
-
-        {% if page.website %}
-            <p class="list list--contact"><span>Website:</span> <a href="{{ page.website }}">{{ page.website }}</a></p>
-        {% endif %}
-
-        {% if page.email %}
-            <p class="list list--contact"><span>Email:</span> <a href="{{ page.email }}">{{ page.email }}</a></p>
-        {% endif %}
-
-        {% with contact_details=page.contact_details.all %}
-            {% if contact_details %}
-                {% for contact in contact_details %}
-                    <p class="list list--contact"><span>{{ contact.method_display }}:</span> {{ contact.contact_detail }}</p>
+    <section class="wrapper wrapper--small wrapper--inner-space-large wrapper--sidebar">
+        <div class="wrapper--sidebar--inner">
+            {% for person_type in page.person_types.all %}
+                <h5 class="heading heading--no-margin">{{ person_type }}</h5>
+            {% endfor %}
+
+            {% if page.job_title %}
+                <h4 class="heading">{{ page.job_title }}</h4>
+            {% endif %}
+
+            {% if page.photo %}
+                {% image page.photo fill-210x235 class="image image--headshot-mobile" %}
+            {% endif %}
+
+            {% if page.introduction %}
+                <h4 class="heading heading--person-introduction">{{ page.introduction }}</h4>
+            {% endif %}
+
+            {% include_block page.biography %}
+
+            {% if page.website %}
+                <p class="list list--contact"><span>Website:</span> <a href="{{ page.website }}">{{ page.website }}</a></p>
+            {% endif %}
+
+            {% if page.email %}
+                <p class="list list--contact"><span>Email:</span> <a href="{{ page.email }}">{{ page.email }}</a></p>
+            {% endif %}
+
+            {% with contact_details=page.contact_details.all %}
+                {% if contact_details %}
+                    {% for contact in contact_details %}
+                        <p class="list list--contact"><span>{{ contact.method_display }}:</span> {{ contact.contact_detail }}</p>
+                    {% endfor %}
+                {% endif %}
+            {% endwith %}
+            {% include "utils/includes/funding.html" with class="wrapper--top-outer-space-small" %}
+        </div>
+
+        <div>
+            {% if page.photo %}
+                {% image page.photo fill-210x235 class="image image--headshot-desktop" %}
+            {% endif %}
+
+            {% if page.social_media_profile.all %}
+                <h5>Follow {{ page.first_name }}</h5>
+                {% for item in page.social_media_profile.all %}
+                    <a aria-label="Social media link" href="{{ item.profile_url }}">
+                        <svg class="icon icon--social-share icon--{{item.service}}-share"><use xlink:href="#{{item.service}}"></use></svg>
+                    </a>
                 {% endfor %}
             {% endif %}
-        {% endwith %}
-        {% include "utils/includes/funding.html" with class="wrapper--top-outer-space-small" %}
-    </div>
-
-    <div>
-        {% if page.photo %}
-            {% image page.photo fill-210x235 class="image image--headshot-desktop" %}
-        {% endif %}
-
-        {% if page.social_media_profile.all %}
-            <h5>Follow {{ page.first_name }}</h5>
-            {% for item in page.social_media_profile.all %}
-                <a aria-label="Social media link" href="{{ item.profile_url }}">
-                    <svg class="icon icon--social-share icon--{{item.service}}-share"><use xlink:href="#{{item.service}}"></use></svg>
-                </a>
-            {% endfor %}
-        {% endif %}
-    </div>
-</section>
+        </div>
+    </section>
 {% endblock %}
diff --git a/hypha/public/people/wagtail_hooks.py b/hypha/public/people/wagtail_hooks.py
index 039c4a306b579f54406ed5800b4091639a996d22..2726ec34dd5496587ffafb06d1cc0ff20849854e 100644
--- a/hypha/public/people/wagtail_hooks.py
+++ b/hypha/public/people/wagtail_hooks.py
@@ -3,8 +3,8 @@ from django.utils.safestring import mark_safe
 from wagtail import hooks
 
 
-@hooks.register('insert_editor_js')
+@hooks.register("insert_editor_js")
 def editor_js():
     return mark_safe(
-        '<script src="%s"></script>' % static('people/admin/js/update_person_title.js')
+        '<script src="%s"></script>' % static("people/admin/js/update_person_title.js")
     )
diff --git a/hypha/public/projects/apps.py b/hypha/public/projects/apps.py
index 16d08b51c40cce844339cc157aa167e212834513..e274216b7bcba2440fb7669973de1d3dcb9342e2 100644
--- a/hypha/public/projects/apps.py
+++ b/hypha/public/projects/apps.py
@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class ProjectsConfig(AppConfig):
-    name = 'hypha.public.projects'
+    name = "hypha.public.projects"
diff --git a/hypha/public/projects/management/commands/migrate_projects.py b/hypha/public/projects/management/commands/migrate_projects.py
index 567124a6647c443c0ba191d3d3000bce674db4f0..28eabd427ff365c35054257ad5e1d925fffa9de5 100644
--- a/hypha/public/projects/management/commands/migrate_projects.py
+++ b/hypha/public/projects/management/commands/migrate_projects.py
@@ -36,9 +36,7 @@ VALID_IMAGE_EXTENSIONS = [
     ".gif",
 ]
 
-VALID_IMAGE_MIMETYPES = [
-    "image"
-]
+VALID_IMAGE_MIMETYPES = ["image"]
 
 
 def valid_url_extension(url, extension_list=VALID_IMAGE_EXTENSIONS):
@@ -60,29 +58,35 @@ class Command(BaseCommand):
     whitelister = EditorHTMLConverter().whitelister
 
     def add_arguments(self, parser):
-        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+        parser.add_argument(
+            "source", type=argparse.FileType("r"), help="Migration source JSON file"
+        )
 
     @transaction.atomic
     def handle(self, *args, **options):
         # Prepare the list of categories.
         for item in CATEGORIES:
-            category, _ = Category.objects.get_or_create(name=item['category'])
-            option, _ = Option.objects.get_or_create(value=item['name'], category=category)
-            self.terms[item['tid']] = option
+            category, _ = Category.objects.get_or_create(name=item["category"])
+            option, _ = Option.objects.get_or_create(
+                value=item["name"], category=category
+            )
+            self.terms[item["tid"]] = option
 
         self.parent_page = ProjectIndexPage.objects.first()
 
         if not self.parent_page:
-            raise ProjectIndexPage.DoesNotExist('Project Index Page must exist to import projects')
+            raise ProjectIndexPage.DoesNotExist(
+                "Project Index Page must exist to import projects"
+            )
 
         self.funds = {
-            '3625': Page.objects.get(title='Internet Freedom Fund'),
-            '3654': Page.objects.get(title='Rapid Response Fund'),
-            '3905': Page.objects.get(title='Core Infrastructure Fund'),
-            '7791': Page.objects.get(title='Community Lab'),
+            "3625": Page.objects.get(title="Internet Freedom Fund"),
+            "3654": Page.objects.get(title="Rapid Response Fund"),
+            "3905": Page.objects.get(title="Core Infrastructure Fund"),
+            "7791": Page.objects.get(title="Community Lab"),
         }
 
-        with options['source'] as json_data:
+        with options["source"] as json_data:
             self.data = json.load(json_data)
 
             counter = 0
@@ -96,116 +100,125 @@ class Command(BaseCommand):
         node = self.data[id]
 
         try:
-            project = ProjectPage.objects.get(drupal_id=node['nid'])
+            project = ProjectPage.objects.get(drupal_id=node["nid"])
         except ProjectPage.DoesNotExist:
-            project = ProjectPage(drupal_id=node['nid'])
+            project = ProjectPage(drupal_id=node["nid"])
 
         # TODO timezone?
-        project.submit_time = datetime.fromtimestamp(int(node['created']), timezone.utc)
+        project.submit_time = datetime.fromtimestamp(int(node["created"]), timezone.utc)
 
-        project.title = node['title']
+        project.title = node["title"]
 
-        image_url_base = 'https://www.opentech.fund/sites/default/files/'
+        image_url_base = "https://www.opentech.fund/sites/default/files/"
         try:
-            uri = node['field_project_image']['uri']
+            uri = node["field_project_image"]["uri"]
         except TypeError:
             # There was no image
             pass
         else:
             parts = urlsplit(uri)
             image_url = image_url_base + parts.netloc + parts.path
-            project.icon = self.wagtail_image_obj_from_url(image_url, node['field_project_image']['fid'])
+            project.icon = self.wagtail_image_obj_from_url(
+                image_url, node["field_project_image"]["fid"]
+            )
 
-        project.introduction = self.get_field(node, 'field_preamble')
+        project.introduction = self.get_field(node, "field_preamble")
 
-        cleaned_body = self.whitelister.clean(self.get_field(node, 'body'))
+        cleaned_body = self.whitelister.clean(self.get_field(node, "body"))
         if project.introduction:
-            project.body = [('paragraph', RichText(cleaned_body))]
+            project.body = [("paragraph", RichText(cleaned_body))]
         else:
             # Use the first sentence of the body as an intro
             very_clean_body = bleach.clean(cleaned_body, strip=True)
-            introduction = very_clean_body.split('.')[0] + '.'
+            introduction = very_clean_body.split(".")[0] + "."
             project.introduction = introduction
-            body_without_intro = cleaned_body.replace(introduction, '').strip()
-            project.body = [('paragraph', RichText(body_without_intro))]
+            body_without_intro = cleaned_body.replace(introduction, "").strip()
+            project.body = [("paragraph", RichText(body_without_intro))]
 
         status = {
-            '329': 'idea',
-            '328': 'exists',
-            '366': 'release',
-            '367': 'production',
+            "329": "idea",
+            "328": "exists",
+            "366": "release",
+            "367": "production",
         }
-        project.status = status[node['field_proposal_status']['tid']]
+        project.status = status[node["field_proposal_status"]["tid"]]
 
         project.contact_details.clear()
 
-        sites = node['field_project_url']
+        sites = node["field_project_url"]
 
         if isinstance(sites, dict):
             sites = [sites]
 
         for site in sites:
-            url = site['url']
-            if 'github' in url:
-                page_type = 'github'
+            url = site["url"]
+            if "github" in url:
+                page_type = "github"
                 url = urlsplit(url).path
             else:
-                page_type = 'website'
+                page_type = "website"
 
-            project.contact_details.add(ProjectContactDetails(
-                service=page_type,
-                value=url,
-            ))
+            project.contact_details.add(
+                ProjectContactDetails(
+                    service=page_type,
+                    value=url,
+                )
+            )
 
-        project.contact_details.add(ProjectContactDetails(
-            service='twitter',
-            value=self.get_field(node, 'field_project_twitter')
-        ))
+        project.contact_details.add(
+            ProjectContactDetails(
+                service="twitter", value=self.get_field(node, "field_project_twitter")
+            )
+        )
 
         # Funding
         project.funding.clear()
 
-        years = self.ensure_iterable(node['field_project_funding_year'])
-        amounts = self.ensure_iterable(node['field_project_funding_amount'])
-        durations = self.ensure_iterable(node['field_project_term_time'])
-        funds = self.ensure_iterable(node['field_project_funding_request'])
-        for year, amount, duration, fund in itertools.zip_longest(years, amounts, durations, funds):
+        years = self.ensure_iterable(node["field_project_funding_year"])
+        amounts = self.ensure_iterable(node["field_project_funding_amount"])
+        durations = self.ensure_iterable(node["field_project_term_time"])
+        funds = self.ensure_iterable(node["field_project_funding_request"])
+        for year, amount, duration, fund in itertools.zip_longest(
+            years, amounts, durations, funds
+        ):
             try:
-                fund = self.funds[fund['target_id']]
+                fund = self.funds[fund["target_id"]]
             except TypeError:
                 fund = None
 
             try:
-                duration = duration['value']
+                duration = duration["value"]
             except TypeError:
                 duration = 0
 
             try:
-                amount = amount['value']
+                amount = amount["value"]
             except TypeError:
                 # This is an error, don't give funding
                 continue
 
-            project.funding.add(ProjectFunding(
-                value=amount,
-                year=year['value'],
-                duration=duration,
-                source=fund,
-            ))
+            project.funding.add(
+                ProjectFunding(
+                    value=amount,
+                    year=year["value"],
+                    duration=duration,
+                    source=fund,
+                )
+            )
 
         category_fields = [
-            'field_term_region',
-            'field_term_country',
-            'field_technology_attribute',
-            'field_proposal_theme',
-            'field_proposal_focus',
-            'field_proposal_beneficiaries',
+            "field_term_region",
+            "field_term_country",
+            "field_technology_attribute",
+            "field_proposal_theme",
+            "field_proposal_focus",
+            "field_proposal_beneficiaries",
         ]
         categories = {}
         for category in category_fields:
             terms = self.ensure_iterable(node[category])
             for term in terms:
-                option = self.get_referenced_term(term['tid'])
+                option = self.get_referenced_term(term["tid"])
                 if option:
                     categories.setdefault(option.category.id, []).append(option.id)
 
@@ -215,9 +228,13 @@ class Command(BaseCommand):
             if not project.get_parent():
                 self.parent_page.add_child(instance=project)
             project.save_revision().publish()
-            self.stdout.write(f"Processed \"{node['title'].encode('utf8')}\" ({node['nid']})")
+            self.stdout.write(
+                f"Processed \"{node['title'].encode('utf8')}\" ({node['nid']})"
+            )
         except IntegrityError:
-            self.stdout.write(f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError")
+            self.stdout.write(
+                f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError"
+            )
             pass
 
     def ensure_iterable(self, value):
@@ -227,13 +244,13 @@ class Command(BaseCommand):
 
     def get_field(self, node, field):
         try:
-            return node[field]['safe_value']
+            return node[field]["safe_value"]
         except TypeError:
             pass
         try:
-            return node[field]['value']
+            return node[field]["value"]
         except TypeError:
-            return ''
+            return ""
 
     def get_referenced_term(self, tid):
         try:
@@ -242,7 +259,7 @@ class Command(BaseCommand):
             return None
 
     def nl2br(self, value):
-        return value.replace('\r\n', '<br>\n')
+        return value.replace("\r\n", "<br>\n")
 
     @staticmethod
     def wagtail_image_obj_from_url(url, drupal_id=None):
@@ -261,7 +278,7 @@ class Command(BaseCommand):
 
             if r.status_code == requests.codes.ok:
                 img_buffer = BytesIO(r.content)
-                img_filename = url.rsplit('/', 1)[1]
+                img_filename = url.rsplit("/", 1)[1]
 
                 # Test downloaded file is valid image file
                 try:
@@ -273,7 +290,7 @@ class Command(BaseCommand):
                     img = WagtailImage.objects.create(
                         title=img_filename,
                         file=ImageFile(img_buffer, name=img_filename),
-                        drupal_id=drupal_id
+                        drupal_id=drupal_id,
                     )
                     return img
         return None
diff --git a/hypha/public/projects/migrations/0001_initial.py b/hypha/public/projects/migrations/0001_initial.py
index 91928795db03f95595ba692aaba1e030b79b025f..916c7072a47366aab514313623a1466bcdcf4ffa 100644
--- a/hypha/public/projects/migrations/0001_initial.py
+++ b/hypha/public/projects/migrations/0001_initial.py
@@ -14,75 +14,306 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('images', '0001_initial'),
-        ('wagtailcore', '0040_page_draft_title'),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0040_page_draft_title"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectContactDetails',
+            name="ProjectContactDetails",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('service', models.CharField(choices=[('website', 'Main Website URL'), ('twitter', 'Twitter Handle'), ('github', 'Github Organisation or Project')], max_length=200)),
-                ('value', models.CharField(max_length=255)),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "service",
+                    models.CharField(
+                        choices=[
+                            ("website", "Main Website URL"),
+                            ("twitter", "Twitter Handle"),
+                            ("github", "Github Organisation or Project"),
+                        ],
+                        max_length=200,
+                    ),
+                ),
+                ("value", models.CharField(max_length=255)),
             ],
         ),
         migrations.CreateModel(
-            name='ProjectIndexPage',
+            name="ProjectIndexPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='ProjectPage',
+            name="ProjectPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('body', wagtail.fields.StreamField((('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock((('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))))), ('quote', wagtail.blocks.StructBlock((('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))))), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock((('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False)))))))),
-                ('header_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('icon', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "body",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "heading",
+                                wagtail.blocks.CharBlock(
+                                    classname="full title", icon="title"
+                                ),
+                            ),
+                            ("paragraph", wagtail.blocks.RichTextBlock()),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(),
+                                        ),
+                                        (
+                                            "caption",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(classname="title"),
+                                        ),
+                                        (
+                                            "attribution",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                        (
+                                            "job_title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                            (
+                                "call_to_action",
+                                wagtail.snippets.blocks.SnippetChooserBlock(
+                                    "utils.CallToActionSnippet",
+                                    template="blocks/call_to_action_block.html",
+                                ),
+                            ),
+                            (
+                                "document",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "document",
+                                            wagtail.documents.blocks.DocumentChooserBlock(),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        )
+                    ),
+                ),
+                (
+                    "header_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "icon",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='ProjectPageRelatedPage',
+            name="ProjectPageRelatedPage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_pages', to='projects.ProjectPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="related_pages",
+                        to="projects.ProjectPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
         migrations.AddField(
-            model_name='projectcontactdetails',
-            name='project_page',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='contact_details', to='projects.ProjectPage'),
+            model_name="projectcontactdetails",
+            name="project_page",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="contact_details",
+                to="projects.ProjectPage",
+            ),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0002_projectfunding.py b/hypha/public/projects/migrations/0002_projectfunding.py
index 56cd4bf2ad24097246620096a8668e089ae69700..ddb78a33b77b2ae2b6fba57ae957a1c0e40da757 100644
--- a/hypha/public/projects/migrations/0002_projectfunding.py
+++ b/hypha/public/projects/migrations/0002_projectfunding.py
@@ -8,27 +8,50 @@ import modelcluster.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('wagtailcore', '0040_page_draft_title'),
-        ('projects', '0001_initial'),
+        ("wagtailcore", "0040_page_draft_title"),
+        ("projects", "0001_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ProjectFunding',
+            name="ProjectFunding",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('value', models.PositiveIntegerField()),
-                ('year', models.PositiveIntegerField()),
-                ('duration', models.PositiveIntegerField(help_text='In months')),
-                ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='funding', to='projects.ProjectPage')),
-                ('source', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='wagtailcore.Page')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                ("value", models.PositiveIntegerField()),
+                ("year", models.PositiveIntegerField()),
+                ("duration", models.PositiveIntegerField(help_text="In months")),
+                (
+                    "page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="funding",
+                        to="projects.ProjectPage",
+                    ),
+                ),
+                (
+                    "source",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="wagtailcore.Page",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/projects/migrations/0003_projectpage_status.py b/hypha/public/projects/migrations/0003_projectpage_status.py
index c1c72f4aff08e022d6d5c2baf6511660ff76ac4d..ebf7a166817d3a98dd0f37f54ffcb821409aca4d 100644
--- a/hypha/public/projects/migrations/0003_projectpage_status.py
+++ b/hypha/public/projects/migrations/0003_projectpage_status.py
@@ -6,15 +6,23 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0002_projectfunding'),
+        ("projects", "0002_projectfunding"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='projectpage',
-            name='status',
-            field=models.CharField(choices=[('idea', 'Just an Idea. (Pre-alpha)'), ('exists', 'It Exists! (Alpha/Beta)'), ('release', "It's basically done. (Release)"), ('production', 'People Use it. (Production)')], default='idea', max_length=25),
+            model_name="projectpage",
+            name="status",
+            field=models.CharField(
+                choices=[
+                    ("idea", "Just an Idea. (Pre-alpha)"),
+                    ("exists", "It Exists! (Alpha/Beta)"),
+                    ("release", "It's basically done. (Release)"),
+                    ("production", "People Use it. (Production)"),
+                ],
+                default="idea",
+                max_length=25,
+            ),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0004_projectpage_categories.py b/hypha/public/projects/migrations/0004_projectpage_categories.py
index ad7728e58f3e19da40e4cf19421d5047e044cedf..b3c8eb8430906a5cb2076d63c280be4cc789915e 100644
--- a/hypha/public/projects/migrations/0004_projectpage_categories.py
+++ b/hypha/public/projects/migrations/0004_projectpage_categories.py
@@ -6,15 +6,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0003_projectpage_status'),
+        ("projects", "0003_projectpage_status"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='projectpage',
-            name='categories',
-            field=models.TextField(default='{}', blank=True),
+            model_name="projectpage",
+            name="categories",
+            field=models.TextField(default="{}", blank=True),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0005_projectpage_drupal_id.py b/hypha/public/projects/migrations/0005_projectpage_drupal_id.py
index adb05539c624a676b1409ad752f128a28b851ee5..093e887064e38c8269083d89e7453f71fccd7cee 100644
--- a/hypha/public/projects/migrations/0005_projectpage_drupal_id.py
+++ b/hypha/public/projects/migrations/0005_projectpage_drupal_id.py
@@ -4,15 +4,14 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0004_projectpage_categories'),
+        ("projects", "0004_projectpage_categories"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='projectpage',
-            name='drupal_id',
+            model_name="projectpage",
+            name="drupal_id",
             field=models.IntegerField(blank=True, editable=False, null=True),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0006_allow_blank_source.py b/hypha/public/projects/migrations/0006_allow_blank_source.py
index ac212e9577f4f13e55454fb01c17e87da57d5041..412c7118f295c40a127f05078f6d2b65dd74c1a3 100644
--- a/hypha/public/projects/migrations/0006_allow_blank_source.py
+++ b/hypha/public/projects/migrations/0006_allow_blank_source.py
@@ -5,15 +5,19 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0005_projectpage_drupal_id'),
+        ("projects", "0005_projectpage_drupal_id"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='projectfunding',
-            name='source',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='wagtailcore.Page'),
+            model_name="projectfunding",
+            name="source",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0007_fix_related_page_required_behaviour.py b/hypha/public/projects/migrations/0007_fix_related_page_required_behaviour.py
index 8c5f73d615ef7d160358aeff3b3d8ff60360a0fd..9ccd8b18bcaa5bb4a48208a7b0816afc068a0488 100644
--- a/hypha/public/projects/migrations/0007_fix_related_page_required_behaviour.py
+++ b/hypha/public/projects/migrations/0007_fix_related_page_required_behaviour.py
@@ -5,15 +5,18 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0006_allow_blank_source'),
+        ("projects", "0006_allow_blank_source"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='projectpagerelatedpage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="projectpagerelatedpage",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0008_add_box_apply_link_fields.py b/hypha/public/projects/migrations/0008_add_box_apply_link_fields.py
index 52367429bec7d6af20608be3f67a2f7d76397cb5..6bc8bc8decd3e9ba37fcf9b9e949a2fa3d17a8a5 100644
--- a/hypha/public/projects/migrations/0008_add_box_apply_link_fields.py
+++ b/hypha/public/projects/migrations/0008_add_box_apply_link_fields.py
@@ -10,15 +10,79 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0007_fix_related_page_required_behaviour'),
+        ("projects", "0007_fix_related_page_required_behaviour"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='projectpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))]),
+            model_name="projectpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0009_add_more_block.py b/hypha/public/projects/migrations/0009_add_more_block.py
index 5087d27d0636fa441af01aef87c56a76cd321cee..24d04bb5623c4118e7c233d67dfc8d445e6f43b3 100644
--- a/hypha/public/projects/migrations/0009_add_more_block.py
+++ b/hypha/public/projects/migrations/0009_add_more_block.py
@@ -10,15 +10,97 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0008_add_box_apply_link_fields'),
+        ("projects", "0008_add_box_apply_link_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='projectpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))]),
+            model_name="projectpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/projects/migrations/0010_alter_projectpage_body.py b/hypha/public/projects/migrations/0010_alter_projectpage_body.py
index d973efa09e292d9afe5c6a5324738d2bd786bc4c..c03eacf376f4f930718538516cc818504abb143f 100644
--- a/hypha/public/projects/migrations/0010_alter_projectpage_body.py
+++ b/hypha/public/projects/migrations/0010_alter_projectpage_body.py
@@ -10,15 +10,98 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('projects', '0009_add_more_block'),
+        ("projects", "0009_add_more_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='projectpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))], use_json_field=True),
+            model_name="projectpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/projects/models.py b/hypha/public/projects/models.py
index ca772ed50ffff4e38137af0b6c543b6bc446e46f..bc6e704dd015f18258b0e85218ce8f576558cf11 100644
--- a/hypha/public/projects/models.py
+++ b/hypha/public/projects/models.py
@@ -25,19 +25,16 @@ from .widgets import CategoriesWidget
 
 
 class ProjectContactDetails(models.Model):
-    project_page = ParentalKey(
-        'ProjectPage',
-        related_name='contact_details'
-    )
+    project_page = ParentalKey("ProjectPage", related_name="contact_details")
     site_titles = (
-        ('website', "Main Website URL"),
-        ('twitter', "Twitter Handle"),
-        ('github', "Github Organisation or Project"),
+        ("website", "Main Website URL"),
+        ("twitter", "Twitter Handle"),
+        ("github", "Github Organisation or Project"),
     )
     site_urls = (
-        ('website', ''),
-        ('twitter', 'https://twitter.com/'),
-        ('github', 'https://github.com/'),
+        ("website", ""),
+        ("twitter", "https://twitter.com/"),
+        ("github", "https://github.com/"),
     )
     service = models.CharField(
         max_length=200,
@@ -51,116 +48,135 @@ class ProjectContactDetails(models.Model):
 
     def service_name(self):
         site_display = {
-            'twitter': '@' + self.value,
-            'github': 'Github',
-            'website': 'Main Website',
+            "twitter": "@" + self.value,
+            "github": "Github",
+            "website": "Main Website",
         }
         return site_display[self.service]
 
     def clean(self):
-        if self.service == 'twitter' and self.value.startswith('@'):
+        if self.service == "twitter" and self.value.startswith("@"):
             self.username = self.username[1:]
 
-        if self.service == 'website':
+        if self.service == "website":
             validate = URLValidator()
             try:
                 validate(self.value)
             except ValidationError as e:
-                raise ValidationError({'value': e}) from e
+                raise ValidationError({"value": e}) from e
 
 
 class ProjectPageRelatedPage(RelatedPage):
-    source_page = ParentalKey('ProjectPage', related_name='related_pages')
+    source_page = ParentalKey("ProjectPage", related_name="related_pages")
 
     panels = [
-        PageChooserPanel('page', 'projects.ProjectPage'),
+        PageChooserPanel("page", "projects.ProjectPage"),
     ]
 
 
 class ProjectFundingQueryset(models.QuerySet):
     def projects(self):
-        return ProjectPage.objects.filter(id__in=self.values_list('page__id')).live().public()
+        return (
+            ProjectPage.objects.filter(id__in=self.values_list("page__id"))
+            .live()
+            .public()
+        )
 
 
 class ProjectFunding(BaseFunding):
-    page = ParentalKey('ProjectPage', related_name='funding')
+    page = ParentalKey("ProjectPage", related_name="funding")
 
     objects = ProjectFundingQueryset.as_manager()
 
 
 class ProjectPage(FundingMixin, BasePage):
     STATUSES = (
-        ('idea', "Just an Idea. (Pre-alpha)"),
-        ('exists', "It Exists! (Alpha/Beta)"),
-        ('release', "It's basically done. (Release)"),
-        ('production', "People Use it. (Production)"),
+        ("idea", "Just an Idea. (Pre-alpha)"),
+        ("exists", "It Exists! (Alpha/Beta)"),
+        ("release", "It's basically done. (Release)"),
+        ("production", "People Use it. (Production)"),
     )
 
     subpage_types = []
-    parent_page_types = ['ProjectIndexPage']
+    parent_page_types = ["ProjectIndexPage"]
 
     drupal_id = models.IntegerField(null=True, blank=True, editable=False)
 
     introduction = models.TextField(blank=True)
     icon = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
-        related_name='+',
-        on_delete=models.SET_NULL
+        related_name="+",
+        on_delete=models.SET_NULL,
     )
     status = models.CharField(choices=STATUSES, max_length=25, default=STATUSES[0][0])
     body = StreamField(StoryBlock(), use_json_field=True)
 
-    categories = models.TextField(default='{}', blank=True)
+    categories = models.TextField(default="{}", blank=True)
 
     wagtail_reference_index_ignore = True
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
-        index.SearchField('body'),
+        index.SearchField("introduction"),
+        index.SearchField("body"),
     ]
 
-    content_panels = BasePage.content_panels + [
-        FieldPanel('icon'),
-        FieldPanel('status'),
-        FieldPanel('introduction'),
-        FieldPanel('body'),
-        InlinePanel('contact_details', label=_('Contact Details')),
-    ] + FundingMixin.content_panels + [
-        InlinePanel('related_pages', label=_('Related Projects')),
-        MultiFieldPanel(
-            [FieldPanel('categories', widget=CategoriesWidget)],
-            heading=_('Categories'),
-            classname="collapsible collapsed",
-        ),
-    ]
+    content_panels = (
+        BasePage.content_panels
+        + [
+            FieldPanel("icon"),
+            FieldPanel("status"),
+            FieldPanel("introduction"),
+            FieldPanel("body"),
+            InlinePanel("contact_details", label=_("Contact Details")),
+        ]
+        + FundingMixin.content_panels
+        + [
+            InlinePanel("related_pages", label=_("Related Projects")),
+            MultiFieldPanel(
+                [FieldPanel("categories", widget=CategoriesWidget)],
+                heading=_("Categories"),
+                classname="collapsible collapsed",
+            ),
+        ]
+    )
 
     def category_options(self):
         categories = json.loads(self.categories)
         options = [int(id) for options in categories.values() for id in options]
-        return Option.objects.select_related().filter(id__in=options).order_by('category_id', 'sort_order')
+        return (
+            Option.objects.select_related()
+            .filter(id__in=options)
+            .order_by("category_id", "sort_order")
+        )
 
 
 class ProjectIndexPage(BasePage):
-    subpage_types = ['ProjectPage']
-    parent_page_types = ['home.Homepage', 'standardpages.IndexPage']
+    subpage_types = ["ProjectPage"]
+    parent_page_types = ["home.Homepage", "standardpages.IndexPage"]
 
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget()),
+        FieldPanel("introduction", widget=PagedownWidget()),
     ]
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
+        index.SearchField("introduction"),
     ]
 
     def get_context(self, request, *args, **kwargs):
         context = super().get_context(request, *args, **kwargs)
-        subpages = ProjectPage.objects.descendant_of(self).live().public().select_related('icon').order_by('-first_published_at')
+        subpages = (
+            ProjectPage.objects.descendant_of(self)
+            .live()
+            .public()
+            .select_related("icon")
+            .order_by("-first_published_at")
+        )
         per_page = settings.DEFAULT_PER_PAGE
-        page_number = request.GET.get('page')
+        page_number = request.GET.get("page")
         paginator = Paginator(subpages, per_page)
 
         try:
@@ -170,6 +186,6 @@ class ProjectIndexPage(BasePage):
         except EmptyPage:
             subpages = paginator.page(paginator.num_pages)
 
-        context['subpages'] = subpages
+        context["subpages"] = subpages
 
         return context
diff --git a/hypha/public/projects/templates/projects/project_page.html b/hypha/public/projects/templates/projects/project_page.html
index 2b233248f8ece710bb2e583ae9de9d98f606932a..2b1fc41308dd73f744d43a8dfb2eab88cc5c5a7c 100644
--- a/hypha/public/projects/templates/projects/project_page.html
+++ b/hypha/public/projects/templates/projects/project_page.html
@@ -2,71 +2,71 @@
 {% load wagtailcore_tags %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-large">
-    <div class="media-box media-box--reverse">
-        {% include "utils/includes/media_box_icon.html" with page_icon=page.icon %}
-        {% if page.introduction %}
-        <div class="media-box__content">
-            <h4 class="media-box__teaser media-box__teaser--projectpage-introduction">{{ page.introduction }}</h4>
+    <div class="wrapper wrapper--small wrapper--inner-space-large">
+        <div class="media-box media-box--reverse">
+            {% include "utils/includes/media_box_icon.html" with page_icon=page.icon %}
+            {% if page.introduction %}
+                <div class="media-box__content">
+                    <h4 class="media-box__teaser media-box__teaser--projectpage-introduction">{{ page.introduction }}</h4>
+                </div>
+            {% endif %}
         </div>
-        {% endif %}
-    </div>
 
-    <div class="wrapper wrapper--sidebar wrapper--inner-space-small">
-        <div class="wrapper--sidebar--inner">
-            {{ page.body }}
-        </div>
-        <div>
-            {% with contact_details=page.contact_details.all %}
-                {% if contact_details %}
-                    <h5>Get the word out</h5>
-                    {% for contact in contact_details %}
-                        <a aria-label="Social media link" href="{{ contact.url }}">
-                            <svg class="icon icon--social-share icon--{{contact.service}}-share"><use xlink:href="#{{contact.service}}"></use></svg>
-                        </a>
-                    {% endfor %}
-                {% endif %}
-            {% endwith %}
+        <div class="wrapper wrapper--sidebar wrapper--inner-space-small">
+            <div class="wrapper--sidebar--inner">
+                {{ page.body }}
+            </div>
+            <div>
+                {% with contact_details=page.contact_details.all %}
+                    {% if contact_details %}
+                        <h5>Get the word out</h5>
+                        {% for contact in contact_details %}
+                            <a aria-label="Social media link" href="{{ contact.url }}">
+                                <svg class="icon icon--social-share icon--{{contact.service}}-share"><use xlink:href="#{{contact.service}}"></use></svg>
+                            </a>
+                        {% endfor %}
+                    {% endif %}
+                {% endwith %}
+            </div>
         </div>
-    </div>
 
 
 
     {# {% include "projects/includes/project_status.html" %} #}
 
-    <div class="wrapper wrapper--inner-space-small">
-        <div>
-            {% include "utils/includes/funding.html" %}
-        </div>
+        <div class="wrapper wrapper--inner-space-small">
+            <div>
+                {% include "utils/includes/funding.html" %}
+            </div>
 
-    </div>
+        </div>
 
 
-    {% if page.category_options.all %}
-        <div class="grid grid--two grid--small-gap">
-            {% regroup page.category_options by category as categories %}
-            {% for category, options in categories %}
-                <div>
-                    <h4>{{ category.name }}</h4>
-                    <ul class="list list--disc">
-                        {% for option in options %}
-                        <li>{{ option.value }}</li>
-                        {% endfor %}
-                    </ul>
-                </div>
-            {% endfor %}
-        </div>
-    {% endif %}
+        {% if page.category_options.all %}
+            <div class="grid grid--two grid--small-gap">
+                {% regroup page.category_options by category as categories %}
+                {% for category, options in categories %}
+                    <div>
+                        <h4>{{ category.name }}</h4>
+                        <ul class="list list--disc">
+                            {% for option in options %}
+                                <li>{{ option.value }}</li>
+                            {% endfor %}
+                        </ul>
+                    </div>
+                {% endfor %}
+            </div>
+        {% endif %}
 
-    {% if page.news_mentions.all %}
-        <h4>We wrote about it</h4>
-        <ul class="list list--disc">
-            {% for news in page.news_mentions.all %}
-                <li><a href="{% pageurl news.source_page %}">{{ news.source_page }}</a></li>
-            {% endfor %}
-        </ul>
-    {% endif %}
-</div>
+        {% if page.news_mentions.all %}
+            <h4>We wrote about it</h4>
+            <ul class="list list--disc">
+                {% for news in page.news_mentions.all %}
+                    <li><a href="{% pageurl news.source_page %}">{{ news.source_page }}</a></li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+    </div>
 
-{% include "includes/relatedcontent.html" with related_pages=page.related_pages.all %}
+    {% include "includes/relatedcontent.html" with related_pages=page.related_pages.all %}
 {% endblock content %}
diff --git a/hypha/public/projects/templates/projects/widgets/options_widget.html b/hypha/public/projects/templates/projects/widgets/options_widget.html
index 7c87506fb6b153514e3fed5e561b760624457b83..b898b4e8ff96140c545eae2855f57f5050ff5ded 100644
--- a/hypha/public/projects/templates/projects/widgets/options_widget.html
+++ b/hypha/public/projects/templates/projects/widgets/options_widget.html
@@ -1,15 +1,15 @@
 <li>
-<h1>{{ widget.attrs.label_tag }}</h1>
-<fieldset>
-{% with id=widget.attrs.id %}
-<ul{% if id %} id="{{ id }}"{% endif %}class="fields {% if widget.attrs.class %}{{ widget.attrs.class }}{% endif %}">{% for group, options, index in widget.optgroups %}
-        {% for option in options %}
-        <li {% if id %} id="{{ id }}_{{ index }}"{% endif %}>
-            <div class="field checkbox_input boolean_field">
-            {% include option.template_name with widget=option %}{% endfor %}
-            </div>
-        </li>
-    {% endfor %}
-</ul>{% endwith %}
-</fieldset>
+    <h1>{{ widget.attrs.label_tag }}</h1>
+    <fieldset>
+        {% with id=widget.attrs.id %}
+            <ul{% if id %} id="{{ id }}"{% endif %}class="fields {% if widget.attrs.class %}{{ widget.attrs.class }}{% endif %}">{% for group, options, index in widget.optgroups %}
+                {% for option in options %}
+                    <li {% if id %} id="{{ id }}_{{ index }}"{% endif %}>
+                        <div class="field checkbox_input boolean_field">
+                            {% include option.template_name with widget=option %}{% endfor %}
+                </div>
+                </li>
+            {% endfor %}
+            </ul>{% endwith %}
+    </fieldset>
 </li>
diff --git a/hypha/public/projects/tests.py b/hypha/public/projects/tests.py
index e51ac5b854d211b2a29dc145abd25ccb5d48416d..10abe618ec899bcb80b642303add4cdf25f5eef2 100644
--- a/hypha/public/projects/tests.py
+++ b/hypha/public/projects/tests.py
@@ -23,7 +23,9 @@ class TestCategoriesWidget(TestCase):
         self.assertEqual(len(widgets), 1)
         choices = list(widgets[0].choices)
         self.assertEqual(len(choices), len(self.options))
-        self.assertCountEqual(list(choices), list(Option.objects.values_list('id', 'value')))
+        self.assertCountEqual(
+            list(choices), list(Option.objects.values_list("id", "value"))
+        )
 
     def test_can_get_multiple_categories(self):
         CategoryFactory()
@@ -33,25 +35,25 @@ class TestCategoriesWidget(TestCase):
 
     def test_can_decompress_data(self):
         widget = CategoriesWidget()
-        value = json.dumps({
-            self.category.id: [self.options[0].id]
-        })
+        value = json.dumps({self.category.id: [self.options[0].id]})
         self.assertEqual(widget.decompress(value), [[self.options[0].id]])
 
     def test_can_decompress_multiple_data(self):
         new_category = CategoryFactory()
         widget = CategoriesWidget()
-        value = json.dumps({
-            self.category.id: [self.options[0].id],
-            new_category.id: [],
-        })
+        value = json.dumps(
+            {
+                self.category.id: [self.options[0].id],
+                new_category.id: [],
+            }
+        )
         self.assertEqual(widget.decompress(value), [[self.options[0].id], []])
 
     def test_can_get_data_from_form(self):
-        name = 'categories'
+        name = "categories"
         widget = CategoriesWidget()
         submitted_data = {
-            name + '_0': [self.options[1].id],
+            name + "_0": [self.options[1].id],
         }
 
         value = widget.value_from_datadict(submitted_data, [], name)
@@ -62,21 +64,23 @@ class TestCategoriesWidget(TestCase):
         new_category = CategoryFactory()
         new_options = OptionFactory.create_batch(3, category=new_category)
 
-        name = 'categories'
+        name = "categories"
         widget = CategoriesWidget()
         answer_1 = [self.options[1].id]
         answer_2 = [new_options[1].id, new_options[2].id]
         submitted_data = {
-            name + '_0': answer_1,
-            name + '_1': answer_2,
+            name + "_0": answer_1,
+            name + "_1": answer_2,
         }
 
         value = widget.value_from_datadict(submitted_data, [], name)
 
         self.assertEqual(
             value,
-            json.dumps({
-                self.category.id: answer_1,
-                new_category.id: answer_2,
-            })
+            json.dumps(
+                {
+                    self.category.id: answer_1,
+                    new_category.id: answer_2,
+                }
+            ),
         )
diff --git a/hypha/public/projects/widgets.py b/hypha/public/projects/widgets.py
index d690d55672402220f382fbfa4207c4f44ea9846a..9da3c8321c865077a26f4c1c1936622acc57d2c8 100644
--- a/hypha/public/projects/widgets.py
+++ b/hypha/public/projects/widgets.py
@@ -21,40 +21,40 @@ class LazyWidgets:
         self.widget = widget
 
     def __iter__(self):
-        for obj in self.model.objects.order_by('id'):
+        for obj in self.model.objects.order_by("id"):
             yield self.widget(
-                attrs={'id': obj.id, 'label_tag': obj.name},
-                choices=LazyChoices(obj.options, ['id', 'value']),
+                attrs={"id": obj.id, "label_tag": obj.name},
+                choices=LazyChoices(obj.options, ["id", "value"]),
             )
 
 
 class OptionsWidget(forms.CheckboxSelectMultiple):
-    template_name = 'projects/widgets/options_widget.html'
-    option_template_name = 'projects/widgets/options_option.html'
+    template_name = "projects/widgets/options_widget.html"
+    option_template_name = "projects/widgets/options_option.html"
 
     def __init__(self, *args, **kwargs):
-        choices = kwargs['choices']
+        choices = kwargs["choices"]
         super().__init__(*args, **kwargs)
         self.choices = choices
 
 
 class CategoriesWidget(forms.MultiWidget):
-    template_name = 'projects/widgets/categories_widget.html'
+    template_name = "projects/widgets/categories_widget.html"
 
     def __init__(self, *args, **kwargs):
-        kwargs['widgets'] = []
+        kwargs["widgets"] = []
         super().__init__(*args, **kwargs)
         self.widgets = LazyWidgets(OptionsWidget, Category)
 
     def decompress(self, value):
         data = json.loads(value)
-        return [
-            data.get(str(widget.attrs['id']), []) for widget in self.widgets
-        ]
+        return [data.get(str(widget.attrs["id"]), []) for widget in self.widgets]
 
     def value_from_datadict(self, data, files, name):
         data = {
-            widget.attrs['id']: widget.value_from_datadict(data, files, name + '_%s' % i)
+            widget.attrs["id"]: widget.value_from_datadict(
+                data, files, name + "_%s" % i
+            )
             for i, widget in enumerate(self.widgets)
         }
         return json.dumps(data)
diff --git a/hypha/public/search/views.py b/hypha/public/search/views.py
index 59a97ee6cf4832153552dca9b06bf12cc5c92f90..ade7b21730126c74c6d656441ecf405905b2fb25 100644
--- a/hypha/public/search/views.py
+++ b/hypha/public/search/views.py
@@ -11,28 +11,33 @@ from wagtail.search.models import Query
 def search(request):
     site = Site.find_for_request(request)
     if (
-        not site.is_default_site and
-        'apply' in site.site_name.lower() and
-        'apply' in site.hostname and
-        'apply' in site.root_page.title.lower()
+        not site.is_default_site
+        and "apply" in site.site_name.lower()
+        and "apply" in site.hostname
+        and "apply" in site.root_page.title.lower()
     ):
         raise Http404
 
-    search_query = request.GET.get('query', None)
-    page = request.GET.get('page', 1)
+    search_query = request.GET.get("query", None)
+    page = request.GET.get("page", 1)
 
     # Search
     if search_query:
         # Allow only word characters and spaces in search query.
-        words = re.findall(r'\w+', search_query.strip())
-        search_query = ' '.join(words)
+        words = re.findall(r"\w+", search_query.strip())
+        search_query = " ".join(words)
 
         public_site = site.root_page
 
-        search_results = Page.objects.live().descendant_of(
-            public_site,
-            inclusive=True,
-        ).specific().search(search_query, operator='and')
+        search_results = (
+            Page.objects.live()
+            .descendant_of(
+                public_site,
+                inclusive=True,
+            )
+            .specific()
+            .search(search_query, operator="and")
+        )
         query = Query.get(search_query)
 
         # Record hit
@@ -49,7 +54,11 @@ def search(request):
     except EmptyPage:
         search_results = paginator.page(paginator.num_pages)
 
-    return render(request, 'search/search.html', {
-        'search_query': search_query,
-        'search_results': search_results,
-    })
+    return render(
+        request,
+        "search/search.html",
+        {
+            "search_query": search_query,
+            "search_results": search_results,
+        },
+    )
diff --git a/hypha/public/standardpages/migrations/0001_initial.py b/hypha/public/standardpages/migrations/0001_initial.py
index 4043f7a9e181d294a785bfe08eba3ab621732e99..f9254d43276b84d634df91d1932def7af7bdfd2a 100644
--- a/hypha/public/standardpages/migrations/0001_initial.py
+++ b/hypha/public/standardpages/migrations/0001_initial.py
@@ -14,60 +14,242 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('wagtaildocs', '0007_merge'),
-        ('images', '0001_initial'),
-        ('wagtailcore', '0032_add_bulk_delete_page_permission'),
+        ("wagtaildocs", "0007_merge"),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0032_add_bulk_delete_page_permission"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='IndexPage',
+            name="IndexPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='InformationPage',
+            name="InformationPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
-                ('social_text', models.CharField(blank=True, max_length=255)),
-                ('listing_title', models.CharField(blank=True, help_text='Override the page title used when this page appears in listings', max_length=255)),
-                ('listing_summary', models.CharField(blank=True, help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.", max_length=255)),
-                ('introduction', models.TextField(blank=True)),
-                ('body', wagtail.fields.StreamField((('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('image', wagtail.blocks.StructBlock((('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))))), ('quote', wagtail.blocks.StructBlock((('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))))), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock((('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False)))))))),
-                ('listing_image', models.ForeignKey(blank=True, help_text='Choose the image you wish to be displayed when this page appears in listings', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
-                ('social_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                ("social_text", models.CharField(blank=True, max_length=255)),
+                (
+                    "listing_title",
+                    models.CharField(
+                        blank=True,
+                        help_text="Override the page title used when this page appears in listings",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "listing_summary",
+                    models.CharField(
+                        blank=True,
+                        help_text="The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined.",
+                        max_length=255,
+                    ),
+                ),
+                ("introduction", models.TextField(blank=True)),
+                (
+                    "body",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "heading",
+                                wagtail.blocks.CharBlock(
+                                    classname="full title", icon="title"
+                                ),
+                            ),
+                            ("paragraph", wagtail.blocks.RichTextBlock()),
+                            (
+                                "image",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(),
+                                        ),
+                                        (
+                                            "caption",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(classname="title"),
+                                        ),
+                                        (
+                                            "attribution",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                        (
+                                            "job_title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                            ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                            (
+                                "call_to_action",
+                                wagtail.snippets.blocks.SnippetChooserBlock(
+                                    "utils.CallToActionSnippet",
+                                    template="blocks/call_to_action_block.html",
+                                ),
+                            ),
+                            (
+                                "document",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        (
+                                            "document",
+                                            wagtail.documents.blocks.DocumentChooserBlock(),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    )
+                                ),
+                            ),
+                        )
+                    ),
+                ),
+                (
+                    "listing_image",
+                    models.ForeignKey(
+                        blank=True,
+                        help_text="Choose the image you wish to be displayed when this page appears in listings",
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
+                (
+                    "social_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
-            bases=('wagtailcore.page', models.Model),
+            bases=("wagtailcore.page", models.Model),
         ),
         migrations.CreateModel(
-            name='InformationPageRelatedPage',
+            name="InformationPageRelatedPage",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
-                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')),
-                ('source_page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_pages', to='standardpages.InformationPage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "sort_order",
+                    models.IntegerField(blank=True, editable=False, null=True),
+                ),
+                (
+                    "page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailcore.Page",
+                    ),
+                ),
+                (
+                    "source_page",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="related_pages",
+                        to="standardpages.InformationPage",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['sort_order'],
-                'abstract': False,
+                "ordering": ["sort_order"],
+                "abstract": False,
             },
         ),
     ]
diff --git a/hypha/public/standardpages/migrations/0002_add_header_image.py b/hypha/public/standardpages/migrations/0002_add_header_image.py
index 25aede1e6ab241ad7680c19d10ebf71bb84295f1..16554aa0dca61de3e71473374ec82d2e2e08aa57 100644
--- a/hypha/public/standardpages/migrations/0002_add_header_image.py
+++ b/hypha/public/standardpages/migrations/0002_add_header_image.py
@@ -7,21 +7,32 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0001_initial'),
-        ('standardpages', '0001_initial'),
+        ("images", "0001_initial"),
+        ("standardpages", "0001_initial"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='indexpage',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="indexpage",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
         migrations.AddField(
-            model_name='informationpage',
-            name='header_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="informationpage",
+            name="header_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
     ]
diff --git a/hypha/public/standardpages/migrations/0003_correct_related_page_behaviour.py b/hypha/public/standardpages/migrations/0003_correct_related_page_behaviour.py
index 32d5281a150deaa4735c3c2870263c25b2fb6d7f..b94001478177e53f1fc131d3bae5a25d42f96ace 100644
--- a/hypha/public/standardpages/migrations/0003_correct_related_page_behaviour.py
+++ b/hypha/public/standardpages/migrations/0003_correct_related_page_behaviour.py
@@ -5,15 +5,18 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('standardpages', '0002_add_header_image'),
+        ("standardpages", "0002_add_header_image"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='informationpagerelatedpage',
-            name='page',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Page'),
+            model_name="informationpagerelatedpage",
+            name="page",
+            field=models.ForeignKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="+",
+                to="wagtailcore.Page",
+            ),
         ),
     ]
diff --git a/hypha/public/standardpages/migrations/0004_add_box_apply_link_fields.py b/hypha/public/standardpages/migrations/0004_add_box_apply_link_fields.py
index bfef1cf53ba8f7c32180bc4bb6acd4bac6c8eb90..bf9df0225b69e98cbf442588b249c615875704b0 100644
--- a/hypha/public/standardpages/migrations/0004_add_box_apply_link_fields.py
+++ b/hypha/public/standardpages/migrations/0004_add_box_apply_link_fields.py
@@ -10,15 +10,79 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('standardpages', '0003_correct_related_page_behaviour'),
+        ("standardpages", "0003_correct_related_page_behaviour"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='informationpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))]),
+            model_name="informationpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(classname="full title", icon="title"),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(classname="title")),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/standardpages/migrations/0005_add_more_block.py b/hypha/public/standardpages/migrations/0005_add_more_block.py
index 2d826a53fe69c4d64f066d4788e22df93d517ea0..ab24e9c42ccec430e0d8f0056a33905e69709551 100644
--- a/hypha/public/standardpages/migrations/0005_add_more_block.py
+++ b/hypha/public/standardpages/migrations/0005_add_more_block.py
@@ -10,15 +10,97 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('standardpages', '0004_add_box_apply_link_fields'),
+        ("standardpages", "0004_add_box_apply_link_fields"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='informationpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))]),
+            model_name="informationpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ]
+            ),
         ),
     ]
diff --git a/hypha/public/standardpages/migrations/0006_alter_informationpage_body.py b/hypha/public/standardpages/migrations/0006_alter_informationpage_body.py
index 5faa9c9de7e5416fc5db69d28c7f6cbed7fe36fd..fb8da0d56c7ff33a5d46edd5a47b99389b728312 100644
--- a/hypha/public/standardpages/migrations/0006_alter_informationpage_body.py
+++ b/hypha/public/standardpages/migrations/0006_alter_informationpage_body.py
@@ -10,15 +10,98 @@ import wagtail.snippets.blocks
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('standardpages', '0005_add_more_block'),
+        ("standardpages", "0005_add_more_block"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='informationpage',
-            name='body',
-            field=wagtail.fields.StreamField([('heading', wagtail.blocks.CharBlock(form_classname='full title', icon='title')), ('paragraph', wagtail.blocks.RichTextBlock()), ('box', wagtail.blocks.StructBlock([('box_content', wagtail.blocks.RichTextBlock()), ('box_class', wagtail.blocks.CharBlock(required=False))])), ('more', wagtail.blocks.StructBlock([('more_content', wagtail.blocks.RichTextBlock()), ('more_content_more', wagtail.blocks.RichTextBlock()), ('more_class', wagtail.blocks.CharBlock(required=False))])), ('apply_link', wagtail.blocks.StructBlock([('application', wagtail.blocks.PageChooserBlock())])), ('image', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('caption', wagtail.blocks.CharBlock(required=False))])), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(form_classname='title')), ('attribution', wagtail.blocks.CharBlock(required=False)), ('job_title', wagtail.blocks.CharBlock(required=False))])), ('embed', wagtail.embeds.blocks.EmbedBlock()), ('call_to_action', wagtail.snippets.blocks.SnippetChooserBlock('utils.CallToActionSnippet', template='blocks/call_to_action_block.html')), ('document', wagtail.blocks.StructBlock([('document', wagtail.documents.blocks.DocumentChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))]))], use_json_field=True),
+            model_name="informationpage",
+            name="body",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "heading",
+                        wagtail.blocks.CharBlock(
+                            form_classname="full title", icon="title"
+                        ),
+                    ),
+                    ("paragraph", wagtail.blocks.RichTextBlock()),
+                    (
+                        "box",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("box_content", wagtail.blocks.RichTextBlock()),
+                                ("box_class", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "more",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("more_content", wagtail.blocks.RichTextBlock()),
+                                ("more_content_more", wagtail.blocks.RichTextBlock()),
+                                (
+                                    "more_class",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "apply_link",
+                        wagtail.blocks.StructBlock(
+                            [("application", wagtail.blocks.PageChooserBlock())]
+                        ),
+                    ),
+                    (
+                        "image",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("image", wagtail.images.blocks.ImageChooserBlock()),
+                                ("caption", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "quote",
+                                    wagtail.blocks.CharBlock(form_classname="title"),
+                                ),
+                                (
+                                    "attribution",
+                                    wagtail.blocks.CharBlock(required=False),
+                                ),
+                                ("job_title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                    ("embed", wagtail.embeds.blocks.EmbedBlock()),
+                    (
+                        "call_to_action",
+                        wagtail.snippets.blocks.SnippetChooserBlock(
+                            "utils.CallToActionSnippet",
+                            template="blocks/call_to_action_block.html",
+                        ),
+                    ),
+                    (
+                        "document",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "document",
+                                    wagtail.documents.blocks.DocumentChooserBlock(),
+                                ),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ]
+                        ),
+                    ),
+                ],
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/standardpages/models.py b/hypha/public/standardpages/models.py
index b6ba9cc22754fe76ab16be1fc40cb30b1003d18d..bb1aaca4d7110b6d59585eb69bba2f622c7a309b 100644
--- a/hypha/public/standardpages/models.py
+++ b/hypha/public/standardpages/models.py
@@ -13,7 +13,7 @@ from hypha.public.utils.models import BasePage, RelatedPage
 
 
 class InformationPageRelatedPage(RelatedPage):
-    source_page = ParentalKey('InformationPage', related_name='related_pages')
+    source_page = ParentalKey("InformationPage", related_name="related_pages")
 
 
 class InformationPage(BasePage):
@@ -21,14 +21,14 @@ class InformationPage(BasePage):
     body = StreamField(StoryBlock(), use_json_field=True)
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
-        index.SearchField('body'),
+        index.SearchField("introduction"),
+        index.SearchField("body"),
     ]
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction'),
-        FieldPanel('body'),
-        InlinePanel('related_pages', label=_('Related pages')),
+        FieldPanel("introduction"),
+        FieldPanel("body"),
+        InlinePanel("related_pages", label=_("Related pages")),
     ]
 
 
@@ -36,18 +36,18 @@ class IndexPage(BasePage):
     introduction = models.TextField(blank=True)
 
     content_panels = BasePage.content_panels + [
-        FieldPanel('introduction', widget=PagedownWidget()),
+        FieldPanel("introduction", widget=PagedownWidget()),
     ]
 
     search_fields = BasePage.search_fields + [
-        index.SearchField('introduction'),
+        index.SearchField("introduction"),
     ]
 
     def get_context(self, request, *args, **kwargs):
         context = super().get_context(request, *args, **kwargs)
         subpages = self.get_children().live()
         per_page = settings.DEFAULT_PER_PAGE
-        page_number = request.GET.get('page')
+        page_number = request.GET.get("page")
         paginator = Paginator(subpages, per_page)
 
         try:
@@ -57,6 +57,6 @@ class IndexPage(BasePage):
         except EmptyPage:
             subpages = paginator.page(paginator.num_pages)
 
-        context['subpages'] = subpages
+        context["subpages"] = subpages
 
         return context
diff --git a/hypha/public/standardpages/templates/standardpages/index_page.html b/hypha/public/standardpages/templates/standardpages/index_page.html
index 55f7311b0beb8424a949372233c9bb58cf19336b..30b50ecfcf38c957a495f1a51080870346699fc6 100644
--- a/hypha/public/standardpages/templates/standardpages/index_page.html
+++ b/hypha/public/standardpages/templates/standardpages/index_page.html
@@ -3,37 +3,37 @@
 {% block body_class %}light-grey-bg{% endblock %}
 {% block main_class %}wrapper--bottom-space{% endblock %}
 {% block content %}
-<div class="wrapper">
-    <section class="section section--main">
-        <h4 class="heading heading--introduction">{{ page.introduction|markdown|bleach }}</h4>
+    <div class="wrapper">
+        <section class="section section--main">
+            <h4 class="heading heading--introduction">{{ page.introduction|markdown|bleach }}</h4>
 
-        {% if subpages.paginator.count %}
-            <div class="grid grid--one grid--no-margin">
-                {% if subpages.object_list.exists %}
-                    {% for subpage in subpages.object_list.specific %}
-                        <a class="card-slim" href="{% pageurl subpage %}">
-                            <div class="card-slim__contents">
-                                <div>
-                                    <h3 class="heading heading--small-margin">{{ subpage.listing_title|default:subpage.title }}</h3>
-                                    {% if subpage.listing_summary or subpage.introduction %}
-                                        <p class="card-slim__summary">{{ subpage.listing_summary|default:subpage.introduction }}</p>
-                                    {% endif %}
+            {% if subpages.paginator.count %}
+                <div class="grid grid--one grid--no-margin">
+                    {% if subpages.object_list.exists %}
+                        {% for subpage in subpages.object_list.specific %}
+                            <a class="card-slim" href="{% pageurl subpage %}">
+                                <div class="card-slim__contents">
+                                    <div>
+                                        <h3 class="heading heading--small-margin">{{ subpage.listing_title|default:subpage.title }}</h3>
+                                        {% if subpage.listing_summary or subpage.introduction %}
+                                            <p class="card-slim__summary">{{ subpage.listing_summary|default:subpage.introduction }}</p>
+                                        {% endif %}
+                                    </div>
+                                    <svg class="card-slim__icon"><use xlink:href="#arrow-head-pixels--solid"></use></svg>
                                 </div>
-                                <svg class="card-slim__icon"><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-                            </div>
-                        </a>
-                    {% endfor %}
-                {% else %}
+                            </a>
+                        {% endfor %}
+                    {% else %}
                     {# no items on this page #}
-                {% endif %}
-            </div>
+                    {% endif %}
+                </div>
 
-            {% include "includes/pagination.html" with paginator_page=subpages %}
+                {% include "includes/pagination.html" with paginator_page=subpages %}
 
-        {% else %}
+            {% else %}
             {# no items on any page #}
-        {% endif %}
+            {% endif %}
 
-    </section>
-</div>
+        </section>
+    </div>
 {% endblock %}
diff --git a/hypha/public/urls.py b/hypha/public/urls.py
index 86c8d89e46e2a6d2adf44256c1315c611d75665e..cbc340f23d81203392434914b8bfbb2b96a54038 100644
--- a/hypha/public/urls.py
+++ b/hypha/public/urls.py
@@ -6,9 +6,15 @@ from .partner import views as partner_views
 from .search import views as search_views
 
 urlpatterns = [
-    path('search/', search_views.search, name='search'),
-    path('news/feed/', news_feeds.NewsFeed(), name='news_feed'),
-    path('news/<int:news_type>/feed/', news_feeds.NewsTypeFeed(), name='news_type_feed'),
-    path('newsletter/', include(newsletter_urls)),
-    path('about/portfolio/', partner_views.InvestmentTableView.as_view(), name='investments')
+    path("search/", search_views.search, name="search"),
+    path("news/feed/", news_feeds.NewsFeed(), name="news_feed"),
+    path(
+        "news/<int:news_type>/feed/", news_feeds.NewsTypeFeed(), name="news_type_feed"
+    ),
+    path("newsletter/", include(newsletter_urls)),
+    path(
+        "about/portfolio/",
+        partner_views.InvestmentTableView.as_view(),
+        name="investments",
+    ),
 ]
diff --git a/hypha/public/utils/blocks.py b/hypha/public/utils/blocks.py
index 5ae66cd7da42ec767f11446a02bb8e51dcb1fcb1..33db7781288dd5fe2d7341eda5c8645e0b2af886 100644
--- a/hypha/public/utils/blocks.py
+++ b/hypha/public/utils/blocks.py
@@ -62,7 +62,7 @@ class ApplyLinkBlock(blocks.StructBlock):
 
 # Main streamfield block to be inherited by Pages
 class StoryBlock(blocks.StreamBlock):
-    heading = blocks.CharBlock(classname="full title", icon='title')
+    heading = blocks.CharBlock(classname="full title", icon="title")
     paragraph = blocks.RichTextBlock()
     box = BoxBlock()
     more = MoreBlock()
@@ -71,8 +71,7 @@ class StoryBlock(blocks.StreamBlock):
     quote = QuoteBlock()
     embed = EmbedBlock()
     call_to_action = SnippetChooserBlock(
-        'utils.CallToActionSnippet',
-        template="blocks/call_to_action_block.html"
+        "utils.CallToActionSnippet", template="blocks/call_to_action_block.html"
     )
     document = DocumentBlock()
 
diff --git a/hypha/public/utils/cache.py b/hypha/public/utils/cache.py
index 633538e437b5206234e476c4f4a53983d6f671c5..4bf2ef036cfb59afe14acb55e95650123fd3419b 100644
--- a/hypha/public/utils/cache.py
+++ b/hypha/public/utils/cache.py
@@ -8,4 +8,4 @@ def purge_cache_on_all_sites(path):
         return
 
     for site in Site.objects.all():
-        purge_url_from_cache('%s%s' % (site.root_url.rstrip('/'), path))
+        purge_url_from_cache("%s%s" % (site.root_url.rstrip("/"), path))
diff --git a/hypha/public/utils/context_processors.py b/hypha/public/utils/context_processors.py
index a381f6dc59b509d2fedf0d96996ccfb6b6172391..7bdfc326d969d60ca2ff25410e8f060d614ecb5e 100644
--- a/hypha/public/utils/context_processors.py
+++ b/hypha/public/utils/context_processors.py
@@ -6,7 +6,7 @@ from hypha.public.mailchimp.forms import NewsletterForm
 
 def global_vars(request):
     return {
-        'PUBLIC_SITE': HomePage.objects.first().get_site(),
-        'newsletter_form': NewsletterForm(),
-        'newsletter_enabled': settings.MAILCHIMP_API_KEY and settings.MAILCHIMP_LIST_ID,
+        "PUBLIC_SITE": HomePage.objects.first().get_site(),
+        "newsletter_form": NewsletterForm(),
+        "newsletter_enabled": settings.MAILCHIMP_API_KEY and settings.MAILCHIMP_LIST_ID,
     }
diff --git a/hypha/public/utils/migrations/0001_initial.py b/hypha/public/utils/migrations/0001_initial.py
index 373bcff29f4427fb4b1056f42f1edd5a6c1b7d12..7b0e48774d4dc4c6a04e7d4967ebd608dab54953 100644
--- a/hypha/public/utils/migrations/0001_initial.py
+++ b/hypha/public/utils/migrations/0001_initial.py
@@ -8,56 +8,167 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('images', '0001_initial'),
-        ('wagtailcore', '0032_add_bulk_delete_page_permission'),
+        ("images", "0001_initial"),
+        ("wagtailcore", "0032_add_bulk_delete_page_permission"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='CallToActionSnippet',
+            name="CallToActionSnippet",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title', models.CharField(max_length=255)),
-                ('link', wagtail.fields.StreamField((('external_link', wagtail.blocks.StructBlock((('url', wagtail.blocks.URLBlock()), ('title', wagtail.blocks.CharBlock())), icon='link')), ('internal_link', wagtail.blocks.StructBlock((('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))), icon='link'))), blank=True)),
-                ('summary', wagtail.fields.RichTextField(blank=True, max_length=255)),
-                ('image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                ("title", models.CharField(max_length=255)),
+                (
+                    "link",
+                    wagtail.fields.StreamField(
+                        (
+                            (
+                                "external_link",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        ("url", wagtail.blocks.URLBlock()),
+                                        ("title", wagtail.blocks.CharBlock()),
+                                    ),
+                                    icon="link",
+                                ),
+                            ),
+                            (
+                                "internal_link",
+                                wagtail.blocks.StructBlock(
+                                    (
+                                        ("page", wagtail.blocks.PageChooserBlock()),
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(required=False),
+                                        ),
+                                    ),
+                                    icon="link",
+                                ),
+                            ),
+                        ),
+                        blank=True,
+                    ),
+                ),
+                ("summary", wagtail.fields.RichTextField(blank=True, max_length=255)),
+                (
+                    "image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="images.CustomImage",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='SocialMediaSettings',
+            name="SocialMediaSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('twitter_handle', models.CharField(blank=True, help_text='Your Twitter username without the @, e.g. katyperry', max_length=255)),
-                ('facebook_app_id', models.CharField(blank=True, help_text='Your Facebook app ID.', max_length=255)),
-                ('default_sharing_text', models.CharField(blank=True, help_text='Default sharing text to use if social text has not been set on a page.', max_length=255)),
-                ('site_name', models.CharField(blank=True, default='hypha', help_text='Site name, used by Open Graph.', max_length=255)),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "twitter_handle",
+                    models.CharField(
+                        blank=True,
+                        help_text="Your Twitter username without the @, e.g. katyperry",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "facebook_app_id",
+                    models.CharField(
+                        blank=True, help_text="Your Facebook app ID.", max_length=255
+                    ),
+                ),
+                (
+                    "default_sharing_text",
+                    models.CharField(
+                        blank=True,
+                        help_text="Default sharing text to use if social text has not been set on a page.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "site_name",
+                    models.CharField(
+                        blank=True,
+                        default="hypha",
+                        help_text="Site name, used by Open Graph.",
+                        max_length=255,
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='SystemMessagesSettings',
+            name="SystemMessagesSettings",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('title_404', models.CharField(default='Page not found', max_length=255, verbose_name='Title')),
-                ('body_404', wagtail.fields.RichTextField(
-                    default='<p>You may be trying to find a page that doesn&rsquo;t exist or has been moved.</p>',
-                    verbose_name='Text')),
-                ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE,
-                                              to='wagtailcore.Site')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "title_404",
+                    models.CharField(
+                        default="Page not found", max_length=255, verbose_name="Title"
+                    ),
+                ),
+                (
+                    "body_404",
+                    wagtail.fields.RichTextField(
+                        default="<p>You may be trying to find a page that doesn&rsquo;t exist or has been moved.</p>",
+                        verbose_name="Text",
+                    ),
+                ),
+                (
+                    "site",
+                    models.OneToOneField(
+                        editable=False,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        to="wagtailcore.Site",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
-                'verbose_name': 'system messages',
+                "abstract": False,
+                "verbose_name": "system messages",
             },
         ),
     ]
diff --git a/hypha/public/utils/migrations/0002_add_footer_content_setting.py b/hypha/public/utils/migrations/0002_add_footer_content_setting.py
index 44cbb67feac6645fee29713e731cd1357ed04ad4..efdeb078729119384a6d86b29791de346f17d8e4 100644
--- a/hypha/public/utils/migrations/0002_add_footer_content_setting.py
+++ b/hypha/public/utils/migrations/0002_add_footer_content_setting.py
@@ -4,19 +4,22 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('utils', '0001_initial'),
+        ("utils", "0001_initial"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='systemmessagessettings',
-            options={'verbose_name': 'system settings'},
+            name="systemmessagessettings",
+            options={"verbose_name": "system settings"},
         ),
         migrations.AddField(
-            model_name='systemmessagessettings',
-            name='footer_content',
-            field=models.TextField(default='<p>Configure this text in Wagtail admin -> Settings -> System settings.</p>', help_text='This will be added to the footer, html tags is allowed.', verbose_name='Footer content'),
+            model_name="systemmessagessettings",
+            name="footer_content",
+            field=models.TextField(
+                default="<p>Configure this text in Wagtail admin -> Settings -> System settings.</p>",
+                help_text="This will be added to the footer, html tags is allowed.",
+                verbose_name="Footer content",
+            ),
         ),
     ]
diff --git a/hypha/public/utils/migrations/0003_add_site_logo_setting.py b/hypha/public/utils/migrations/0003_add_site_logo_setting.py
index 3585554fbb52cb7e072389db5ca1ad935c602f89..1f0dda3c0d9ad0ccae0e2aead946c2604582d83a 100644
--- a/hypha/public/utils/migrations/0003_add_site_logo_setting.py
+++ b/hypha/public/utils/migrations/0003_add_site_logo_setting.py
@@ -5,21 +5,34 @@ import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('images', '0003_customimage_drupal_id'),
-        ('utils', '0002_add_footer_content_setting'),
+        ("images", "0003_customimage_drupal_id"),
+        ("utils", "0002_add_footer_content_setting"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='systemmessagessettings',
-            name='site_logo_default',
-            field=models.ForeignKey(blank=True, help_text='Default site logo', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="systemmessagessettings",
+            name="site_logo_default",
+            field=models.ForeignKey(
+                blank=True,
+                help_text="Default site logo",
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
         migrations.AddField(
-            model_name='systemmessagessettings',
-            name='site_logo_mobile',
-            field=models.ForeignKey(blank=True, help_text='Mobil site logo (if not set default will be used)', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='images.CustomImage'),
+            model_name="systemmessagessettings",
+            name="site_logo_mobile",
+            field=models.ForeignKey(
+                blank=True,
+                help_text="Mobil site logo (if not set default will be used)",
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="images.CustomImage",
+            ),
         ),
     ]
diff --git a/hypha/public/utils/migrations/0004_add_setting_site_logo_link.py b/hypha/public/utils/migrations/0004_add_setting_site_logo_link.py
index c1752e6bc7d1f976867ec7c2266a3d656e6748c3..8dfcde3aece1ae579836a2f8b8fd522652c2d1fa 100644
--- a/hypha/public/utils/migrations/0004_add_setting_site_logo_link.py
+++ b/hypha/public/utils/migrations/0004_add_setting_site_logo_link.py
@@ -4,15 +4,18 @@ from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('utils', '0003_add_site_logo_setting'),
+        ("utils", "0003_add_site_logo_setting"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='systemmessagessettings',
-            name='site_logo_link',
-            field=models.URLField(blank=True, default='', help_text='Link for the site logo, e.g. "https://www.example.org/". If not set, defaults to page with slug set to "home".'),
+            model_name="systemmessagessettings",
+            name="site_logo_link",
+            field=models.URLField(
+                blank=True,
+                default="",
+                help_text='Link for the site logo, e.g. "https://www.example.org/". If not set, defaults to page with slug set to "home".',
+            ),
         ),
     ]
diff --git a/hypha/public/utils/migrations/0005_alter_calltoactionsnippet_link.py b/hypha/public/utils/migrations/0005_alter_calltoactionsnippet_link.py
index 184ff76e0043df077a6adf13cfeb1122803c064b..c63222b1c8f641f39d8e02985fd24a4b716341fb 100644
--- a/hypha/public/utils/migrations/0005_alter_calltoactionsnippet_link.py
+++ b/hypha/public/utils/migrations/0005_alter_calltoactionsnippet_link.py
@@ -6,15 +6,39 @@ import wagtail.fields
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('utils', '0004_add_setting_site_logo_link'),
+        ("utils", "0004_add_setting_site_logo_link"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='calltoactionsnippet',
-            name='link',
-            field=wagtail.fields.StreamField([('external_link', wagtail.blocks.StructBlock([('url', wagtail.blocks.URLBlock()), ('title', wagtail.blocks.CharBlock())], icon='link')), ('internal_link', wagtail.blocks.StructBlock([('page', wagtail.blocks.PageChooserBlock()), ('title', wagtail.blocks.CharBlock(required=False))], icon='link'))], blank=True, use_json_field=True),
+            model_name="calltoactionsnippet",
+            name="link",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "external_link",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("url", wagtail.blocks.URLBlock()),
+                                ("title", wagtail.blocks.CharBlock()),
+                            ],
+                            icon="link",
+                        ),
+                    ),
+                    (
+                        "internal_link",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("page", wagtail.blocks.PageChooserBlock()),
+                                ("title", wagtail.blocks.CharBlock(required=False)),
+                            ],
+                            icon="link",
+                        ),
+                    ),
+                ],
+                blank=True,
+                use_json_field=True,
+            ),
         ),
     ]
diff --git a/hypha/public/utils/migrations/0006_alter_systemmessagessettings_options.py b/hypha/public/utils/migrations/0006_alter_systemmessagessettings_options.py
index ab15615c4fc258227773f134089ff7f31b68b063..506abfddff56a1a2094a8f1300cff9194c72d6b5 100644
--- a/hypha/public/utils/migrations/0006_alter_systemmessagessettings_options.py
+++ b/hypha/public/utils/migrations/0006_alter_systemmessagessettings_options.py
@@ -4,14 +4,13 @@ from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('utils', '0005_alter_calltoactionsnippet_link'),
+        ("utils", "0005_alter_calltoactionsnippet_link"),
     ]
 
     operations = [
         migrations.AlterModelOptions(
-            name='systemmessagessettings',
-            options={'verbose_name': 'System settings'},
+            name="systemmessagessettings",
+            options={"verbose_name": "System settings"},
         ),
     ]
diff --git a/hypha/public/utils/migrations/0007_remove_systemmessagessettings_site.py b/hypha/public/utils/migrations/0007_remove_systemmessagessettings_site.py
new file mode 100644
index 0000000000000000000000000000000000000000..b286c32f2bd09c6644d0390d4c199f1ff63c5780
--- /dev/null
+++ b/hypha/public/utils/migrations/0007_remove_systemmessagessettings_site.py
@@ -0,0 +1,16 @@
+# Generated by Django 3.2.19 on 2023-06-08 08:31
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("utils", "0006_alter_systemmessagessettings_options"),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name="systemmessagessettings",
+            name="site",
+        ),
+    ]
diff --git a/hypha/public/utils/models.py b/hypha/public/utils/models.py
index 218a664de79c70b49cc36e0b35622ba25e5d5fea..54c27900b258d0109e0ecfdb4844b92844ec488d 100644
--- a/hypha/public/utils/models.py
+++ b/hypha/public/utils/models.py
@@ -11,7 +11,11 @@ from wagtail.admin.panels import (
     MultiFieldPanel,
     PageChooserPanel,
 )
-from wagtail.contrib.settings.models import BaseSiteSetting
+from wagtail.contrib.settings.models import (
+    BaseGenericSetting,
+    BaseSiteSetting,
+    register_setting,
+)
 from wagtail.fields import RichTextField, StreamField
 from wagtail.models import Orderable, Page
 from wagtail.snippets.models import register_snippet
@@ -28,10 +32,7 @@ class LinkFields(models.Model):
     """
 
     link_page = models.ForeignKey(
-        'wagtailcore.FieldPanelPage',
-        blank=True,
-        null=True,
-        on_delete=models.SET_NULL
+        "wagtailcore.FieldPanelPage", blank=True, null=True, on_delete=models.SET_NULL
     )
     link_url = models.URLField(blank=True)
     link_text = models.CharField(blank=True, max_length=255)
@@ -41,21 +42,37 @@ class LinkFields(models.Model):
 
     def clean(self):
         if not self.link_page and not self.link_url:
-            raise ValidationError({
-                'link_url': ValidationError("You must specify link page or link url."),
-                'link_page': ValidationError("You must specify link page or link url."),
-            })
+            raise ValidationError(
+                {
+                    "link_url": ValidationError(
+                        "You must specify link page or link url."
+                    ),
+                    "link_page": ValidationError(
+                        "You must specify link page or link url."
+                    ),
+                }
+            )
 
         if self.link_page and self.link_url:
-            raise ValidationError({
-                'link_url': ValidationError("You must specify link page or link url. You can't use both."),
-                'link_page': ValidationError("You must specify link page or link url. You can't use both."),
-            })
+            raise ValidationError(
+                {
+                    "link_url": ValidationError(
+                        "You must specify link page or link url. You can't use both."
+                    ),
+                    "link_page": ValidationError(
+                        "You must specify link page or link url. You can't use both."
+                    ),
+                }
+            )
 
         if not self.link_page and not self.link_text:
-            raise ValidationError({
-                'link_text': ValidationError("You must specify link text, if you use the link url field."),
-            })
+            raise ValidationError(
+                {
+                    "link_text": ValidationError(
+                        "You must specify link text, if you use the link url field."
+                    ),
+                }
+            )
 
     def get_link_text(self):
         if self.link_text:
@@ -64,7 +81,7 @@ class LinkFields(models.Model):
         if self.link_page:
             return self.link_page.title
 
-        return ''
+        return ""
 
     def get_link_url(self):
         if self.link_page:
@@ -73,69 +90,96 @@ class LinkFields(models.Model):
         return self.link_url
 
     panels = [
-        MultiFieldPanel([
-            PageChooserPanel('link_page'),
-            FieldPanel('link_url'),
-            FieldPanel('link_text'),
-        ], 'Link'),
+        MultiFieldPanel(
+            [
+                PageChooserPanel("link_page"),
+                FieldPanel("link_url"),
+                FieldPanel("link_text"),
+            ],
+            "Link",
+        ),
     ]
 
 
 # Related pages
 class RelatedPage(Orderable, models.Model):
     page = models.ForeignKey(
-        'wagtailcore.Page',
+        "wagtailcore.Page",
         on_delete=models.CASCADE,
-        related_name='+',
+        related_name="+",
     )
 
     class Meta:
         abstract = True
-        ordering = ['sort_order']
+        ordering = ["sort_order"]
 
     panels = [
-        PageChooserPanel('page'),
+        PageChooserPanel("page"),
     ]
 
 
 # Generic social fields abstract class to add social image/text to any new content type easily.
 class SocialFields(models.Model):
-    social_image = models.ForeignKey('images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
+    social_image = models.ForeignKey(
+        "images.CustomImage",
+        null=True,
+        blank=True,
+        on_delete=models.SET_NULL,
+        related_name="+",
+    )
     social_text = models.CharField(max_length=255, blank=True)
 
     class Meta:
         abstract = True
 
     promote_panels = [
-        MultiFieldPanel([
-            FieldPanel('social_image'),
-            FieldPanel('social_text'),
-        ], 'Social networks'),
+        MultiFieldPanel(
+            [
+                FieldPanel("social_image"),
+                FieldPanel("social_text"),
+            ],
+            "Social networks",
+        ),
     ]
 
 
 # Generic listing fields abstract class to add listing image/text to any new content type easily.
 class ListingFields(models.Model):
     listing_image = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
         on_delete=models.SET_NULL,
-        related_name='+',
-        help_text=_('Choose the image you wish to be displayed when this page appears in listings')
+        related_name="+",
+        help_text=_(
+            "Choose the image you wish to be displayed when this page appears in listings"
+        ),
+    )
+    listing_title = models.CharField(
+        max_length=255,
+        blank=True,
+        help_text=_("Override the page title used when this page appears in listings"),
+    )
+    listing_summary = models.CharField(
+        max_length=255,
+        blank=True,
+        help_text=_(
+            "The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined."
+        ),
     )
-    listing_title = models.CharField(max_length=255, blank=True, help_text=_('Override the page title used when this page appears in listings'))
-    listing_summary = models.CharField(max_length=255, blank=True, help_text=_("The text summary used when this page appears in listings. It's also used as the description for search engines if the 'Search description' field above is not defined."))
 
     class Meta:
         abstract = True
 
     promote_panels = [
-        MultiFieldPanel([
-            FieldPanel('listing_image'),
-            FieldPanel('listing_title'),
-            FieldPanel('listing_summary'),
-        ], 'Listing information'),
+        MultiFieldPanel(
+            [
+                FieldPanel("listing_image"),
+                FieldPanel("listing_title"),
+                FieldPanel("listing_summary"),
+            ],
+            "Listing information",
+        ),
     ]
 
 
@@ -143,32 +187,50 @@ class ListingFields(models.Model):
 class CallToActionSnippet(models.Model):
     title = models.CharField(max_length=255)
     summary = RichTextField(blank=True, max_length=255)
-    image = models.ForeignKey('images.CustomImage', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
+    image = models.ForeignKey(
+        "images.CustomImage",
+        null=True,
+        blank=True,
+        on_delete=models.SET_NULL,
+        related_name="+",
+    )
 
     link = StreamField(
-        blocks.StreamBlock([
-            (
-                'external_link', blocks.StructBlock([
-                    ('url', blocks.URLBlock()),
-                    ('title', blocks.CharBlock()),
-                ], icon='link')
-            ),
-            (
-                'internal_link', blocks.StructBlock([
-                    ('page', blocks.PageChooserBlock()),
-                    ('title', blocks.CharBlock(required=False)),
-                ], icon='link'),
-            ),
-        ], max_num=1, required=True),
+        blocks.StreamBlock(
+            [
+                (
+                    "external_link",
+                    blocks.StructBlock(
+                        [
+                            ("url", blocks.URLBlock()),
+                            ("title", blocks.CharBlock()),
+                        ],
+                        icon="link",
+                    ),
+                ),
+                (
+                    "internal_link",
+                    blocks.StructBlock(
+                        [
+                            ("page", blocks.PageChooserBlock()),
+                            ("title", blocks.CharBlock(required=False)),
+                        ],
+                        icon="link",
+                    ),
+                ),
+            ],
+            max_num=1,
+            required=True,
+        ),
         blank=True,
-        use_json_field=True
+        use_json_field=True,
     )
 
     panels = [
-        FieldPanel('title'),
-        FieldPanel('summary'),
-        FieldPanel('image'),
-        FieldPanel('link'),
+        FieldPanel("title"),
+        FieldPanel("summary"),
+        FieldPanel("image"),
+        FieldPanel("link"),
     ]
 
     def get_link_text(self):
@@ -176,23 +238,23 @@ class CallToActionSnippet(models.Model):
         # an element with index 0
         block = self.link[0]
 
-        title = block.value['title']
-        if block.block_type == 'external_link':
+        title = block.value["title"]
+        if block.block_type == "external_link":
             return title
 
         # Title is optional for internal_link
         # so fallback to page's title, if it's empty
-        return title or block.value['page'].title
+        return title or block.value["page"].title
 
     def get_link_url(self):
         # Link is required, so we should always have
         # an element with index 0
         block = self.link[0]
 
-        if block.block_type == 'external_link':
-            return block.value['url']
+        if block.block_type == "external_link":
+            return block.value["url"]
 
-        return block.value['page'].get_url()
+        return block.value["page"].get_url()
 
     def __str__(self):
         return self.title
@@ -203,136 +265,143 @@ class SocialMediaSettings(BaseSiteSetting):
     twitter_handle = models.CharField(
         max_length=255,
         blank=True,
-        help_text=_('Your Twitter username without the @, e.g. katyperry'),
+        help_text=_("Your Twitter username without the @, e.g. katyperry"),
     )
     facebook_app_id = models.CharField(
         max_length=255,
         blank=True,
-        help_text=_('Your Facebook app ID.'),
+        help_text=_("Your Facebook app ID."),
     )
     default_sharing_text = models.CharField(
         max_length=255,
         blank=True,
-        help_text=_('Default sharing text to use if social text has not been set on a page.'),
+        help_text=_(
+            "Default sharing text to use if social text has not been set on a page."
+        ),
     )
     site_name = models.CharField(
         max_length=255,
         blank=True,
-        default='hypha',
-        help_text=_('Site name, used by Open Graph.'),
+        default="hypha",
+        help_text=_("Site name, used by Open Graph."),
     )
 
 
-@register_public_site_setting
-class SystemMessagesSettings(BaseSiteSetting):
-
+@register_setting
+class SystemMessagesSettings(BaseGenericSetting):
     wagtail_reference_index_ignore = True
 
     class Meta:
-        verbose_name = 'System settings'
+        verbose_name = "System settings"
 
     site_logo_default = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
         on_delete=models.SET_NULL,
-        related_name='+',
-        help_text=_('Default site logo'),
+        related_name="+",
+        help_text=_("Default site logo"),
     )
 
     site_logo_mobile = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
         on_delete=models.SET_NULL,
-        related_name='+',
-        help_text=_('Mobil site logo (if not set default will be used)'),
+        related_name="+",
+        help_text=_("Mobil site logo (if not set default will be used)"),
     )
 
     site_logo_link = models.URLField(
-        default='',
+        default="",
         blank=True,
-        help_text=_('Link for the site logo, e.g. "https://www.example.org/". If not set, defaults to page with slug set to "home".'),
+        help_text=_(
+            'Link for the site logo, e.g. "https://www.example.org/". If not set, defaults to page with slug set to "home".'
+        ),
     )
 
     footer_content = models.TextField(
         "Footer content",
-        default='<p>Configure this text in Wagtail admin -> Settings -> System settings.</p>',
-        help_text=_('This will be added to the footer, html tags is allowed.'),
+        default="<p>Configure this text in Wagtail admin -> Settings -> System settings.</p>",
+        help_text=_("This will be added to the footer, html tags is allowed."),
     )
 
     title_404 = models.CharField(
         "Title",
         max_length=255,
-        default='Page not found',
+        default="Page not found",
     )
     body_404 = RichTextField(
         "Text",
-        default='<p>You may be trying to find a page that doesn&rsquo;t exist or has been moved.</p>'
+        default="<p>You may be trying to find a page that doesn&rsquo;t exist or has been moved.</p>",
     )
 
     panels = [
-        MultiFieldPanel([
-            FieldPanel('site_logo_default'),
-            FieldPanel('site_logo_mobile'),
-            FieldPanel('site_logo_link'),
-        ], 'Site logo'),
-        FieldPanel('footer_content'),
-        MultiFieldPanel([
-            FieldPanel('title_404'),
-            FieldPanel('body_404'),
-        ], '404 page'),
+        MultiFieldPanel(
+            [
+                FieldPanel("site_logo_default"),
+                FieldPanel("site_logo_mobile"),
+                FieldPanel("site_logo_link"),
+            ],
+            "Site logo",
+        ),
+        FieldPanel("footer_content"),
+        MultiFieldPanel(
+            [
+                FieldPanel("title_404"),
+                FieldPanel("body_404"),
+            ],
+            "404 page",
+        ),
     ]
 
 
-@method_decorator(cache_page, name='serve')
+@method_decorator(cache_page, name="serve")
 class BasePage(WagtailCacheMixin, SocialFields, ListingFields, Page):
     wagtail_reference_index_ignore = True
     show_in_menus_default = True
 
     header_image = models.ForeignKey(
-        'images.CustomImage',
+        "images.CustomImage",
         null=True,
         blank=True,
         on_delete=models.SET_NULL,
-        related_name='+'
+        related_name="+",
     )
 
     class Meta:
         abstract = True
 
-    content_panels = Page.content_panels + [
-        FieldPanel('header_image')
-    ]
+    content_panels = Page.content_panels + [FieldPanel("header_image")]
 
     promote_panels = (
-        Page.promote_panels +
-        SocialFields.promote_panels +
-        ListingFields.promote_panels
+        Page.promote_panels + SocialFields.promote_panels + ListingFields.promote_panels
     )
 
     def cache_control(self):
-        return f'public, s-maxage={settings.CACHE_CONTROL_S_MAXAGE}'
+        return f"public, s-maxage={settings.CACHE_CONTROL_S_MAXAGE}"
 
 
 class BaseFunding(Orderable):
     value = models.PositiveIntegerField()
     year = models.PositiveIntegerField()
-    duration = models.PositiveIntegerField(help_text=_('In months'))
+    duration = models.PositiveIntegerField(help_text=_("In months"))
     source = models.ForeignKey(
-        'wagtailcore.Page',
+        "wagtailcore.Page",
         on_delete=models.PROTECT,
         null=True,
         blank=True,
     )
 
     panels = [
-        FieldRowPanel([
-            FieldPanel('year'),
-            FieldPanel('value'),
-            FieldPanel('duration'),
-        ]),
-        PageChooserPanel('source', ['public_funds.FundPage', 'public_funds.LabPage']),
+        FieldRowPanel(
+            [
+                FieldPanel("year"),
+                FieldPanel("value"),
+                FieldPanel("duration"),
+            ]
+        ),
+        PageChooserPanel("source", ["public_funds.FundPage", "public_funds.LabPage"]),
     ]
 
     class Meta(Orderable.Meta):
@@ -340,11 +409,12 @@ class BaseFunding(Orderable):
 
 
 class FundingMixin(models.Model):
-    '''Implements the funding total calculation
+    """Implements the funding total calculation
 
     You still need to include the content panel in the child class
-    '''
-    content_panels = [InlinePanel('funding', label=_('Funding'))]
+    """
+
+    content_panels = [InlinePanel("funding", label=_("Funding"))]
 
     class Meta:
         abstract = True
diff --git a/hypha/public/utils/templates/utils/includes/funding.html b/hypha/public/utils/templates/utils/includes/funding.html
index c27e27ec14887c21fd913136ff8955662619431f..8842cdd741c6ed48b057b61df7aae4e0317a4ba1 100644
--- a/hypha/public/utils/templates/utils/includes/funding.html
+++ b/hypha/public/utils/templates/utils/includes/funding.html
@@ -1,19 +1,19 @@
-{% load wagtailcore_tags humanize %}
+{% load wagtailcore_tags humanize apply_tags %}
 {% if page.total_funding %}
     <div class="fund-box {% if class %}{{class}}{% endif %}">
         <h4>Funding to date</h4>
         {% for funding in page.funding.all %}
             <div class="fund-box__row">
                 <span>{{ funding.year }}</span>
-                <span>{{ CURRENCY_SYMBOL }}{{ funding.value|intcomma }}</span>
+                <span>{{ funding.value|format_number_as_currency }}</span>
                 {% if funding.duration %}
                     <span>{{ funding.duration }} months</span>
                 {% endif %}
             </div>
             {% if funding.source %}
-            <a class="fund-box__link" href="{% pageurl funding.source %}">{{ funding.source }}</a>
+                <a class="fund-box__link" href="{% pageurl funding.source %}">{{ funding.source }}</a>
             {% endif %}
         {% endfor %}
-        <h4 class="heading heading--top-space heading--total-funding">Total Funding: <span>{{ CURRENCY_SYMBOL }}{{ page.total_funding|intcomma }}</span></h4>
+        <h4 class="heading heading--top-space heading--total-funding">Total Funding: <span>{{ page.total_funding|format_number_as_currency }}</span></h4>
     </div>
 {% endif %}
diff --git a/hypha/public/utils/templates/utils/includes/login_button.html b/hypha/public/utils/templates/utils/includes/login_button.html
index 703c7cb96ba06edb24dd0383f9839296a51dae58..37fa3b165450795281550edff9baebde90196853 100644
--- a/hypha/public/utils/templates/utils/includes/login_button.html
+++ b/hypha/public/utils/templates/utils/includes/login_button.html
@@ -1,9 +1,9 @@
 {% load i18n %}
-<a href="{{ APPLY_SITE.root_url }}{% url 'users_public:login' %}" class="button button--transparent button--contains-icons {{ class }}">
+<a href="{{ APPLY_SITE.root_url }}{% url 'users_public:login' %}{% if redirect_url %}?next={{ redirect_url }}{% endif %}" class="button button--transparent button--contains-icons {{ class }}">
     <svg class="icon icon--person"><use xlink:href="#person-icon"></use></svg>
     {% if user.is_authenticated %}
-    My {{ ORG_SHORT_NAME }}
+        My {{ ORG_SHORT_NAME }}
     {% else %}
-    {% trans "Login" %}
+        {% trans "Login" %}
     {% endif %}
 </a>
diff --git a/hypha/public/utils/templates/utils/includes/register_button.html b/hypha/public/utils/templates/utils/includes/register_button.html
index 816901195754883c43640ca0c7e46a3f7fa8353d..29e10dd26a74120e40d54f491d3e38398947c496 100644
--- a/hypha/public/utils/templates/utils/includes/register_button.html
+++ b/hypha/public/utils/templates/utils/includes/register_button.html
@@ -1,3 +1,4 @@
-<a href="{{ APPLY_SITE.root_url }}{% url 'users_public:register' %}" class="button button--transparent {{ class }}">
-    Register
+{% load i18n %}
+<a href="{{ APPLY_SITE.root_url }}{% url 'users_public:register' %}{% if redirect_url %}?next={{ redirect_url }}{% endif %}" class="button button--transparent {{ class }}">
+    {% trans "Register" %}
 </a>
diff --git a/hypha/public/utils/templates/utils/listing_index.html b/hypha/public/utils/templates/utils/listing_index.html
index 81b0fe9ac66aeb8d1c26eb3269cef7b692cf3870..4d8280f97e880c8804b39e3eccdc48b977c38e56 100644
--- a/hypha/public/utils/templates/utils/listing_index.html
+++ b/hypha/public/utils/templates/utils/listing_index.html
@@ -2,55 +2,55 @@
 {% load wagtailcore_tags wagtailimages_tags markdown_tags bleach_tags %}
 {% block body_class %}light-grey-bg{% endblock %}
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-medium">
-    {% if page.introduction %}
-        <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
-    {% endif %}
-
-    <div class="wrapper wrapper--listings">
-
-        {% if subpages.object_list.exists %}
-            {% for subpage in subpages.object_list %}
-
-                <a class="listing" href="{% pageurl subpage %}">
-                    {% if subpage.icon %}
-                        {% image subpage.icon fill-180x180 class="listing__image" %}
-                    {% else %}
-                        <div class="listing__image listing__image--default">
-                            <svg><use xlink:href="#logo-mobile-no-text"></use></svg>
-                        </div>
-                    {% endif %}
-
-                    {% if subpage.can_open %}
-                        <p class="listing__deadline">
-                            {% if subpage.is_open %}
-                                {% if subpage.deadline and False %}
-                                    <svg class="icon icon--calendar icon--small"><use xlink:href="#calendar"></use></svg>
-                                    <span>Next deadline: {{ subpage.deadline|date:"M j, Y" }}</span>
+    <div class="wrapper wrapper--small wrapper--inner-space-medium">
+        {% if page.introduction %}
+            <h4 class="heading heading--listings-introduction">{{ page.introduction|markdown|bleach }}</h4>
+        {% endif %}
+
+        <div class="wrapper wrapper--listings">
+
+            {% if subpages.object_list.exists %}
+                {% for subpage in subpages.object_list %}
+
+                    <a class="listing" href="{% pageurl subpage %}">
+                        {% if subpage.icon %}
+                            {% image subpage.icon fill-180x180 class="listing__image" %}
+                        {% else %}
+                            <div class="listing__image listing__image--default">
+                                <svg><use xlink:href="#logo-mobile-no-text"></use></svg>
+                            </div>
+                        {% endif %}
+
+                        {% if subpage.can_open %}
+                            <p class="listing__deadline">
+                                {% if subpage.is_open %}
+                                    {% if subpage.deadline and False %}
+                                        <svg class="icon icon--calendar icon--small"><use xlink:href="#calendar"></use></svg>
+                                        <span>Next deadline: {{ subpage.deadline|date:"M j, Y" }}</span>
+                                    {% else %}
+                                        Open
+                                    {% endif %}
                                 {% else %}
-                                    Open
+                                    Closed
                                 {% endif %}
-                            {% else %}
-                                Closed
-                            {% endif %}
-                        </p>
-                    {% endif %}
+                            </p>
+                        {% endif %}
 
-                    <h4 class="listing__title">{{ subpage.listing_title|default:subpage.title }}</h4>
+                        <h4 class="listing__title">{{ subpage.listing_title|default:subpage.title }}</h4>
 
-                    {% if subpage.listing_summary or subpage.introduction %}
-                        <h6 class="listing__teaser">{{ subpage.listing_summary|default:subpage.introduction|truncatechars_html:155 }}</h6>
-                    {% endif %}
-                </a>
+                        {% if subpage.listing_summary or subpage.introduction %}
+                            <h6 class="listing__teaser">{{ subpage.listing_summary|default:subpage.introduction|truncatechars_html:155 }}</h6>
+                        {% endif %}
+                    </a>
 
-            {% endfor %}
+                {% endfor %}
 
-            {% include "includes/pagination.html" with paginator_page=subpages %}
+                {% include "includes/pagination.html" with paginator_page=subpages %}
 
-        {% else %}
+            {% else %}
             {# no items on this page #}
-        {% endif %}
+            {% endif %}
+        </div>
     </div>
-</div>
 
 {% endblock %}
diff --git a/hypha/public/utils/templatetags/util_tags.py b/hypha/public/utils/templatetags/util_tags.py
index a54a23fd683b85a208004922e76d4d3fd9931e84..5e43c9b19aafaa26d26f702e618ed09bbbabfa70 100644
--- a/hypha/public/utils/templatetags/util_tags.py
+++ b/hypha/public/utils/templatetags/util_tags.py
@@ -1,15 +1,13 @@
 from django import template
 from wagtail.coreutils import camelcase_to_underscore
-from wagtail.models import Page
 
-from hypha.public.home.models import HomePage
-from hypha.public.utils.models import SocialMediaSettings, SystemMessagesSettings
+from hypha.public.utils.models import SocialMediaSettings
 
 register = template.Library()
 
 
 # Social text
-@register.filter(name='social_text')
+@register.filter(name="social_text")
 def social_text(page, site):
     try:
         return page.social_text
@@ -18,13 +16,13 @@ def social_text(page, site):
 
 
 # Get widget type of a field
-@register.filter(name='widget_type')
+@register.filter(name="widget_type")
 def widget_type(bound_field):
     return camelcase_to_underscore(bound_field.field.widget.__class__.__name__)
 
 
 # Get type of field
-@register.filter(name='field_type')
+@register.filter(name="field_type")
 def field_type(bound_field):
     return camelcase_to_underscore(bound_field.field.__class__.__name__)
 
@@ -33,18 +31,3 @@ def field_type(bound_field):
 @register.simple_tag
 def verbose_name(instance):
     return instance.specific._meta.verbose_name.title()
-
-
-# Get the site logo link
-@register.simple_tag()
-def site_logo_link(site):
-    if SystemMessagesSettings.for_site(site).site_logo_link:
-        logo_link = SystemMessagesSettings.for_site(site).site_logo_link
-    else:
-        try:
-            home = HomePage.objects.first().get_site()
-            logo_link = home.root_url
-        except AttributeError:
-            home = Page.objects.filter(slug='home').first()
-            logo_link = home.url
-    return logo_link
diff --git a/hypha/public/utils/wagtail_hooks.py b/hypha/public/utils/wagtail_hooks.py
index e71427ca1c5262a327868195c54c8fd177ed2e59..7c1befc1d7d893e33e40892d7a5c9a72927883e3 100644
--- a/hypha/public/utils/wagtail_hooks.py
+++ b/hypha/public/utils/wagtail_hooks.py
@@ -13,32 +13,32 @@ from hypha.public.people.models import PersonType
 
 class NewsTypeModelAdmin(ModelAdmin):
     model = NewsType
-    menu_icon = 'tag'
+    menu_icon = "tag"
 
 
 class PersonTypeModelAdmin(ModelAdmin):
     model = PersonType
-    menu_icon = 'tag'
+    menu_icon = "tag"
 
 
 class TaxonomiesModelAdminGroup(ModelAdminGroup):
     menu_label = "Taxonomies"
     items = (NewsTypeModelAdmin, PersonTypeModelAdmin)
-    menu_icon = 'tag'
+    menu_icon = "tag"
 
 
 modeladmin_register(TaxonomiesModelAdminGroup)
 
 
-@hooks.register('insert_editor_css')
+@hooks.register("insert_editor_css")
 def editor_css():
     link = '<link rel="stylesheet" href="{}">\n'
-    path = static('css/apply/wagtail_editor.css')
+    path = static("css/apply/wagtail_editor.css")
     return link.format(path)
 
 
-@hooks.register('after_create_page')
-@hooks.register('after_edit_page')
+@hooks.register("after_create_page")
+@hooks.register("after_edit_page")
 def clear_wagtailcache(request, page):
     if page.live:
         clear_cache()
diff --git a/hypha/settings/base.py b/hypha/settings/base.py
index 53bd75aeaea119e0ae4eba40c1974dbe693deb50..01c7e242b409b28f2ca9c4760262b1fba286868f 100644
--- a/hypha/settings/base.py
+++ b/hypha/settings/base.py
@@ -20,144 +20,179 @@ BASE_DIR = os.path.dirname(PROJECT_DIR)
 # Hypha custom settings
 
 # Set the currency symbol to be used.
-CURRENCY_SYMBOL = env.str('CURRENCY_SYMBOL', '$')
+CURRENCY_CODE = env.str("CURRENCY_CODE", "USD")
+CURRENCY_LOCALE = env.str("CURRENCY_LOCALE", "en_US")
 
 # Default page pagination value.
 DEFAULT_PER_PAGE = 20
 
 # Form Rate-Limit Configuration
 # DEFAULT_RATE_LIMIT is used by login, password, 2FA and Mailchimp forms.
-DEFAULT_RATE_LIMIT = env.str('DEFAULT_RATE_LIMIT', '5/m')
+DEFAULT_RATE_LIMIT = env.str("DEFAULT_RATE_LIMIT", "5/m")
 
 # IF Hypha should enforce 2FA for all users.
-ENFORCE_TWO_FACTOR = env.bool('ENFORCE_TWO_FACTOR', False)
+ENFORCE_TWO_FACTOR = env.bool("ENFORCE_TWO_FACTOR", False)
 
 # Set the allowed file extension for all uploads fields.
-FILE_ALLOWED_EXTENSIONS = ['doc', 'docx', 'odp', 'ods', 'odt', 'pdf', 'ppt', 'pptx', 'rtf', 'txt', 'xls', 'xlsx']
-FILE_ACCEPT_ATTR_VALUE = ', '.join(['.' + ext for ext in FILE_ALLOWED_EXTENSIONS])
+FILE_ALLOWED_EXTENSIONS = [
+    "doc",
+    "docx",
+    "odp",
+    "ods",
+    "odt",
+    "pdf",
+    "ppt",
+    "pptx",
+    "rtf",
+    "txt",
+    "xls",
+    "xlsx",
+]
+FILE_ACCEPT_ATTR_VALUE = ", ".join(["." + ext for ext in FILE_ALLOWED_EXTENSIONS])
 
 # Give staff lead permissions.
 # Only effects setting external reviewers for now.
-GIVE_STAFF_LEAD_PERMS = env.bool('GIVE_STAFF_LEAD_PERMS', False)
+GIVE_STAFF_LEAD_PERMS = env.bool("GIVE_STAFF_LEAD_PERMS", False)
 
 # Provide permissions for Archived submissions
-SUBMISSIONS_ARCHIVED_ACCESS_STAFF = env.bool('SUBMISSIONS_ARCHIVED_ACCESS_STAFF', False)
-SUBMISSIONS_ARCHIVED_ACCESS_STAFF_ADMIN = env.bool('SUBMISSIONS_ARCHIVED_ACCESS_STAFF_ADMIN', False)
+SUBMISSIONS_ARCHIVED_ACCESS_STAFF = env.bool("SUBMISSIONS_ARCHIVED_ACCESS_STAFF", False)
+SUBMISSIONS_ARCHIVED_ACCESS_STAFF_ADMIN = env.bool(
+    "SUBMISSIONS_ARCHIVED_ACCESS_STAFF_ADMIN", False
+)
 
 # Enable staff to "hijack" (become) other users.
 # Good for testing, might not be a good idea in production.
-HIJACK_ENABLE = env.bool('HIJACK_ENABLE', False)
+HIJACK_ENABLE = env.bool("HIJACK_ENABLE", False)
 
 # Organisation name and e-mail address etc., used in e-mail templates etc.
-ORG_EMAIL = env.str('ORG_EMAIL', 'info@example.org')
-ORG_GUIDE_URL = env.str('ORG_GUIDE_URL', 'https://guide.example.org/')
-ORG_LONG_NAME = env.str('ORG_LONG_NAME', 'Acme Corporation')
-ORG_SHORT_NAME = env.str('ORG_SHORT_NAME', 'ACME')
-ORG_URL = env.str('ORG_URL', 'https://www.example.org/')
+ORG_EMAIL = env.str("ORG_EMAIL", "info@example.org")
+ORG_GUIDE_URL = env.str("ORG_GUIDE_URL", "https://guide.example.org/")
+ORG_LONG_NAME = env.str("ORG_LONG_NAME", "Acme Corporation")
+ORG_SHORT_NAME = env.str("ORG_SHORT_NAME", "ACME")
+ORG_URL = env.str("ORG_URL", "https://www.example.org/")
 
 # Enable Projects in Hypha. Contracts and invoicing that comes after a submission is approved.
-PROJECTS_ENABLED = env.bool('PROJECTS_ENABLED', False)
+PROJECTS_ENABLED = env.bool("PROJECTS_ENABLED", False)
 
 # Auto create projects for approved applications.
-PROJECTS_AUTO_CREATE = env.bool('PROJECTS_AUTO_CREATE', False)
+PROJECTS_AUTO_CREATE = env.bool("PROJECTS_AUTO_CREATE", False)
 
 # Send out e-mail, slack messages etc. from Hypha. Set to true for production.
-SEND_MESSAGES = env.bool('SEND_MESSAGES', False)
+SEND_MESSAGES = env.bool("SEND_MESSAGES", False)
 
 # If automatic e-mails should be sent out to reviewers when submissions are ready for review.
-SEND_READY_FOR_REVIEW = env.bool('SEND_READY_FOR_REVIEW', True)
+SEND_READY_FOR_REVIEW = env.bool("SEND_READY_FOR_REVIEW", True)
 
 # Slack settings.
-SLACK_TOKEN = env.str('SLACK_TOKEN', None)
-SLACK_USERNAME = env.str('SLACK_USERNAME', 'Hypha')
-SLACK_DESTINATION_ROOM = env.str('SLACK_DESTINATION_ROOM', None)
-SLACK_DESTINATION_ROOM_COMMENTS = env.str('SLACK_DESTINATION_ROOM_COMMENTS', None)
-SLACK_TYPE_COMMENTS = env.list('SLACK_TYPE_COMMENTS', [])
-SLACK_ENDPOINT_URL = env.str('SLACK_ENDPOINT_URL', 'https://slack.com/api/chat.postMessage')
-SLACK_BACKEND = 'django_slack.backends.CeleryBackend'  # UrllibBackend can be used for sync
+SLACK_TOKEN = env.str("SLACK_TOKEN", None)
+SLACK_USERNAME = env.str("SLACK_USERNAME", "Hypha")
+SLACK_DESTINATION_ROOM = env.str("SLACK_DESTINATION_ROOM", None)
+SLACK_DESTINATION_ROOM_COMMENTS = env.str("SLACK_DESTINATION_ROOM_COMMENTS", None)
+SLACK_TYPE_COMMENTS = env.list("SLACK_TYPE_COMMENTS", [])
+SLACK_ENDPOINT_URL = env.str(
+    "SLACK_ENDPOINT_URL", "https://slack.com/api/chat.postMessage"
+)
+SLACK_BACKEND = (
+    "django_slack.backends.CeleryBackend"  # UrllibBackend can be used for sync
+)
 
 # Activities email digest
-ACTIVITY_DIGEST_RECIPIENT_EMAILS = env.list("ACTIVITY_DIGEST_RECIPIENT_EMAILS", default=[])
+ACTIVITY_DIGEST_RECIPIENT_EMAILS = env.list(
+    "ACTIVITY_DIGEST_RECIPIENT_EMAILS", default=[]
+)
 
 # Staff e-mail domain. Used for OAUTH2 whitelist default value and staff account creation.
-STAFF_EMAIL_DOMAINS = env.list('STAFF_EMAIL_DOMAINS', [])
+STAFF_EMAIL_DOMAINS = env.list("STAFF_EMAIL_DOMAINS", [])
 
 # Should staff be able to access/see draft submissions.
-SUBMISSIONS_DRAFT_ACCESS_STAFF = env.bool('SUBMISSIONS_DRAFT_ACCESS_STAFF', False)
+SUBMISSIONS_DRAFT_ACCESS_STAFF = env.bool("SUBMISSIONS_DRAFT_ACCESS_STAFF", False)
 
 # Should staff admins be able to access/see draft submissions.
-SUBMISSIONS_DRAFT_ACCESS_STAFF_ADMIN = env.bool('SUBMISSIONS_DRAFT_ACCESS_STAFF_ADMIN', False)
+SUBMISSIONS_DRAFT_ACCESS_STAFF_ADMIN = env.bool(
+    "SUBMISSIONS_DRAFT_ACCESS_STAFF_ADMIN", False
+)
+
+# Should staff be able to export submissions.
+SUBMISSIONS_EXPORT_ACCESS_STAFF = env.bool("SUBMISSIONS_EXPORT_ACCESS_STAFF", True)
+
+# Should staff admins be able to export submissions.
+SUBMISSIONS_EXPORT_ACCESS_STAFF_ADMIN = env.bool(
+    "SUBMISSIONS_EXPORT_ACCESS_STAFF_ADMIN", True
+)
 
 # Columns to exclude from the submission tables.
-# Possible values are: fund, round, status, lead, reviewers, screening_statuses, category_options, meta_terms
-SUBMISSIONS_TABLE_EXCLUDED_FIELDS = env.list('SUBMISSIONS_TABLE_EXCLUDED_FIELDS', [])
+# Possible values are: fund, round, status, lead, reviewers, screening_statuses, category_options, meta_terms, organization_name
+SUBMISSIONS_TABLE_EXCLUDED_FIELDS = env.list(
+    "SUBMISSIONS_TABLE_EXCLUDED_FIELDS", ["organization_name"]
+)
 
 # Should submission automatically transition after all reviewer roles are assigned.
-TRANSITION_AFTER_ASSIGNED = env.bool('TRANSITION_AFTER_ASSIGNED', False)
+TRANSITION_AFTER_ASSIGNED = env.bool("TRANSITION_AFTER_ASSIGNED", False)
 
 # Should submission automatically transition after n number of reviews.
 # Possible values are: False, 1,2,3,…
-TRANSITION_AFTER_REVIEWS = env.bool('TRANSITION_AFTER_REVIEWS', False)
+TRANSITION_AFTER_REVIEWS = env.bool("TRANSITION_AFTER_REVIEWS", False)
 
 # Forces users to log in first in order to make an application.  This is particularly useful in conjunction
 # with ENABLE_REGISTRATION_WITHOUT_APPLICATION
-FORCE_LOGIN_FOR_APPLICATION = env.bool('FORCE_LOGIN_FOR_APPLICATION', False)
+FORCE_LOGIN_FOR_APPLICATION = env.bool("FORCE_LOGIN_FOR_APPLICATION", False)
 
 # Enable users to create accounts without submitting an application.
-ENABLE_REGISTRATION_WITHOUT_APPLICATION = env.bool('ENABLE_REGISTRATION_WITHOUT_APPLICATION', False)
+ENABLE_REGISTRATION_WITHOUT_APPLICATION = env.bool(
+    "ENABLE_REGISTRATION_WITHOUT_APPLICATION", False
+)
 
 # Project settings.
 
 # SECRET_KEY is required
-SECRET_KEY = env.str('SECRET_KEY', None)
+SECRET_KEY = env.str("SECRET_KEY", None)
 
-ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', [])
+ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", [])
 
 # Database
 # https://docs.djangoproject.com/en/stable/ref/settings/#databases
-APP_NAME = env.str('APP_NAME', 'hypha')
+APP_NAME = env.str("APP_NAME", "hypha")
 DATABASES = {
-    'default': dj_database_url.config(
-        conn_max_age=600,
-        default=f'postgres:///{APP_NAME}'
+    "default": dj_database_url.config(
+        conn_max_age=600, default=f"postgres:///{APP_NAME}"
     )
 }
 
 # Language code in standard language id format: en, en-gb, en-us
 # The corrosponding locale dir is named: en, en_GB, en_US
-LANGUAGE_CODE = env.str('LANGUAGE_CODE', 'en')
+LANGUAGE_CODE = env.str("LANGUAGE_CODE", "en")
 
 # Number of seconds that password reset and account activation links are valid (default 259200, 3 days).
-PASSWORD_RESET_TIMEOUT = env.int('PASSWORD_RESET_TIMEOUT', 259200)
+PASSWORD_RESET_TIMEOUT = env.int("PASSWORD_RESET_TIMEOUT", 259200)
 
 # Seconds to enter password on password page while email change/2FA change (default 120).
-PASSWORD_PAGE_TIMEOUT = env.int('PASSWORD_PAGE_TIMEOUT', 120)
+PASSWORD_PAGE_TIMEOUT = env.int("PASSWORD_PAGE_TIMEOUT", 120)
 
 #  Template engines and options to be used with Django.
 
 TEMPLATES = [
     {
-        'BACKEND': 'django.template.backends.django.DjangoTemplates',
-        'DIRS': [
-            os.path.join(PROJECT_DIR, 'templates_custom'),
-            os.path.join(PROJECT_DIR, 'templates'),
-            os.path.join(PROJECT_DIR, 'apply', 'templates'),
+        "BACKEND": "django.template.backends.django.DjangoTemplates",
+        "DIRS": [
+            os.path.join(PROJECT_DIR, "templates_custom"),
+            os.path.join(PROJECT_DIR, "templates"),
+            os.path.join(PROJECT_DIR, "apply", "templates"),
         ],
-        'APP_DIRS': True,
-        'OPTIONS': {
-            'context_processors': [
-                'django.template.context_processors.debug',
-                'django.template.context_processors.request',
-                'django.contrib.auth.context_processors.auth',
-                'django.contrib.messages.context_processors.messages',
-                'wagtail.contrib.settings.context_processors.settings',
-                'hypha.public.utils.context_processors.global_vars',
-                'social_django.context_processors.backends',
-                'social_django.context_processors.login_redirect',
-                'hypha.apply.projects.context_processors.projects_enabled',
-                'hypha.cookieconsent.context_processors.cookies_accepted',
-                'hypha.apply.activity.context_processors.notification_context',
-                'hypha.core.context_processors.global_vars',
+        "APP_DIRS": True,
+        "OPTIONS": {
+            "context_processors": [
+                "django.template.context_processors.debug",
+                "django.template.context_processors.request",
+                "django.contrib.auth.context_processors.auth",
+                "django.contrib.messages.context_processors.messages",
+                "wagtail.contrib.settings.context_processors.settings",
+                "hypha.public.utils.context_processors.global_vars",
+                "social_django.context_processors.backends",
+                "social_django.context_processors.login_redirect",
+                "hypha.apply.projects.context_processors.projects_enabled",
+                "hypha.cookieconsent.context_processors.cookies_accepted",
+                "hypha.apply.activity.context_processors.notification_context",
+                "hypha.core.context_processors.global_vars",
             ],
             "builtins": [
                 "django_web_components.templatetags.components",
@@ -169,41 +204,41 @@ TEMPLATES = [
 
 # Email settings
 
-EMAIL_HOST = env.str('EMAIL_HOST', None)
-EMAIL_PORT = env.int('EMAIL_PORT', None)
-EMAIL_HOST_USER = env.str('EMAIL_HOST_USER', None)
-EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD', None)
-EMAIL_USE_TLS = env.bool('EMAIL_USE_TLS', False)
-EMAIL_USE_SSL = env.bool('EMAIL_USE_SSL', False)
-EMAIL_SUBJECT_PREFIX = env.str('EMAIL_SUBJECT_PREFIX', '')
-SERVER_EMAIL = DEFAULT_FROM_EMAIL = env.str('SERVER_EMAIL', None)
+EMAIL_HOST = env.str("EMAIL_HOST", None)
+EMAIL_PORT = env.int("EMAIL_PORT", None)
+EMAIL_HOST_USER = env.str("EMAIL_HOST_USER", None)
+EMAIL_HOST_PASSWORD = env.str("EMAIL_HOST_PASSWORD", None)
+EMAIL_USE_TLS = env.bool("EMAIL_USE_TLS", False)
+EMAIL_USE_SSL = env.bool("EMAIL_USE_SSL", False)
+EMAIL_SUBJECT_PREFIX = env.str("EMAIL_SUBJECT_PREFIX", "")
+SERVER_EMAIL = DEFAULT_FROM_EMAIL = env.str("SERVER_EMAIL", None)
 
 
 # Cache settings
 
 # Set max-age header.
-CACHE_CONTROL_MAX_AGE = env.int('CACHE_CONTROL_MAX_AGE', 3600)
+CACHE_CONTROL_MAX_AGE = env.int("CACHE_CONTROL_MAX_AGE", 3600)
 
 # Set s-max-age header that is used by reverse proxy/front end cache.
-CACHE_CONTROL_S_MAXAGE = env.int('CACHE_CONTROL_S_MAXAGE', 3600)
+CACHE_CONTROL_S_MAXAGE = env.int("CACHE_CONTROL_S_MAXAGE", 3600)
 
 # Set feed cache timeout (automatic cache refresh).
 FEED_CACHE_TIMEOUT = 600
 
 # Set X-Frame-Options header for every outgoing HttpResponse
-X_FRAME_OPTIONS = 'SAMEORIGIN'
+X_FRAME_OPTIONS = "SAMEORIGIN"
 
 CACHES = {
-    'default': {
-        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
-        'LOCATION': 'database_cache',
+    "default": {
+        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
+        "LOCATION": "database_cache",
+    },
+    "wagtailcache": {
+        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
+        "LOCATION": "database_cache",
+        "KEY_PREFIX": "wagtailcache",
+        "TIMEOUT": CACHE_CONTROL_MAX_AGE,
     },
-    'wagtailcache': {
-        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
-        'LOCATION': 'database_cache',
-        'KEY_PREFIX': 'wagtailcache',
-        'TIMEOUT': CACHE_CONTROL_MAX_AGE,
-    }
 }
 
 # Use a more permanent cache for django-file-form.
@@ -211,77 +246,83 @@ CACHES = {
 # This might reduce the likelihood of any interruptions on heroku.
 # NB It doesn't matter what the `KEY_PREFIX` is,
 # `clear_cache` will clear all caches with the same `LOCATION`.
-CACHES['django_file_form'] = {
-    'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
-    'LOCATION': 'database_cache',
-    'KEY_PREFIX': 'django_file_form',
+CACHES["django_file_form"] = {
+    "BACKEND": "django.core.cache.backends.db.DatabaseCache",
+    "LOCATION": "database_cache",
+    "KEY_PREFIX": "django_file_form",
 }
 
 
 # Static files (CSS, JavaScript, Images)
 # https://docs.djangoproject.com/en/stable/howto/static-files/
 
-STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
+STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
 
 STATICFILES_DIRS = [
-    os.path.join(PROJECT_DIR, 'static_compiled'),
-    os.path.join(PROJECT_DIR, '../public'),
+    os.path.join(PROJECT_DIR, "static_compiled"),
+    os.path.join(PROJECT_DIR, "../public"),
 ]
 
-STATIC_ROOT = env.str('STATIC_DIR', os.path.join(BASE_DIR, 'static'))
-STATIC_URL = env.str('STATIC_URL', '/static/')
+STATIC_ROOT = env.str("STATIC_DIR", os.path.join(BASE_DIR, "static"))
+STATIC_URL = env.str("STATIC_URL", "/static/")
 
-MEDIA_ROOT = env.str('MEDIA_DIR', os.path.join(BASE_DIR, 'media'))
-MEDIA_URL = env.str('MEDIA_URL', '/media/')
+MEDIA_ROOT = env.str("MEDIA_DIR", os.path.join(BASE_DIR, "media"))
+MEDIA_URL = env.str("MEDIA_URL", "/media/")
 
 
 # Wagtail settings
 
 WAGTAIL_CACHE_TIMEOUT = CACHE_CONTROL_MAX_AGE
-WAGTAIL_FRONTEND_LOGIN_URL = '/login/'
-WAGTAIL_SITE_NAME = 'hypha'
-WAGTAILIMAGES_IMAGE_MODEL = 'images.CustomImage'
+WAGTAIL_FRONTEND_LOGIN_URL = "/login/"
+WAGTAIL_SITE_NAME = "hypha"
+WAGTAILIMAGES_IMAGE_MODEL = "images.CustomImage"
 WAGTAILIMAGES_FEATURE_DETECTION_ENABLED = False
-WAGTAIL_USER_EDIT_FORM = 'hypha.apply.users.forms.CustomUserEditForm'
-WAGTAIL_USER_CREATION_FORM = 'hypha.apply.users.forms.CustomUserCreationForm'
-WAGTAIL_USER_CUSTOM_FIELDS = ['full_name']
+WAGTAIL_USER_EDIT_FORM = "hypha.apply.users.forms.CustomUserEditForm"
+WAGTAIL_USER_CREATION_FORM = "hypha.apply.users.forms.CustomUserCreationForm"
+WAGTAIL_USER_CUSTOM_FIELDS = ["full_name"]
 WAGTAIL_PASSWORD_MANAGEMENT_ENABLED = False
 WAGTAILUSERS_PASSWORD_ENABLED = False
 WAGTAILUSERS_PASSWORD_REQUIRED = False
 WAGTAILEMBEDS_RESPONSIVE_HTML = True
-PASSWORD_REQUIRED_TEMPLATE = 'password_required.html'
+PASSWORD_REQUIRED_TEMPLATE = "password_required.html"
 
 WAGTAILADMIN_RICH_TEXT_EDITORS = {
-    'default': {
-        'WIDGET': 'wagtail.admin.rich_text.DraftailRichTextArea',
-        'OPTIONS': {
-            'features': [
-                'bold', 'italic',
-                'h1', 'h2', 'h3', 'h4', 'h5',
-                'ol', 'ul',
-                'link'
+    "default": {
+        "WIDGET": "wagtail.admin.rich_text.DraftailRichTextArea",
+        "OPTIONS": {
+            "features": [
+                "bold",
+                "italic",
+                "h1",
+                "h2",
+                "h3",
+                "h4",
+                "h5",
+                "ol",
+                "ul",
+                "link",
             ]
-        }
+        },
     },
 }
 
 WAGTAILSEARCH_BACKENDS = {
-    'default': {
-        'BACKEND': 'wagtail.search.backends.database',
+    "default": {
+        "BACKEND": "wagtail.search.backends.database",
     },
 }
 
-WAGTAIL_CACHE_BACKEND = 'wagtailcache'
+WAGTAIL_CACHE_BACKEND = "wagtailcache"
 
 # Cloudflare cache invalidation.
 # See https://docs.wagtail.io/en/v2.8/reference/contrib/frontendcache.html
-if env.str('CLOUDFLARE_BEARER_TOKEN', None) and env.str('CLOUDFLARE_API_ZONEID'):
-    INSTALLED_APPS += ('wagtail.contrib.frontend_cache', )  # noqa
+if env.str("CLOUDFLARE_BEARER_TOKEN", None) and env.str("CLOUDFLARE_API_ZONEID"):
+    INSTALLED_APPS += ("wagtail.contrib.frontend_cache",)  # noqa
     WAGTAILFRONTENDCACHE = {
-        'cloudflare': {
-            'BACKEND': 'wagtail.contrib.frontend_cache.backends.CloudflareBackend',
-            'BEARER_TOKEN': env.str('CLOUDFLARE_BEARER_TOKEN'),
-            'ZONEID': env.str('CLOUDFLARE_API_ZONEID'),
+        "cloudflare": {
+            "BACKEND": "wagtail.contrib.frontend_cache.backends.CloudflareBackend",
+            "BEARER_TOKEN": env.str("CLOUDFLARE_BEARER_TOKEN"),
+            "ZONEID": env.str("CLOUDFLARE_API_ZONEID"),
         },
     }
 
@@ -291,34 +332,84 @@ if env.str('CLOUDFLARE_BEARER_TOKEN', None) and env.str('CLOUDFLARE_API_ZONEID')
 # Set the Google OAuth2 credentials in ENV variables or local.py
 # To create a new set of credentials, go to https://console.developers.google.com/apis/credentials
 # Make sure the Google+ API is enabled for your API project
-SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = env.list('SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS', STAFF_EMAIL_DOMAINS)
+SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = env.list(
+    "SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS", STAFF_EMAIL_DOMAINS
+)
 
-SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = env.str('SOCIAL_AUTH_GOOGLE_OAUTH2_KEY', '')
-SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = env.str('SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET', '')
+SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = env.str("SOCIAL_AUTH_GOOGLE_OAUTH2_KEY", "")
+SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = env.str("SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET", "")
 
-SOCIAL_AUTH_URL_NAMESPACE = 'social'
-SOCIAL_AUTH_LOGIN_ERROR_URL = 'users_public:login'
-SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = 'users:account'
+SOCIAL_AUTH_URL_NAMESPACE = "social"
+SOCIAL_AUTH_LOGIN_ERROR_URL = "users_public:login"
+SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = "users:account"
 
 # For pipelines, see http://python-social-auth.readthedocs.io/en/latest/pipeline.html?highlight=pipelines#authentication-pipeline
 # Create / associate accounts (including by email)
 SOCIAL_AUTH_PIPELINE = (
-    'social_core.pipeline.social_auth.social_details',
-    'social_core.pipeline.social_auth.social_uid',
-    'social_core.pipeline.social_auth.auth_allowed',
-    'social_core.pipeline.social_auth.social_user',
-    'social_core.pipeline.social_auth.associate_by_email',
-    'social_core.pipeline.user.create_user',
-    'social_core.pipeline.social_auth.associate_user',
-    'social_core.pipeline.social_auth.load_extra_data',
-    'social_core.pipeline.user.user_details',
-    'hypha.apply.users.pipeline.make_otf_staff',
+    "social_core.pipeline.social_auth.social_details",
+    "social_core.pipeline.social_auth.social_uid",
+    "social_core.pipeline.social_auth.auth_allowed",
+    "social_core.pipeline.social_auth.social_user",
+    "social_core.pipeline.social_auth.associate_by_email",
+    "social_core.pipeline.user.create_user",
+    "social_core.pipeline.social_auth.associate_user",
+    "social_core.pipeline.social_auth.load_extra_data",
+    "social_core.pipeline.user.user_details",
+    "hypha.apply.users.pipeline.make_otf_staff",
 )
 
 # Bleach Settings
 
-BLEACH_ALLOWED_TAGS = ['a', 'b', 'big', 'blockquote', 'br', 'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'ins', 'li', 'ol', 'p', 'pre', 'small', 'span', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'th', 'thead', 'tr', 'ul']
-BLEACH_ALLOWED_ATTRIBUTES = ['class', 'colspan', 'href', 'rowspan', 'target', 'title', 'width']
+BLEACH_ALLOWED_TAGS = [
+    "a",
+    "b",
+    "big",
+    "blockquote",
+    "br",
+    "cite",
+    "code",
+    "col",
+    "colgroup",
+    "dd",
+    "del",
+    "dl",
+    "dt",
+    "em",
+    "h1",
+    "h2",
+    "h3",
+    "h4",
+    "h5",
+    "h6",
+    "hr",
+    "i",
+    "ins",
+    "li",
+    "ol",
+    "p",
+    "pre",
+    "small",
+    "span",
+    "strong",
+    "sub",
+    "sup",
+    "table",
+    "tbody",
+    "td",
+    "th",
+    "thead",
+    "tr",
+    "ul",
+]
+BLEACH_ALLOWED_ATTRIBUTES = [
+    "class",
+    "colspan",
+    "href",
+    "rowspan",
+    "target",
+    "title",
+    "width",
+]
 BLEACH_ALLOWED_STYLES = []
 BLEACH_STRIP_TAGS = True
 BLEACH_STRIP_COMMENTS = True
@@ -326,10 +417,10 @@ BLEACH_STRIP_COMMENTS = True
 
 # Hijack Settings
 
-HIJACK_LOGIN_REDIRECT_URL = '/dashboard/'
-HIJACK_LOGOUT_REDIRECT_URL = '/account/'
-HIJACK_DECORATOR = 'hypha.apply.users.decorators.superuser_decorator'
-HIJACK_PERMISSION_CHECK = 'hijack.permissions.superusers_and_staff'
+HIJACK_LOGIN_REDIRECT_URL = "/dashboard/"
+HIJACK_LOGOUT_REDIRECT_URL = "/account/"
+HIJACK_DECORATOR = "hypha.apply.users.decorators.superuser_decorator"
+HIJACK_PERMISSION_CHECK = "hijack.permissions.superusers_and_staff"
 
 
 # Celery settings
@@ -339,102 +430,112 @@ CELERY_TASK_ALWAYS_EAGER = True
 
 # S3 settings
 
-if env.str('AWS_STORAGE_BUCKET_NAME', None):
-    DEFAULT_FILE_STORAGE = 'hypha.storage_backends.PublicMediaStorage'
-    PRIVATE_FILE_STORAGE = 'hypha.storage_backends.PrivateMediaStorage'
-    AWS_STORAGE_BUCKET_NAME = env.str('AWS_STORAGE_BUCKET_NAME')
-    AWS_PUBLIC_BUCKET_NAME = env.str('AWS_PUBLIC_BUCKET_NAME', AWS_STORAGE_BUCKET_NAME)
-    AWS_PRIVATE_BUCKET_NAME = env.str('AWS_PRIVATE_BUCKET_NAME', AWS_STORAGE_BUCKET_NAME)
-    AWS_S3_CUSTOM_DOMAIN = env.str('AWS_S3_CUSTOM_DOMAIN', None)
-    AWS_PRIVATE_CUSTOM_DOMAIN = env.str('AWS_PRIVATE_CUSTOM_DOMAIN', None)
-    AWS_QUERYSTRING_EXPIRE = env.str('AWS_QUERYSTRING_EXPIRE', None)
-    AWS_PUBLIC_CUSTOM_DOMAIN = env.str('AWS_PUBLIC_CUSTOM_DOMAIN', None)
-    INSTALLED_APPS += (
-        'storages',
+if env.str("AWS_STORAGE_BUCKET_NAME", None):
+    DEFAULT_FILE_STORAGE = "hypha.storage_backends.PublicMediaStorage"
+    PRIVATE_FILE_STORAGE = "hypha.storage_backends.PrivateMediaStorage"
+    AWS_STORAGE_BUCKET_NAME = env.str("AWS_STORAGE_BUCKET_NAME")
+    AWS_PUBLIC_BUCKET_NAME = env.str("AWS_PUBLIC_BUCKET_NAME", AWS_STORAGE_BUCKET_NAME)
+    AWS_PRIVATE_BUCKET_NAME = env.str(
+        "AWS_PRIVATE_BUCKET_NAME", AWS_STORAGE_BUCKET_NAME
     )
+    AWS_S3_CUSTOM_DOMAIN = env.str("AWS_S3_CUSTOM_DOMAIN", None)
+    AWS_PRIVATE_CUSTOM_DOMAIN = env.str("AWS_PRIVATE_CUSTOM_DOMAIN", None)
+    AWS_QUERYSTRING_EXPIRE = env.str("AWS_QUERYSTRING_EXPIRE", None)
+    AWS_PUBLIC_CUSTOM_DOMAIN = env.str("AWS_PUBLIC_CUSTOM_DOMAIN", None)
+    INSTALLED_APPS += ("storages",)
 
 # Settings to connect to the Bucket from which we are migrating data
-AWS_MIGRATION_BUCKET_NAME = env.str('AWS_MIGRATION_BUCKET_NAME', '')
-AWS_MIGRATION_ACCESS_KEY_ID = env.str('AWS_MIGRATION_ACCESS_KEY_ID', '')
-AWS_MIGRATION_SECRET_ACCESS_KEY = env.str('AWS_MIGRATION_SECRET_ACCESS_KEY', '')
+AWS_MIGRATION_BUCKET_NAME = env.str("AWS_MIGRATION_BUCKET_NAME", "")
+AWS_MIGRATION_ACCESS_KEY_ID = env.str("AWS_MIGRATION_ACCESS_KEY_ID", "")
+AWS_MIGRATION_SECRET_ACCESS_KEY = env.str("AWS_MIGRATION_SECRET_ACCESS_KEY", "")
 
 # Mailchimp settings.
 
-MAILCHIMP_API_KEY = env.str('MAILCHIMP_API_KEY', None)
-MAILCHIMP_LIST_ID = env.str('MAILCHIMP_LIST_ID', None)
+MAILCHIMP_API_KEY = env.str("MAILCHIMP_API_KEY", None)
+MAILCHIMP_LIST_ID = env.str("MAILCHIMP_LIST_ID", None)
 
 
 # Basic auth settings
 
-if env.bool('BASIC_AUTH_ENABLED', False):
-    MIDDLEWARE.insert(0, 'baipw.middleware.BasicAuthIPWhitelistMiddleware')
-    BASIC_AUTH_LOGIN = env.str('BASIC_AUTH_LOGIN', None)
-    BASIC_AUTH_PASSWORD = env.str('BASIC_AUTH_PASSWORD', None)
-    BASIC_AUTH_WHITELISTED_HTTP_HOSTS = env.list('BASIC_AUTH_WHITELISTED_HTTP_HOSTS', [])
-    BASIC_AUTH_WHITELISTED_IP_NETWORKS = env.list('BASIC_AUTH_WHITELISTED_IP_NETWORKS', [])
+if env.bool("BASIC_AUTH_ENABLED", False):
+    MIDDLEWARE.insert(0, "baipw.middleware.BasicAuthIPWhitelistMiddleware")
+    BASIC_AUTH_LOGIN = env.str("BASIC_AUTH_LOGIN", None)
+    BASIC_AUTH_PASSWORD = env.str("BASIC_AUTH_PASSWORD", None)
+    BASIC_AUTH_WHITELISTED_HTTP_HOSTS = env.list(
+        "BASIC_AUTH_WHITELISTED_HTTP_HOSTS", []
+    )
+    BASIC_AUTH_WHITELISTED_IP_NETWORKS = env.list(
+        "BASIC_AUTH_WHITELISTED_IP_NETWORKS", []
+    )
+
+# Sessions
+# https://docs.djangoproject.com/en/stable/ref/settings/#sessions
 
+# The age of session cookies, in seconds.
+SESSION_COOKIE_AGE = env.int("SESSION_COOKIE_AGE", 60 * 60 * 24 * 7 * 2)  # 2 weeks
 
 # This is used by Wagtail's email notifications for constructing absolute URLs.
-PRIMARY_HOST = env.str('PRIMARY_HOST', None)
-WAGTAILADMIN_BASE_URL = env.str("WAGTAILADMIN_BASE_URL", None) or (f'https://{PRIMARY_HOST}' if PRIMARY_HOST else None)
+PRIMARY_HOST = env.str("PRIMARY_HOST", None)
+WAGTAILADMIN_BASE_URL = env.str("WAGTAILADMIN_BASE_URL", None) or (
+    f"https://{PRIMARY_HOST}" if PRIMARY_HOST else None
+)
 
 
 # Security settings
 # https://docs.djangoproject.com/en/stable/ref/middleware/#module-django.middleware.security
 
-SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', True)
-SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
-SECURE_HSTS_SECONDS = env.int('SECURE_HSTS_SECONDS', None)
-SECURE_BROWSER_XSS_FILTER = env.bool('SECURE_BROWSER_XSS_FILTER', True)
-SECURE_CONTENT_TYPE_NOSNIFF = env.bool('SECURE_CONTENT_TYPE_NOSNIFF', True)
+SECURE_SSL_REDIRECT = env.bool("SECURE_SSL_REDIRECT", True)
+SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
+SECURE_HSTS_SECONDS = env.int("SECURE_HSTS_SECONDS", None)
+SECURE_BROWSER_XSS_FILTER = env.bool("SECURE_BROWSER_XSS_FILTER", True)
+SECURE_CONTENT_TYPE_NOSNIFF = env.bool("SECURE_CONTENT_TYPE_NOSNIFF", True)
 
-if env.bool('COOKIE_SECURE', False):
+if env.bool("COOKIE_SECURE", False):
     SESSION_COOKIE_SECURE = True
     CSRF_COOKIE_SECURE = True
 
 # Referrer-policy header settings
 # https://django-referrer-policy.readthedocs.io/en/1.0/
 
-REFERRER_POLICY = env.str('SECURE_REFERRER_POLICY',
-                          'no-referrer-when-downgrade').strip()
+REFERRER_POLICY = env.str(
+    "SECURE_REFERRER_POLICY", "no-referrer-when-downgrade"
+).strip()
 
 
 # Rest Framework settings
 
 REST_FRAMEWORK = {
-    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
-    'PAGE_SIZE': 10,
-    'DEFAULT_AUTHENTICATION_CLASSES': (
-        'rest_framework.authentication.SessionAuthentication',
+    "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
+    "PAGE_SIZE": 10,
+    "DEFAULT_AUTHENTICATION_CLASSES": (
+        "rest_framework.authentication.SessionAuthentication",
     ),
-    'DEFAULT_PERMISSION_CLASSES': (
-        'rest_framework.permissions.IsAuthenticated',
-    )
+    "DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticated",),
 }
 
 
 # django-file-form settings
 
-FILE_FORM_CACHE = 'django_file_form'
-FILE_FORM_UPLOAD_DIR = 'temp_uploads'
+FILE_FORM_CACHE = "django_file_form"
+FILE_FORM_UPLOAD_DIR = "temp_uploads"
 # Ensure FILE_FORM_UPLOAD_DIR exists:
 os.makedirs(os.path.join(MEDIA_ROOT, FILE_FORM_UPLOAD_DIR), exist_ok=True)
 # Store temporary files on S3 too (files are still uploaded to local filesystem first)
-if env.str('AWS_STORAGE_BUCKET_NAME', None):
+if env.str("AWS_STORAGE_BUCKET_NAME", None):
     FILE_FORM_TEMP_STORAGE = PRIVATE_FILE_STORAGE
 
 
 # Sage IntAcct integration settings
 
-INTACCT_ENABLED = env.bool('INTACCT_ENABLED', False)
-INTACCT_SENDER_ID = env.str('INTACCT_SENDER_ID', '')
-INTACCT_SENDER_PASSWORD = env.str('INTACCT_SENDER_PASSWORD', '')
-INTACCT_USER_ID = env.str('INTACCT_USER_ID', '')
-INTACCT_COMPANY_ID = env.str('INTACCT_COMPANY_ID', '')
-INTACCT_USER_PASSWORD = env.str('INTACCT_USER_PASSWORD', '')
+INTACCT_ENABLED = env.bool("INTACCT_ENABLED", False)
+INTACCT_SENDER_ID = env.str("INTACCT_SENDER_ID", "")
+INTACCT_SENDER_PASSWORD = env.str("INTACCT_SENDER_PASSWORD", "")
+INTACCT_USER_ID = env.str("INTACCT_USER_ID", "")
+INTACCT_COMPANY_ID = env.str("INTACCT_COMPANY_ID", "")
+INTACCT_USER_PASSWORD = env.str("INTACCT_USER_PASSWORD", "")
 
 # Finance extension to finance2 for Project Invoicing
-INVOICE_EXTENDED_WORKFLOW = env.bool('INVOICE_EXTENDED_WORKFLOW', True)
+INVOICE_EXTENDED_WORKFLOW = env.bool("INVOICE_EXTENDED_WORKFLOW", True)
 
 # Misc settings
 
@@ -442,9 +543,7 @@ INVOICE_EXTENDED_WORKFLOW = env.bool('INVOICE_EXTENDED_WORKFLOW', True)
 # Apples Safari on iOS and macOS can then recognise them automatically.
 # TWO_FACTOR_QR_FACTORY = 'qrcode.image.pil.PilImage'
 
-LOCALE_PATHS = (
-    PROJECT_DIR + '/locale',
-)
+LOCALE_PATHS = (PROJECT_DIR + "/locale",)
 
 DEBUG = False
 ENABLE_STYLEGUIDE = False
@@ -452,29 +551,34 @@ DEBUGTOOLBAR = False
 
 if not SEND_MESSAGES:
     from django.contrib.messages import constants as message_constants
+
     MESSAGE_LEVEL = message_constants.DEBUG
 
 # Django countries package provides ISO 3166-1 countries which does not contain Kosovo.
 COUNTRIES_OVERRIDE = {
-    'KV': 'Kosovo',
+    "KV": "Kosovo",
 }
 
+# Google Translate
+ENABLE_GOOGLE_TRANSLATE = env.bool("ENABLE_GOOGLE_TRANSLATE", True)
+
 # Sentry configuration.
 # -----------------------------------------------------------------------------
-SENTRY_DSN = env.str('SENTRY_DSN', None)
-SENTRY_PUBLIC_KEY = env.str('SENTRY_PUBLIC_KEY', None)
-SENTRY_TRACES_SAMPLE_RATE = env.float('SENTRY_TRACES_SAMPLE_RATE', default=0)
-SENTRY_ENVIRONMENT = env.str('SENTRY_ENVIRONMENT', 'production')
-SENTRY_DEBUG = env.bool('SENTRY_DEBUG', False)
-SENTRY_DENY_URLS = env.list('SENTRY_DENY_URLS', default=[])
+SENTRY_DSN = env.str("SENTRY_DSN", None)
+SENTRY_PUBLIC_KEY = env.str("SENTRY_PUBLIC_KEY", None)
+SENTRY_TRACES_SAMPLE_RATE = env.float("SENTRY_TRACES_SAMPLE_RATE", default=0)
+SENTRY_ENVIRONMENT = env.str("SENTRY_ENVIRONMENT", "production")
+SENTRY_DEBUG = env.bool("SENTRY_DEBUG", False)
+SENTRY_DENY_URLS = env.list("SENTRY_DENY_URLS", default=[])
 
 if SENTRY_DSN:
     import sentry_sdk
     from sentry_sdk.integrations.django import DjangoIntegration
+
     sentry_sdk.init(
         dsn=SENTRY_DSN,
         environment=SENTRY_ENVIRONMENT,
         traces_sample_rate=SENTRY_TRACES_SAMPLE_RATE,
         debug=SENTRY_DEBUG,
-        integrations=[DjangoIntegration()]
+        integrations=[DjangoIntegration()],
     )
diff --git a/hypha/settings/dev.py b/hypha/settings/dev.py
index 0e85a38154757833099e718f11348e77fc79334a..3ee6c8455c65bf8e6bfea5e3a1d6ca7534db3e3f 100644
--- a/hypha/settings/dev.py
+++ b/hypha/settings/dev.py
@@ -7,20 +7,26 @@ DEBUG = True
 RELOAD = True
 
 # SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = 'CHANGEME!!!'
+SECRET_KEY = "CHANGEME!!!"
 
 WAGTAIL_CACHE = False
 
-ALLOWED_HOSTS = ['apply.localhost', 'localhost', '127.0.0.1', 'hypha.test', 'apply.hypha.test']
+ALLOWED_HOSTS = [
+    "apply.localhost",
+    "localhost",
+    "127.0.0.1",
+    "hypha.test",
+    "apply.hypha.test",
+]
 
-WAGTAILADMIN_BASE_URL = 'http://localhost:8000'
+WAGTAILADMIN_BASE_URL = "http://localhost:8000"
 
-EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
 
 AUTH_PASSWORD_VALIDATORS = []
 
 INSTALLED_APPS = INSTALLED_APPS + [
-    'wagtail.contrib.styleguide',
+    "wagtail.contrib.styleguide",
 ]
 
 SECURE_SSL_REDIRECT = False
@@ -38,69 +44,69 @@ except ImportError:
 
 # E-mail to local files.
 if LOCAL_FILE_EMAIL:
-    EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
-    EMAIL_FILE_PATH = BASE_DIR + '/var/mail'
+    EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
+    EMAIL_FILE_PATH = BASE_DIR + "/var/mail"
 
 # Local logging to file.
 if LOCAL_FILE_LOGGING:
     LOGGING = {
-        'version': 1,
-        'disable_existing_loggers': True,
-        'formatters': {
-            'standard': {
-                'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
-                'datefmt': "%Y-%m-%d %H:%M:%S"
+        "version": 1,
+        "disable_existing_loggers": True,
+        "formatters": {
+            "standard": {
+                "format": "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
+                "datefmt": "%Y-%m-%d %H:%M:%S",
             },
         },
-        'handlers': {
-            'null': {
-                'level': 'DEBUG',
-                'class': 'logging.NullHandler',
+        "handlers": {
+            "null": {
+                "level": "DEBUG",
+                "class": "logging.NullHandler",
             },
-            'logfile': {
-                'level': 'DEBUG',
-                'class': 'logging.handlers.RotatingFileHandler',
-                'filename': BASE_DIR + '/var/log/debug.log',
-                'maxBytes': 1000000,
-                'backupCount': 2,
-                'formatter': 'standard',
+            "logfile": {
+                "level": "DEBUG",
+                "class": "logging.handlers.RotatingFileHandler",
+                "filename": BASE_DIR + "/var/log/debug.log",
+                "maxBytes": 1000000,
+                "backupCount": 2,
+                "formatter": "standard",
             },
         },
-        'loggers': {
-            'django': {
-                'handlers': ['logfile'],
-                'level': 'INFO',
-                'propagate': True,
+        "loggers": {
+            "django": {
+                "handlers": ["logfile"],
+                "level": "INFO",
+                "propagate": True,
             },
-            'django.db.backends': {
-                'handlers': ['logfile'],
-                'level': 'INFO',
-                'propagate': False,
+            "django.db.backends": {
+                "handlers": ["logfile"],
+                "level": "INFO",
+                "propagate": False,
             },
-            'django.request': {
-                'handlers': ['logfile'],
-                'level': 'DEBUG',
-                'propagate': False,
+            "django.request": {
+                "handlers": ["logfile"],
+                "level": "DEBUG",
+                "propagate": False,
             },
-            'django.template': {
-                'handlers': ['logfile'],
-                'level': 'INFO',
-                'propagate': False,
+            "django.template": {
+                "handlers": ["logfile"],
+                "level": "INFO",
+                "propagate": False,
             },
-            'django.security': {
-                'handlers': ['logfile'],
-                'level': 'DEBUG',
-                'propagate': False,
+            "django.security": {
+                "handlers": ["logfile"],
+                "level": "DEBUG",
+                "propagate": False,
             },
-            'wagtail': {
-                'handlers': ['logfile'],
-                'level': 'DEBUG',
+            "wagtail": {
+                "handlers": ["logfile"],
+                "level": "DEBUG",
             },
-            'hypha': {
-                'handlers': ['logfile'],
-                'level': 'DEBUG',
+            "hypha": {
+                "handlers": ["logfile"],
+                "level": "DEBUG",
             },
-        }
+        },
     }
 
 
@@ -109,22 +115,22 @@ if LOCAL_FILE_LOGGING:
 if DEBUG:
     INSTALLED_APPS = [
         *INSTALLED_APPS,
-        'debug_toolbar',
+        "debug_toolbar",
     ]
     MIDDLEWARE = [
-        'debug_toolbar.middleware.DebugToolbarMiddleware',
+        "debug_toolbar.middleware.DebugToolbarMiddleware",
         *MIDDLEWARE,
     ]
     # https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#configuring-internal-ips
-    INTERNAL_IPS = ['127.0.0.1']
+    INTERNAL_IPS = ["127.0.0.1"]
 
     if RELOAD:
         INSTALLED_APPS = [
             *INSTALLED_APPS,
-            'django_browser_reload',
+            "django_browser_reload",
         ]
         MIDDLEWARE = [
-            'django_browser_reload.middleware.BrowserReloadMiddleware',
+            "django_browser_reload.middleware.BrowserReloadMiddleware",
             *MIDDLEWARE,
         ]
 
@@ -133,23 +139,25 @@ if DEBUG:
 # can be easily toggled on in the UI.
 DEBUG_TOOLBAR_CONFIG = {
     "DISABLE_PANELS": {
-        'debug_toolbar.panels.versions.VersionsPanel',
-        'debug_toolbar.panels.timer.TimerPanel',
-        'debug_toolbar.panels.settings.SettingsPanel',
-        'debug_toolbar.panels.headers.HeadersPanel',
-        'debug_toolbar.panels.request.RequestPanel',
-        'debug_toolbar.panels.sql.SQLPanel',
-        'debug_toolbar.panels.staticfiles.StaticFilesPanel',
-        'debug_toolbar.panels.templates.TemplatesPanel',
-        'debug_toolbar.panels.cache.CachePanel',
-        'debug_toolbar.panels.signals.SignalsPanel',
-        'debug_toolbar.panels.logging.LoggingPanel',
-        'debug_toolbar.panels.redirects.RedirectsPanel',
-        'debug_toolbar.panels.profiling.ProfilingPanel',
+        "debug_toolbar.panels.versions.VersionsPanel",
+        "debug_toolbar.panels.timer.TimerPanel",
+        "debug_toolbar.panels.settings.SettingsPanel",
+        "debug_toolbar.panels.headers.HeadersPanel",
+        "debug_toolbar.panels.request.RequestPanel",
+        "debug_toolbar.panels.sql.SQLPanel",
+        "debug_toolbar.panels.staticfiles.StaticFilesPanel",
+        "debug_toolbar.panels.templates.TemplatesPanel",
+        "debug_toolbar.panels.cache.CachePanel",
+        "debug_toolbar.panels.signals.SignalsPanel",
+        "debug_toolbar.panels.logging.LoggingPanel",
+        "debug_toolbar.panels.redirects.RedirectsPanel",
+        "debug_toolbar.panels.profiling.ProfilingPanel",
     },
     "SHOW_COLLAPSED": True,
 }
 
 # Required for testing the apis from postman
-REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] + ('rest_framework.authentication.BasicAuthentication', )
-SENTRY_DENY_URLS += ['__reload__', '/favicon.ico', '/media/', '/static/', '__debug__']
+REST_FRAMEWORK["DEFAULT_AUTHENTICATION_CLASSES"] = REST_FRAMEWORK[
+    "DEFAULT_AUTHENTICATION_CLASSES"
+] + ("rest_framework.authentication.BasicAuthentication",)
+SENTRY_DENY_URLS += ["__reload__", "/favicon.ico", "/media/", "/static/", "__debug__"]
diff --git a/hypha/settings/django.py b/hypha/settings/django.py
index 6ae29348c383230319dae3a5d04388b0b5533f22..980e89bb16bbb171f3195bd1ae5a3e0a007e1786 100644
--- a/hypha/settings/django.py
+++ b/hypha/settings/django.py
@@ -4,164 +4,152 @@ Django settings for hypha project.
 
 # Application definition
 INSTALLED_APPS = [
-    'scout_apm.django',
-
-    'hypha.cookieconsent',
-    'hypha.images',
-    'hypha.core.apps.CoreAppConfig',
-
-    'hypha.apply.activity',
-    'hypha.apply.categories',
-    'hypha.apply.funds',
-    'hypha.apply.dashboard',
-    'hypha.apply.flags',
-    'hypha.apply.home',
-    'hypha.apply.users',
-    'hypha.apply.review',
-    'hypha.apply.determinations',
-    'hypha.apply.stream_forms',
-    'hypha.apply.utils.apps.UtilsConfig',
-    'hypha.apply.projects.apps.ProjectsConfig',
-
-    'hypha.public.funds',
-    'hypha.public.home',
-    'hypha.public.mailchimp',
-    'hypha.public.navigation',
-    'hypha.public.news',
-    'hypha.public.people',
-    'hypha.public.projects',
-    'hypha.public.search',
-    'hypha.public.standardpages',
-    'hypha.public.forms',
-    'hypha.public.utils',
-    'hypha.public.partner',
-
-    'social_django',
-    'django_htmx',
-    'heroicons',
-    'django_web_components',
-
-    'wagtail.contrib.modeladmin',
-    'wagtail.contrib.settings',
-    'wagtail.contrib.search_promotions',
-    'wagtail.contrib.forms',
-    'wagtail.contrib.redirects',
-    'wagtail.embeds',
-    'wagtail.sites',
-    'wagtail.users',
-    'wagtail.snippets',
-    'wagtail.documents',
-    'wagtail.images',
-    'wagtail.search',
-    'wagtail.admin',
-    'wagtail',
-
-    'anymail',
-    'modelcluster',
-    'taggit',
-    'django_extensions',
-    'tinymce',
-    'django_tables2',
-    'django_filters',
-    'django_select2',
-    'addressfield',
-    'django_bleach',
-    'django_fsm',
-    'django_pwned_passwords',
-    'django_slack',
-    'django_otp',
-    'django_otp.plugins.otp_totp',
-    'django_otp.plugins.otp_static',
-    'two_factor',
-    'drf_yasg',
-    'rest_framework',
-    'rest_framework_api_key',
-    'wagtailcache',
-    'wagtail_purge',
-    'django_file_form',
-
-    'hijack',
-    'pagedown',
-
-    'django.contrib.admin',
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.humanize',
-    'django.contrib.sessions',
-    'django.contrib.messages',
-    'django.contrib.postgres',
-    'django.contrib.staticfiles',
-    'django.contrib.sitemaps',
-    'django.forms',
-    'formtools',
+    "scout_apm.django",
+    "hypha.cookieconsent",
+    "hypha.images",
+    "hypha.core.apps.CoreAppConfig",
+    "hypha.apply.activity",
+    "hypha.apply.categories",
+    "hypha.apply.funds",
+    "hypha.apply.dashboard",
+    "hypha.apply.flags",
+    "hypha.apply.home",
+    "hypha.apply.users",
+    "hypha.apply.review",
+    "hypha.apply.determinations",
+    "hypha.apply.stream_forms",
+    "hypha.apply.utils.apps.UtilsConfig",
+    "hypha.apply.projects.apps.ProjectsConfig",
+    "hypha.public.funds",
+    "hypha.public.home",
+    "hypha.public.mailchimp",
+    "hypha.public.navigation",
+    "hypha.public.news",
+    "hypha.public.people",
+    "hypha.public.projects",
+    "hypha.public.search",
+    "hypha.public.standardpages",
+    "hypha.public.forms",
+    "hypha.public.utils",
+    "hypha.public.partner",
+    "social_django",
+    "django_htmx",
+    "heroicons",
+    "django_web_components",
+    "wagtail.contrib.modeladmin",
+    "wagtail.contrib.settings",
+    "wagtail.contrib.search_promotions",
+    "wagtail.contrib.forms",
+    "wagtail.contrib.redirects",
+    "wagtail.embeds",
+    "wagtail.sites",
+    "wagtail.users",
+    "wagtail.snippets",
+    "wagtail.documents",
+    "wagtail.images",
+    "wagtail.search",
+    "wagtail.admin",
+    "wagtail",
+    "anymail",
+    "modelcluster",
+    "taggit",
+    "django_extensions",
+    "tinymce",
+    "django_tables2",
+    "django_filters",
+    "django_select2",
+    "addressfield",
+    "django_bleach",
+    "django_fsm",
+    "django_pwned_passwords",
+    "django_slack",
+    "django_otp",
+    "django_otp.plugins.otp_totp",
+    "django_otp.plugins.otp_static",
+    "two_factor",
+    "drf_yasg",
+    "rest_framework",
+    "rest_framework_api_key",
+    "wagtailcache",
+    "wagtail_purge",
+    "django_file_form",
+    "hijack",
+    "pagedown",
+    "django.contrib.admin",
+    "django.contrib.auth",
+    "django.contrib.contenttypes",
+    "django.contrib.humanize",
+    "django.contrib.sessions",
+    "django.contrib.messages",
+    "django.contrib.postgres",
+    "django.contrib.staticfiles",
+    "django.contrib.sitemaps",
+    "django.forms",
+    "formtools",
 ]
 
 MIDDLEWARE = [
-    'django.middleware.security.SecurityMiddleware',
-    'whitenoise.middleware.WhiteNoiseMiddleware',
-    'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.middleware.common.CommonMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.messages.middleware.MessageMiddleware',
-    'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'django_referrer_policy.middleware.ReferrerPolicyMiddleware',
-    'django_otp.middleware.OTPMiddleware',
-    'hypha.apply.users.middleware.TwoFactorAuthenticationMiddleware',
-
-    'hijack.middleware.HijackUserMiddleware',
-
-    'hypha.apply.users.middleware.SocialAuthExceptionMiddleware',
-
-    'wagtail.contrib.redirects.middleware.RedirectMiddleware',
-
-    'hypha.apply.middleware.apply_url_conf_middleware',
-    'hypha.apply.middleware.HandleProtectionErrorMiddleware',
-    'django_htmx.middleware.HtmxMiddleware',
+    "django.middleware.security.SecurityMiddleware",
+    "whitenoise.middleware.WhiteNoiseMiddleware",
+    "django.contrib.sessions.middleware.SessionMiddleware",
+    "django.middleware.common.CommonMiddleware",
+    "django.middleware.csrf.CsrfViewMiddleware",
+    "django.contrib.auth.middleware.AuthenticationMiddleware",
+    "django.contrib.messages.middleware.MessageMiddleware",
+    "django.middleware.clickjacking.XFrameOptionsMiddleware",
+    "django_referrer_policy.middleware.ReferrerPolicyMiddleware",
+    "django_otp.middleware.OTPMiddleware",
+    "hypha.apply.users.middleware.TwoFactorAuthenticationMiddleware",
+    "hijack.middleware.HijackUserMiddleware",
+    "hypha.apply.users.middleware.SocialAuthExceptionMiddleware",
+    "wagtail.contrib.redirects.middleware.RedirectMiddleware",
+    "hypha.apply.middleware.apply_url_conf_middleware",
+    "hypha.apply.middleware.HandleProtectionErrorMiddleware",
+    "django_htmx.middleware.HtmxMiddleware",
 ]
 
 # Logging
 LOGGING = {
-    'version': 1,
-    'disable_existing_loggers': False,
-    'handlers': {
+    "version": 1,
+    "disable_existing_loggers": False,
+    "handlers": {
         # Send logs with at least INFO level to the console.
-        'console': {
-            'level': 'INFO',
-            'class': 'logging.StreamHandler',
-            'formatter': 'verbose',
+        "console": {
+            "level": "INFO",
+            "class": "logging.StreamHandler",
+            "formatter": "verbose",
         },
     },
-    'formatters': {
-        'verbose': {
-            'format': '[%(asctime)s][%(process)d][%(levelname)s][%(name)s] %(message)s'
+    "formatters": {
+        "verbose": {
+            "format": "[%(asctime)s][%(process)d][%(levelname)s][%(name)s] %(message)s"
         }
     },
-    'loggers': {
-        'hypha': {
-            'handlers': ['console'],
-            'level': 'INFO',
-            'propagate': False,
+    "loggers": {
+        "hypha": {
+            "handlers": ["console"],
+            "level": "INFO",
+            "propagate": False,
         },
-        'wagtail': {
-            'handlers': ['console'],
-            'level': 'INFO',
-            'propagate': False,
+        "wagtail": {
+            "handlers": ["console"],
+            "level": "INFO",
+            "propagate": False,
         },
-        'django': {
-            'handlers': ['console'],
-            'level': 'ERROR',
-            'propagate': False,
+        "django": {
+            "handlers": ["console"],
+            "level": "ERROR",
+            "propagate": False,
         },
-        'django.request': {
-            'handlers': ['console'],
-            'level': 'WARNING',
-            'propagate': False,
+        "django.request": {
+            "handlers": ["console"],
+            "level": "WARNING",
+            "propagate": False,
         },
-        'django.security': {
-            'handlers': ['console'],
-            'level': 'WARNING',
-            'propagate': False,
+        "django.security": {
+            "handlers": ["console"],
+            "level": "WARNING",
+            "propagate": False,
         },
     },
 }
@@ -170,67 +158,67 @@ LOGGING = {
 # https://docs.djangoproject.com/en/stable/ref/settings/#auth-password-validators
 AUTH_PASSWORD_VALIDATORS = [
     {
-        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
-        'OPTIONS': {
-            'min_length': 12,
-        }
+        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
+        "OPTIONS": {
+            "min_length": 12,
+        },
     },
     {
-        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
     },
     {
-        'NAME': 'django_pwned_passwords.password_validation.PWNEDPasswordValidator',
+        "NAME": "django_pwned_passwords.password_validation.PWNEDPasswordValidator",
     },
 ]
 
 # Internationalization
 # https://docs.djangoproject.com/en/stable/topics/i18n/
 
-TIME_ZONE = 'UTC'
+TIME_ZONE = "UTC"
 USE_I18N = True
 USE_L10N = False
 USE_TZ = True
-DATE_FORMAT = 'N j, Y'
-DATETIME_FORMAT = 'N j, Y, H:i'
-SHORT_DATE_FORMAT = 'Y-m-d'
-SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
+DATE_FORMAT = "N j, Y"
+DATETIME_FORMAT = "N j, Y, H:i"
+SHORT_DATE_FORMAT = "Y-m-d"
+SHORT_DATETIME_FORMAT = "Y-m-d H:i"
 
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%Y-%m-%dT%H:%M',        # '2006-10-25T14:30 (this is extra)'
-    '%Y-%m-%d',              # '2006-10-25'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%Y',              # '10/25/2006'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
-    '%m/%d/%y',              # '10/25/06'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%Y-%m-%dT%H:%M",  # '2006-10-25T14:30 (this is extra)'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
+    "%m/%d/%y",  # '10/25/06'
 ]
 
-AUTH_USER_MODEL = 'users.User'
+AUTH_USER_MODEL = "users.User"
 
-LOGIN_URL = 'users_public:login'
-LOGIN_REDIRECT_URL = 'dashboard:dashboard'
+LOGIN_URL = "users_public:login"
+LOGIN_REDIRECT_URL = "dashboard:dashboard"
 
-CUSTOM_AUTH_BACKEND = 'hypha.apply.users.backends.CustomModelBackend'
+CUSTOM_AUTH_BACKEND = "hypha.apply.users.backends.CustomModelBackend"
 
 AUTHENTICATION_BACKENDS = (
-    'social_core.backends.google.GoogleOAuth2',
+    "social_core.backends.google.GoogleOAuth2",
     CUSTOM_AUTH_BACKEND,
 )
 
 # Default Auto field configuration
-DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
+DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
 
 # The full Python import path to your root URLconf.
-ROOT_URLCONF = 'hypha.urls'
+ROOT_URLCONF = "hypha.urls"
 
 # The class that renders form widgets
-FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
+FORM_RENDERER = "django.forms.renderers.TemplatesSetting"
 
 # Python path of the WSGI application object
-WSGI_APPLICATION = 'hypha.wsgi.application'
+WSGI_APPLICATION = "hypha.wsgi.application"
diff --git a/hypha/settings/example.py b/hypha/settings/example.py
index 10fb1c688ef27ef27bf7ce5eaacc32664bb3496e..f5ae8e333da2e3b21570c4dc77620e5d6d80c265 100644
--- a/hypha/settings/example.py
+++ b/hypha/settings/example.py
@@ -18,5 +18,5 @@ be stored in the DEFAULT_FILE_STORAGE. This may be acceptable if the correct
 access permissions exist to prevent access to the sub-directory of applicant
 media.
 """
-DEFAULT_FILE_STORAGE = 'path.to.my.StorageClass'
-PRIVATE_FILE_STORAGE = 'path.to.my.PrivateStorageClass'
+DEFAULT_FILE_STORAGE = "path.to.my.StorageClass"
+PRIVATE_FILE_STORAGE = "path.to.my.PrivateStorageClass"
diff --git a/hypha/settings/production.py b/hypha/settings/production.py
index d89905f154d940bb1f2ffd4197c913d936647aa0..b5806ea0e945116c791b9fe3b8ba61a1105cc688 100644
--- a/hypha/settings/production.py
+++ b/hypha/settings/production.py
@@ -5,22 +5,23 @@ DEBUG = False
 
 # Alternatively, you can set these in a local.py file on the server
 try:
-     from .local import *  # noqa
+    from .local import *  # noqa
 except ImportError:
     pass
 
 # Mailgun configuration.
-if env.str('MAILGUN_API_KEY', None):
-    EMAIL_BACKEND = 'anymail.backends.mailgun.EmailBackend'
+if env.str("MAILGUN_API_KEY", None):
+    EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"
     ANYMAIL = {
-        'MAILGUN_API_KEY': env.str('MAILGUN_API_KEY'),
-        'MAILGUN_SENDER_DOMAIN': env.str('EMAIL_HOST', None),
-        'MAILGUN_API_URL': env.str('MAILGUN_API_URL', 'https://api.mailgun.net/v3'),
-        'WEBHOOK_SECRET': env.str('ANYMAIL_WEBHOOK_SECRET', None)
+        "MAILGUN_API_KEY": env.str("MAILGUN_API_KEY"),
+        "MAILGUN_SENDER_DOMAIN": env.str("EMAIL_HOST", None),
+        "MAILGUN_API_URL": env.str("MAILGUN_API_URL", "https://api.mailgun.net/v3"),
+        "WEBHOOK_SECRET": env.str("ANYMAIL_WEBHOOK_SECRET", None),
     }
 
 # Heroku configuration.
 # Set ON_HEROKU to true in Config Vars or via cli 'heroku config:set ON_HEROKU=true'.
-if env.bool('ON_HEROKU', False):
+if env.bool("ON_HEROKU", False):
     import django_heroku
+
     django_heroku.settings(locals())
diff --git a/hypha/settings/test.py b/hypha/settings/test.py
index 9857fd223312b564eb9710e256c51ae7fee61ed9..ddeb4708891ec9d6c75d4a835b7dd2fc7da989e5 100644
--- a/hypha/settings/test.py
+++ b/hypha/settings/test.py
@@ -7,7 +7,7 @@ logging.disable(logging.CRITICAL)
 
 # Should only include explicit testing settings
 
-SECRET_KEY = 'NOT A SECRET'
+SECRET_KEY = "NOT A SECRET"
 
 HIJACK_ENABLE = True
 
@@ -17,13 +17,13 @@ PROJECTS_AUTO_CREATE = True
 TRANSITION_AFTER_REVIEWS = 2
 TRANSITION_AFTER_ASSIGNED = True
 
-STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
+STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage"
 
 PASSWORD_HASHERS = [
-    'django.contrib.auth.hashers.MD5PasswordHasher',
+    "django.contrib.auth.hashers.MD5PasswordHasher",
 ]
 
 WAGTAILADMIN_BASE_URL = "https://primary-test-host.org"
 
 # Required by django-coverage-plugin to report template coverage
-TEMPLATES[0]['OPTIONS']['debug'] = True
+TEMPLATES[0]["OPTIONS"]["debug"] = True
diff --git a/hypha/static_src/src/images/favicons/site.webmanifest.json b/hypha/static_src/src/images/favicons/site.webmanifest.json
index 7266d2389fe2928a9328e16ac617a4f4e7ac21f3..ec3552ca7993f5410acb25cc7bc07f6f17c5b1e2 100644
--- a/hypha/static_src/src/images/favicons/site.webmanifest.json
+++ b/hypha/static_src/src/images/favicons/site.webmanifest.json
@@ -1,14 +1,14 @@
 {
-    "name": "",
-    "short_name": "",
-    "icons": [
-        {
-            "src": "/android-chrome-144.png",
-            "sizes": "144x144",
-            "type": "image/png"
-        }
-    ],
-    "theme_color": "#ffffff",
-    "background_color": "#ffffff",
-    "display": "standalone"
+  "name": "",
+  "short_name": "",
+  "icons": [
+    {
+      "src": "/android-chrome-144.png",
+      "sizes": "144x144",
+      "type": "image/png"
+    }
+  ],
+  "theme_color": "#ffffff",
+  "background_color": "#ffffff",
+  "display": "standalone"
 }
diff --git a/hypha/static_src/src/javascript/apply/all-reviews-table.js b/hypha/static_src/src/javascript/apply/all-reviews-table.js
index 7ae59760cd26d930d3a0028bf5dcfc50a6327fe4..41063de80a11e24d26507653e314127c10a928a4 100644
--- a/hypha/static_src/src/javascript/apply/all-reviews-table.js
+++ b/hypha/static_src/src/javascript/apply/all-reviews-table.js
@@ -1,9 +1,8 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Allow click and drag scrolling within reviews table wrapper
-    $('.js-reviews-table').attachDragger();
+    $(".js-reviews-table").attachDragger();
 
     // Enable click and drag scrolling within a div
     $.fn.attachDragger = function () {
@@ -12,25 +11,27 @@
         let position;
         let difference;
 
-        $($(this).selector).on('mousedown mouseup mousemove', (e) => {
-            if (e.type === 'mousedown') {
+        $($(this).selector).on("mousedown mouseup mousemove", (e) => {
+            if (e.type === "mousedown") {
                 attachment = true;
                 lastPosition = [e.clientX, e.clientY];
             }
-            if (e.type === 'mouseup') {
+            if (e.type === "mouseup") {
                 attachment = false;
             }
-            if (e.type === 'mousemove' && attachment === true) {
+            if (e.type === "mousemove" && attachment === true) {
                 position = [e.clientX, e.clientY];
-                difference = [(position[0] - lastPosition[0]), (position[1] - lastPosition[1])];
+                difference = [
+                    position[0] - lastPosition[0],
+                    position[1] - lastPosition[1],
+                ];
                 $(this).scrollLeft($(this).scrollLeft() - difference[0]);
                 $(this).scrollTop($(this).scrollTop() - difference[1]);
                 lastPosition = [e.clientX, e.clientY];
             }
         });
-        (window).on('mouseup', function () {
+        window.on("mouseup", function () {
             attachment = false;
         });
     };
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/all-submissions-table.js b/hypha/static_src/src/javascript/apply/all-submissions-table.js
index f98d014546012f9ff6030911ad36445591430963..e01d2b0e03edeaa64b5ee61166ac1c8d8d832dfc 100644
--- a/hypha/static_src/src/javascript/apply/all-submissions-table.js
+++ b/hypha/static_src/src/javascript/apply/all-submissions-table.js
@@ -1,20 +1,22 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // add the toggle arrow before the submission titles
-    $('.all-submissions-table__parent td.title').prepend('<span class="all-submissions-table__toggle js-toggle-submission"><span class="arrow"></span></span>');
+    $(".all-submissions-table__parent td.title").prepend(
+        '<span class="all-submissions-table__toggle js-toggle-submission"><span class="arrow"></span></span>'
+    );
 
     // grab all the toggles
     const children = Array.prototype.slice.call(
-        document.querySelectorAll('.js-toggle-submission')
+        document.querySelectorAll(".js-toggle-submission")
     );
 
     // show/hide the submission child rows
     children.forEach(function (child) {
-        child.addEventListener('click', (e) => {
-            $(e.target).closest('.all-submissions-table__parent').toggleClass('is-expanded');
+        child.addEventListener("click", (e) => {
+            $(e.target)
+                .closest(".all-submissions-table__parent")
+                .toggleClass("is-expanded");
         });
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/application-form-links-new-window.js b/hypha/static_src/src/javascript/apply/application-form-links-new-window.js
index 1e17d75e38dbb8e6322793c6182a874eaa3ac4ab..55c153f3597257137845569a76e5a0075bbead5f 100644
--- a/hypha/static_src/src/javascript/apply/application-form-links-new-window.js
+++ b/hypha/static_src/src/javascript/apply/application-form-links-new-window.js
@@ -1,11 +1,9 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Make links on application forms open in a new window/tab.
-    $('.application-form').find('a').not('.section-head a').attr({
-        target: '_blank',
-        rel: 'noopener noreferrer'
+    $(".application-form").find("a").not(".section-head a").attr({
+        target: "_blank",
+        rel: "noopener noreferrer",
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/application-form.js b/hypha/static_src/src/javascript/apply/application-form.js
index 477b1c33d26e97a030bb0757d3bd51982cad5983..0c186933b71cac927c5c381b81802de5d8631c82 100644
--- a/hypha/static_src/src/javascript/apply/application-form.js
+++ b/hypha/static_src/src/javascript/apply/application-form.js
@@ -1,60 +1,72 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('.application-form').each(function () {
+    $(".application-form").each(function () {
         var $application_form = $(this);
-        var $application_form_button = $application_form.find('button[type="submit"]');
+        var $application_form_button = $application_form.find(
+            'button[type="submit"]'
+        );
 
         // set aria-required attribute true for required fields
-        $application_form.find('input[required]').each(function (index, input_field) {
-            input_field.setAttribute('aria-required', true);
-        });
+        $application_form
+            .find("input[required]")
+            .each(function (index, input_field) {
+                input_field.setAttribute("aria-required", true);
+            });
 
         // add label_id as aria-describedby to help texts
-        $application_form.find('.form__group').each(function (index, form_group) {
-            var label_id = form_group.querySelector('label').getAttribute('for');
-            if (form_group.querySelector('.form__help')) {
-                form_group.querySelector('.form__help').setAttribute('aria-describedby', label_id);
-            }
-        });
+        $application_form
+            .find(".form__group")
+            .each(function (index, form_group) {
+                var label = form_group.querySelector("label");
+                if (label) {
+                    var label_id = label.getAttribute("for");
+                    if (form_group.querySelector(".form__help")) {
+                        form_group
+                            .querySelector(".form__help")
+                            .setAttribute("aria-describedby", label_id);
+                    }
+                }
+            });
 
         // set aria-invalid for field with errors
-        var $error_fields = $application_form.find('.form__error');
+        var $error_fields = $application_form.find(".form__error");
         if ($error_fields.length) {
             // set focus to the first error field
-            $error_fields[0].querySelector('input').focus();
+            $error_fields[0].querySelector("input").focus();
 
             $error_fields.each(function (index, error_field) {
-                error_field.querySelector('input').setAttribute('aria-invalid', true);
+                const inputEl = error_field.querySelector("input, textarea");
+                if (inputEl) {
+                    inputEl.setAttribute("aria-invalid", true);
+                }
             });
         }
 
         // Remove the "no javascript" messages
-        $('.message-no-js').detach();
+        $(".message-no-js").detach();
 
         // Wait for a mouse to move, indicating they are human.
-        $('body').mousemove(function () {
+        $("body").mousemove(function () {
             // Unlock the form.
-            $application_form.attr('action', '');
-            $application_form_button.attr('disabled', false);
+            $application_form.attr("action", "");
+            $application_form_button.attr("disabled", false);
         });
 
         // Wait for a touch move event, indicating that they are human.
-        $('body').on('touchmove', function () {
+        $("body").on("touchmove", function () {
             // Unlock the form.
-            $application_form.attr('action', '');
-            $application_form_button.attr('disabled', false);
+            $application_form.attr("action", "");
+            $application_form_button.attr("disabled", false);
         });
 
         // A tab or enter key pressed can also indicate they are human.
-        $('body').keydown(function (e) {
-            if ((e.keyCode === 9) || (e.keyCode === 13)) {
+        $("body").keydown(function (e) {
+            if (e.keyCode === 9 || e.keyCode === 13) {
                 // Unlock the form.
-                $application_form.attr('action', '');
-                $application_form_button.attr('disabled', false);
+                $application_form.attr("action", "");
+                $application_form_button.attr("disabled", false);
             }
         });
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/batch-actions.js b/hypha/static_src/src/javascript/apply/batch-actions.js
index 304d79f0d12239dccc73540de555d9c210d1f61b..62e073eecc4d9bd65c4e0f271ace9b2e41e5b6a8 100644
--- a/hypha/static_src/src/javascript/apply/batch-actions.js
+++ b/hypha/static_src/src/javascript/apply/batch-actions.js
@@ -1,22 +1,21 @@
 (function ($) {
-
-    'use strict';
-
-    const $body = $('body');
-    const $checkbox = $('.js-batch-select');
-    const $allCheckboxInput = $('.js-batch-select-all');
-    const $batchButtons = $('.js-batch-button');
-    const $batchProgress = $('.js-batch-progress');
-    const $actionOptions = $('#id_action option');
-    const $batchTitlesList = $('.js-batch-titles');
-    const $batchTitleCount = $('.js-batch-title-count');
-    const $hiddenIDlist = $('.js-submissions-id');
-    const $batchDetermineSend = $('.js-batch-determine-send');
-    const $batchDetermineConfirm = $('.js-batch-determine-confirm');
-    const $batchDetermineForm = $batchDetermineSend.parent('form');
-    const $toggleBatchList = $('.js-toggle-batch-list');
-    const activeClass = 'batch-actions-enabled';
-    const closedClass = 'is-closed';
+    "use strict";
+
+    const $body = $("body");
+    const $checkbox = $(".js-batch-select");
+    const $allCheckboxInput = $(".js-batch-select-all");
+    const $batchButtons = $(".js-batch-button");
+    const $batchProgress = $(".js-batch-progress");
+    const $actionOptions = $("#id_action option");
+    const $batchTitlesList = $(".js-batch-titles");
+    const $batchTitleCount = $(".js-batch-title-count");
+    const $hiddenIDlist = $(".js-submissions-id");
+    const $batchDetermineSend = $(".js-batch-determine-send");
+    const $batchDetermineConfirm = $(".js-batch-determine-confirm");
+    const $batchDetermineForm = $batchDetermineSend.parent("form");
+    const $toggleBatchList = $(".js-toggle-batch-list");
+    const activeClass = "batch-actions-enabled";
+    const closedClass = "is-closed";
 
     $batchDetermineSend.click(function (e) {
         if (!$batchDetermineForm[0].checkValidity()) {
@@ -26,22 +25,21 @@
     });
 
     $batchDetermineConfirm.click(function (e) {
-        $batchDetermineForm.find(':submit').click();
+        $batchDetermineForm.find(":submit").click();
         e.preventDefault();
     });
 
-    $(window).on('load', function () {
+    $(window).on("load", function () {
         toggleBatchActions();
         updateCount();
     });
 
     $allCheckboxInput.change(function () {
-        if ($(this).is(':checked')) {
+        if ($(this).is(":checked")) {
             $checkbox.each(function () {
                 this.checked = true;
             });
-        }
-        else {
+        } else {
             $checkbox.each(function () {
                 this.checked = false;
             });
@@ -60,7 +58,7 @@
         updateCount();
 
         // reset the check all input
-        if (!$(this).is(':checked') && $allCheckboxInput.is(':checked')) {
+        if (!$(this).is(":checked") && $allCheckboxInput.is(":checked")) {
             resetCheckAllInput();
         }
 
@@ -79,30 +77,30 @@
     });
 
     // show/hide the list of actions
-    $toggleBatchList.click(e => {
+    $toggleBatchList.click((e) => {
         e.preventDefault();
 
-        if ($('.js-batch-titles').hasClass(closedClass)) {
-            $toggleBatchList.html('Hide');
-        }
-        else {
-            $toggleBatchList.html('Show');
+        if ($(".js-batch-titles").hasClass(closedClass)) {
+            $toggleBatchList.html("Hide");
+        } else {
+            $toggleBatchList.html("Show");
         }
 
         $batchTitlesList.toggleClass(closedClass);
     });
 
     function prepareBatchListing() {
-        $batchTitlesList.html('');
-        $batchTitleCount.html('');
+        $batchTitlesList.html("");
+        $batchTitleCount.html("");
         $batchTitlesList.addClass(closedClass);
-        $toggleBatchList.html('Show');
+        $toggleBatchList.html("Show");
 
         let selectedIDs = [];
 
-        $checkbox.filter(':checked').each(function () {
-            const href = $(this).parents('tr').find('.js-title').find('a').attr('href');
-            const title = $(this).parents('tr').find('.js-title').data('title-tooltip');
+        $checkbox.filter(":checked").each(function () {
+            const link = $(this).parents("tr").find(".js-title").find("a");
+            const href = link.attr("href");
+            const title = link.data("tippy-content");
 
             $batchTitlesList.append(`
                 <a href="${href}" class="list-reveal__item" target="_blank" rel="noopener noreferrer" title="${title}">
@@ -110,53 +108,59 @@
                     <svg class="list-reveal__open-icon"><use xlink:href="#open-in-new-tab"></use></svg>
                 </a>
             `);
-            selectedIDs.push($(this).parents('tr').data('record-id'));
+            selectedIDs.push($(this).parents("tr").data("record-id"));
         });
 
         $batchTitleCount.append(`${selectedIDs.length} submissions selected`);
-        $hiddenIDlist.val(selectedIDs.join(','));
+        $hiddenIDlist.val(selectedIDs.join(","));
     }
 
     function updateProgressButton() {
-        var actions = $actionOptions.map(function () { return this.value; }).get();
-        $checkbox.filter(':checked').each(function () {
-            let newActions = $(this).parents('tr').find('.js-actions').data('actions');
-            actions = actions.filter(action => newActions.includes(action));
+        var actions = $actionOptions
+            .map(function () {
+                return this.value;
+            })
+            .get();
+        $checkbox.filter(":checked").each(function () {
+            let newActions = $(this)
+                .parents("tr")
+                .find(".js-actions")
+                .data("actions");
+            actions = actions.filter((action) => newActions.includes(action));
         });
         $actionOptions.each(function () {
             if (!actions.includes(this.value)) {
-                $(this).attr('disabled', 'disabled');
-            }
-            else {
-                $(this).removeAttr('disabled');
+                $(this).attr("disabled", "disabled");
+            } else {
+                $(this).removeAttr("disabled");
             }
         });
-        $actionOptions.filter(':enabled:first').prop('selected', true);
+        $actionOptions.filter(":enabled:first").prop("selected", true);
         if (actions.length === 0) {
-            $batchProgress.attr('disabled', 'disabled');
-            $batchProgress.attr('data-tooltip', "Status changes can't be applied to submissions with this combination of statuses");
-        }
-        else {
-            $batchProgress.removeAttr('disabled');
-            $batchProgress.removeAttr('data-tooltip');
+            $batchProgress.attr("disabled", "disabled");
+            $batchProgress.attr(
+                "data-tooltip",
+                "Status changes can't be applied to submissions with this combination of statuses"
+            );
+        } else {
+            $batchProgress.removeAttr("disabled");
+            $batchProgress.removeAttr("data-tooltip");
         }
     }
 
-
     function toggleBatchActions() {
-        if ($('.js-batch-select:checked').length) {
+        if ($(".js-batch-select:checked").length) {
             $body.addClass(activeClass);
-        }
-        else {
+        } else {
             $body.removeClass(activeClass);
         }
     }
 
     function updateCount() {
-        $('.js-total-actions').html($('.js-batch-select:checked').length);
+        $(".js-total-actions").html($(".js-batch-select:checked").length);
     }
 
     function resetCheckAllInput() {
-        $allCheckboxInput.prop('checked', false);
+        $allCheckboxInput.prop("checked", false);
     }
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/deliverables.js b/hypha/static_src/src/javascript/apply/deliverables.js
index 3d1e86778cd091e1753b33776c254bef8a11a624..daaed1162607d8c27f4bae3a06f7503eeb8a0662 100644
--- a/hypha/static_src/src/javascript/apply/deliverables.js
+++ b/hypha/static_src/src/javascript/apply/deliverables.js
@@ -1,83 +1,137 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('#deliverables').on('change', function (e) {
+    $("#deliverables").on("change", function (e) {
         e.preventDefault();
-        var $selected = $(this).find('option:selected');
-        $('.available-to-invoice').find('.availablequantity').remove();
-        var availabletoinvoice = $selected.data('availabletoinvoice');
+        var $selected = $(this).find("option:selected");
+        $(".available-to-invoice").find(".availablequantity").remove();
+        var availabletoinvoice = $selected.data("availabletoinvoice");
         if (availabletoinvoice) {
-            $('.available-to-invoice').append('<b class="availablequantity">' + availabletoinvoice + '</b>');
+            $(".available-to-invoice").append(
+                '<b class="availablequantity">' + availabletoinvoice + "</b>"
+            );
         }
     });
 
-    $('#add-deliverables').on('submit', function (event) {
+    $("#add-deliverables").on("submit", function (event) {
         event.preventDefault();
 
         var $form = $(this);
-        var projectid = $form.data('projectid');
-        var invoiceid = $form.data('invoiceid');
-        var deliverableid = $('#deliverables').val();
+        var projectid = $form.data("projectid");
+        var invoiceid = $form.data("invoiceid");
+        var deliverableid = $("#deliverables").val();
         var quantity = $form.find('input[name="quantity"]').val();
         if (!quantity) {
             quantity = 1;
         }
         $.ajax({
-            url: '/api/v1/projects/' + projectid + '/invoices/' + invoiceid + '/deliverables/',
-            type: 'POST',
-            data: {id: deliverableid, quantity: quantity},
+            url:
+                "/api/v1/projects/" +
+                projectid +
+                "/invoices/" +
+                invoiceid +
+                "/deliverables/",
+            type: "POST",
+            data: { id: deliverableid, quantity: quantity },
             success: function (json) {
-                $('#add-deliverables').find('.error').remove();
-                $('#list-deliverables').find('.deliverables').remove();
-                $('#list-deliverables').find('.total').remove();
+                $("#add-deliverables").find(".error").remove();
+                $("#list-deliverables").find(".deliverables").remove();
+                $("#list-deliverables").find(".total").remove();
                 var deliverables = $('<div class="deliverables"></div>');
                 var deliverable_items = json.deliverables;
                 $.each(deliverable_items, function (i) {
-                    var url = '/api/v1/projects/' + deliverable_items[i]['project_id'] + '/invoices/' + deliverable_items[i]['invoice_id'] + '/deliverables/';
-                    var deliverable = $('<b>' + deliverable_items[i]['deliverable']['name'] + ' (' + deliverable_items[i]['quantity'] + ' $' + deliverable_items[i]['deliverable']['unit_price'] + ')</b><a href="' + url + deliverable_items[i]['id'] + '/"> Remove</a><br>');
+                    var url =
+                        "/api/v1/projects/" +
+                        deliverable_items[i]["project_id"] +
+                        "/invoices/" +
+                        deliverable_items[i]["invoice_id"] +
+                        "/deliverables/";
+                    var deliverable = $(
+                        "<b>" +
+                            deliverable_items[i]["deliverable"]["name"] +
+                            " (" +
+                            deliverable_items[i]["quantity"] +
+                            " $" +
+                            deliverable_items[i]["deliverable"]["unit_price"] +
+                            ')</b><a href="' +
+                            url +
+                            deliverable_items[i]["id"] +
+                            '/"> Remove</a><br>'
+                    );
                     $(deliverables).append(deliverable);
                 });
-                $('#list-deliverables').append(deliverables);
+                $("#list-deliverables").append(deliverables);
                 if (json.total) {
-                    var total = $('<div class="total"><b>...</b><br><b>Total: $' + json.total + '</b></div>');
-                    $('#list-deliverables').append(total);
+                    var total = $(
+                        '<div class="total"><b>...</b><br><b>Total: $' +
+                            json.total +
+                            "</b></div>"
+                    );
+                    $("#list-deliverables").append(total);
                 }
             },
             error: function (json) {
-                $('#add-deliverables').find('.error').remove();
-                var errorText = $('<p class="error" style="color:red">' + json.responseJSON.detail + '</p>');
-                $('#add-deliverables').append(errorText);
-            }
+                $("#add-deliverables").find(".error").remove();
+                var errorText = $(
+                    '<p class="error" style="color:red">' +
+                        json.responseJSON.detail +
+                        "</p>"
+                );
+                $("#add-deliverables").append(errorText);
+            },
         });
     });
-    $('#list-deliverables').on('click', 'a', function (event) {
+    $("#list-deliverables").on("click", "a", function (event) {
         event.preventDefault();
         $.ajax({
-            url: $(this).attr('href'),
-            type: 'DELETE',
+            url: $(this).attr("href"),
+            type: "DELETE",
             success: function (json) {
-                $('#add-deliverables').find('.error').remove();
-                $('#list-deliverables').find('.deliverables').remove();
-                $('#list-deliverables').find('.total').remove();
+                $("#add-deliverables").find(".error").remove();
+                $("#list-deliverables").find(".deliverables").remove();
+                $("#list-deliverables").find(".total").remove();
                 var deliverables = $('<div class="deliverables"></div>');
                 var deliverable_items = json.deliverables;
                 $.each(deliverable_items, function (i) {
-                    var url = '/api/v1/projects/' + deliverable_items[i]['project_id'] + '/invoices/' + deliverable_items[i]['invoice_id'] + '/deliverables/';
-                    var deliverable = $('<b>' + deliverable_items[i]['deliverable']['name'] + ' (' + deliverable_items[i]['quantity'] + ' $' + deliverable_items[i]['deliverable']['unit_price'] + ')</b><a href="' + url + deliverable_items[i]['id'] + '/"> Remove</a><br>');
+                    var url =
+                        "/api/v1/projects/" +
+                        deliverable_items[i]["project_id"] +
+                        "/invoices/" +
+                        deliverable_items[i]["invoice_id"] +
+                        "/deliverables/";
+                    var deliverable = $(
+                        "<b>" +
+                            deliverable_items[i]["deliverable"]["name"] +
+                            " (" +
+                            deliverable_items[i]["quantity"] +
+                            " $" +
+                            deliverable_items[i]["deliverable"]["unit_price"] +
+                            ')</b><a href="' +
+                            url +
+                            deliverable_items[i]["id"] +
+                            '/"> Remove</a><br>'
+                    );
                     $(deliverables).append(deliverable);
                 });
-                $('#list-deliverables').append(deliverables);
+                $("#list-deliverables").append(deliverables);
                 if (json.total) {
-                    var total = $('<div class="total"><b>...</b><br><b>Total: $' + json.total + '</b></div>');
-                    $('#list-deliverables').append(total);
+                    var total = $(
+                        '<div class="total"><b>...</b><br><b>Total: $' +
+                            json.total +
+                            "</b></div>"
+                    );
+                    $("#list-deliverables").append(total);
                 }
             },
             error: function (json) {
-                $('#add-deliverables').find('.error').remove();
-                var errorText = $('<p class="error" style="color:red">' + json.responseJSON.detail + '</p>');
-                $('#add-deliverables').append(errorText);
-            }
+                $("#add-deliverables").find(".error").remove();
+                var errorText = $(
+                    '<p class="error" style="color:red">' +
+                        json.responseJSON.detail +
+                        "</p>"
+                );
+                $("#add-deliverables").append(errorText);
+            },
         });
     });
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/determination-template.js b/hypha/static_src/src/javascript/apply/determination-template.js
index 7c5ba6c6ef761f934a6092b617a07673e8c3ef2f..a9cfb0c114e48a3fd2b8696f37f039d96affb56a 100644
--- a/hypha/static_src/src/javascript/apply/determination-template.js
+++ b/hypha/static_src/src/javascript/apply/determination-template.js
@@ -1,11 +1,12 @@
 (function () {
-
-    'use strict';
-    const field_blocks_ids = JSON.parse(document.getElementById('block-ids').textContent);
+    "use strict";
+    const field_blocks_ids = JSON.parse(
+        document.getElementById("block-ids").textContent
+    );
 
     let DeterminationCopy = class {
         static selector() {
-            return ('#id_' + field_blocks_ids['determination']);
+            return "#id_" + field_blocks_ids["determination"];
         }
 
         constructor(node) {
@@ -14,29 +15,37 @@
         }
 
         bindEventListeners() {
-            this.node.addEventListener('change', (e) => {
-                this.getMatchingCopy(e.target.value);
-            }, false);
+            this.node.addEventListener(
+                "change",
+                (e) => {
+                    this.getMatchingCopy(e.target.value);
+                },
+                false
+            );
         }
 
         getMatchingCopy(value) {
-            const proposal_form = document.querySelector('#id_proposal_form');
-            if (value === '0') {
-                this.text = document.querySelector('div[data-type="rejected"]').textContent;
+            const proposal_form = document.querySelector("#id_proposal_form");
+            if (value === "0") {
+                this.text = document.querySelector(
+                    'div[data-type="rejected"]'
+                ).textContent;
                 if (proposal_form) {
                     proposal_form.disabled = true;
                     proposal_form.required = false;
                 }
-            }
-            else if (value === '1') {
-                this.text = document.querySelector('div[data-type="more_info"]').textContent;
+            } else if (value === "1") {
+                this.text = document.querySelector(
+                    'div[data-type="more_info"]'
+                ).textContent;
                 if (proposal_form) {
                     proposal_form.disabled = true;
                     proposal_form.required = false;
                 }
-            }
-            else {
-                this.text = document.querySelector('div[data-type="accepted"]').textContent;
+            } else {
+                this.text = document.querySelector(
+                    'div[data-type="accepted"]'
+                ).textContent;
                 if (proposal_form) {
                     proposal_form.disabled = false;
                     proposal_form.required = true;
@@ -46,13 +55,19 @@
         }
 
         updateTextArea(text) {
-            this.message_box = document.querySelector('#id_' + field_blocks_ids['message'] + '_ifr');
-            this.message_box.contentDocument.getElementsByTagName('body')[0].innerHTML = text;
+            this.message_box = document.querySelector(
+                "#id_" + field_blocks_ids["message"] + "_ifr"
+            );
+            this.message_box.contentDocument.getElementsByTagName(
+                "body"
+            )[0].innerHTML = text;
         }
     };
 
-    document.querySelectorAll(DeterminationCopy.selector()).forEach(el => {
+    document.querySelectorAll(DeterminationCopy.selector()).forEach((el) => {
         new DeterminationCopy(el);
     });
-
+    window.addEventListener("load", function (event) {
+        document.querySelector("#id_proposal_form").disabled = true;
+    });
 })();
diff --git a/hypha/static_src/src/javascript/apply/document-category.js b/hypha/static_src/src/javascript/apply/document-category.js
index f220388d39bc3ed90b34e8f81300851d569d8565..7069d9fa4b07f4a228c794fbf66275f94f60843a 100644
--- a/hypha/static_src/src/javascript/apply/document-category.js
+++ b/hypha/static_src/src/javascript/apply/document-category.js
@@ -1,7 +1,8 @@
 // eslint-disable-next-line no-unused-vars
 function handleCategory(category) {
-    'use strict';
+    "use strict";
 
-    document.getElementById('id_category').value = category;
-    document.getElementsByClassName('form__group id_category')[0].hidden = 'true';
+    document.getElementById("id_category").value = category;
+    document.getElementsByClassName("form__group id_category")[0].hidden =
+        "true";
 }
diff --git a/hypha/static_src/src/javascript/apply/dropdown.js b/hypha/static_src/src/javascript/apply/dropdown.js
index 0c824d1e17b5b14f03cc1ebc5495c8b85c1e15b8..8b127c8ac4e0ffd760e4c93ffd08d413ae3e442d 100644
--- a/hypha/static_src/src/javascript/apply/dropdown.js
+++ b/hypha/static_src/src/javascript/apply/dropdown.js
@@ -2,18 +2,18 @@
     // Add 'data-dropdown-target' attr to dropdown button in html and set its value as id of the dropdown content.
     // For example look at its usage in project_simplified_detail.html
 
-    'use strict';
+    "use strict";
 
-    var dropdownButton = $('[data-dropdown-target]');
-    dropdownButton.on('click', function () {
+    var dropdownButton = $("[data-dropdown-target]");
+    dropdownButton.on("click", function () {
         // toggle 'show' class whenever dropdown button is getting clicked
-        $($(this).attr('data-dropdown-target')).toggleClass('show');
+        $($(this).attr("data-dropdown-target")).toggleClass("show");
     });
 
     // Close the dropdown menu if the user clicks outside of it
-    window.addEventListener('click', function (event) {
-        if (!event.target.matches('[data-dropdown-target]')) {
-            $(dropdownButton.attr('data-dropdown-target')).removeClass('show');
+    window.addEventListener("click", function (event) {
+        if (!event.target.matches("[data-dropdown-target]")) {
+            $(dropdownButton.attr("data-dropdown-target")).removeClass("show");
         }
     });
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/edit-comment.js b/hypha/static_src/src/javascript/apply/edit-comment.js
index 03cee852a5129b773cb8b8a0dec5279085d98477..ae1270d75254bd5d218730da36eb31e722cd9d87 100644
--- a/hypha/static_src/src/javascript/apply/edit-comment.js
+++ b/hypha/static_src/src/javascript/apply/edit-comment.js
@@ -1,18 +1,17 @@
 (function ($) {
-
-    'use strict';
-
-    const comment = '.js-comment';
-    const pageDown = '.js-pagedown';
-    const feedMeta = '.js-feed-meta';
-    const editBlock = '.js-edit-block';
-    const lastEdited = '.js-last-edited';
-    const commentVisibility = '.js-comment-visibility';
-    const editButton = '.js-edit-comment';
-    const feedContent = '.js-feed-content';
-    const commentError = '.js-comment-error';
-    const cancelEditButton = '.js-cancel-edit';
-    const submitEditButton = '.js-submit-edit';
+    "use strict";
+
+    const comment = ".js-comment";
+    const pageDown = ".js-pagedown";
+    const feedMeta = ".js-feed-meta";
+    const editBlock = ".js-edit-block";
+    const lastEdited = ".js-last-edited";
+    const commentVisibility = ".js-comment-visibility";
+    const editButton = ".js-edit-comment";
+    const feedContent = ".js-feed-content";
+    const commentError = ".js-comment-error";
+    const cancelEditButton = ".js-cancel-edit";
+    const submitEditButton = ".js-submit-edit";
 
     // handle edit
     $(editButton).click(function (e) {
@@ -22,9 +21,11 @@
 
         const editBlockWrapper = $(this).closest(feedContent).find(editBlock);
         const commentWrapper = $(this).closest(feedContent).find(comment);
-        const commentContents = $(commentWrapper).attr('data-comment');
-        const visibilityOptions = $.parseJSON($(commentWrapper).attr('data-visibility-options'));
-        const currentVisibility = $(commentWrapper).attr('data-visibility');
+        const commentContents = $(commentWrapper).attr("data-comment");
+        const visibilityOptions = $.parseJSON(
+            $(commentWrapper).attr("data-visibility-options")
+        );
+        const currentVisibility = $(commentWrapper).attr("data-visibility");
 
         // hide the edit link and original comment
         $(this).parent().hide();
@@ -41,9 +42,9 @@
         `;
 
         const radioButtonsDiv = '<div id="edit-comment-visibility"></div>';
-        let key = '';
-        let label = '';
-        let radioButtons = '';
+        let key = "";
+        let label = "";
+        let radioButtons = "";
 
         $.each(visibilityOptions, function (idx, value) {
             key = value[0];
@@ -63,15 +64,15 @@
         // add the comment to the editor
         const markupEditor = $(markup).append(radioButtonsDiv).append(buttons);
         $(editBlockWrapper).append(markupEditor);
-        $('#edit-comment-visibility').html(radioButtons);
-        $(`#visible-to-${currentVisibility}`).prop('checked', true); // ensure current visibility is checked
+        $("#edit-comment-visibility").html(radioButtons);
+        $(`#visible-to-${currentVisibility}`).prop("checked", true); // ensure current visibility is checked
 
         // run the editor
         initEditor();
     });
 
     // handle cancel
-    $(document).on('click', cancelEditButton, function () {
+    $(document).on("click", cancelEditButton, function () {
         showComment(this);
         showEditButton(this);
         hidePageDownEditor(this);
@@ -81,62 +82,94 @@
     });
 
     // handle submit
-    $(document).on('click', submitEditButton, function () {
+    $(document).on("click", submitEditButton, function () {
         const commentContainer = $(this).closest(editBlock).siblings(comment);
-        const editedComment = $(this).closest(pageDown).find('.wmd-preview').html();
-        const editedVisibility = $('input[name="radio-visibility"]:checked').val();
-        const commentMD = $(this).closest(editBlock).find('textarea').val();
-        const editUrl = $(commentContainer).attr('data-edit-url');
+        const editedComment = $(this)
+            .closest(pageDown)
+            .find(".wmd-preview")
+            .html();
+        const editedVisibility = $(
+            'input[name="radio-visibility"]:checked'
+        ).val();
+        const commentMD = $(this).closest(editBlock).find("textarea").val();
+        const editUrl = $(commentContainer).attr("data-edit-url");
 
         fetch(editUrl, {
-            method: 'POST',
+            method: "POST",
             headers: {
-                'Content-Type': 'application/json',
-                'X-CSRFToken': window.Cookies.get('csrftoken')
+                "Content-Type": "application/json",
+                "X-CSRFToken": window.Cookies.get("csrftoken"),
             },
             body: JSON.stringify({
                 message: editedComment,
-                visibility: editedVisibility
+                visibility: editedVisibility,
+            }),
+        })
+            .then((response) => {
+                if (!response.ok) {
+                    const error = Object.assign({}, response, {
+                        status: response.status,
+                        statusText: response.statusText,
+                    });
+                    return Promise.reject(error);
+                }
+                return response.json();
             })
-        }).then(response => {
-            if (!response.ok) {
-                const error = Object.assign({}, response, {
-                    status: response.status,
-                    statusText: response.statusText
-                });
-                return Promise.reject(error);
-            }
-            return response.json();
-        }).then(data => {
-            updateComment(commentContainer, data.id, data.message, data.visibility, data.edit_url, commentMD);
-            updateVisibility(this, data.visibility);
-            updateLastEdited(this, data.edited);
-            showComment(this);
-            showEditButton(this);
-            hidePageDownEditor(this);
-        }).catch((error) => {
-            if (error.status === 404) {
-                handleError(this, 'Update unsuccessful. This comment has been edited elsewhere. To get the latest updates please refresh the page, but note any unsaved changes will be lost by doing so.');
-            }
-            else {
-                handleError(this, 'An error has occured. Please try again later.');
-            }
-        });
+            .then((data) => {
+                updateComment(
+                    commentContainer,
+                    data.id,
+                    data.message,
+                    data.visibility,
+                    data.edit_url,
+                    commentMD
+                );
+                updateVisibility(this, data.visibility);
+                updateLastEdited(this, data.edited);
+                showComment(this);
+                showEditButton(this);
+                hidePageDownEditor(this);
+            })
+            .catch((error) => {
+                if (error.status === 404) {
+                    handleError(
+                        this,
+                        "Update unsuccessful. This comment has been edited elsewhere. To get the latest updates please refresh the page, but note any unsaved changes will be lost by doing so."
+                    );
+                } else {
+                    handleError(
+                        this,
+                        "An error has occured. Please try again later."
+                    );
+                }
+            });
     });
 
     const handleError = (el, message) => {
-        $(el).closest(editBlock).append(`<p class="wrapper--error js-comment-error">${message}</p>`);
-        $(el).attr('disabled', true);
+        $(el)
+            .closest(editBlock)
+            .append(
+                `<p class="wrapper--error js-comment-error">${message}</p>`
+            );
+        $(el).attr("disabled", true);
     };
 
     const initEditor = () => {
         const converterOne = window.Markdown.getSanitizingConverter();
-        const commentEditor = new window.Markdown.Editor(converterOne, '-edit-comment');
+        const commentEditor = new window.Markdown.Editor(
+            converterOne,
+            "-edit-comment"
+        );
         commentEditor.run();
     };
 
     const showEditButton = (el) => {
-        $(el).closest(editBlock).siblings(feedMeta).find(editButton).parent().show();
+        $(el)
+            .closest(editBlock)
+            .siblings(feedMeta)
+            .find(editButton)
+            .parent()
+            .show();
     };
 
     const hidePageDownEditor = (el) => {
@@ -148,29 +181,56 @@
     };
 
     const updateVisibility = (el, visibility) => {
-        if (visibility !== 'all') {
-            $(el).closest(feedContent).find(commentVisibility).parent().attr('hidden', false);
+        if (visibility !== "all") {
+            $(el)
+                .closest(feedContent)
+                .find(commentVisibility)
+                .parent()
+                .attr("hidden", false);
             $(el).closest(feedContent).find(commentVisibility).text(visibility);
-        }
-        else {
-            $(el).closest(feedContent).find(commentVisibility).parent().attr('hidden', true);
-            $(el).closest(feedContent).find(commentVisibility).html(`${visibility}`);
+        } else {
+            $(el)
+                .closest(feedContent)
+                .find(commentVisibility)
+                .parent()
+                .attr("hidden", true);
+            $(el)
+                .closest(feedContent)
+                .find(commentVisibility)
+                .html(`${visibility}`);
         }
     };
 
     const updateLastEdited = (el, date) => {
-        const parsedDate = new Date(date).toISOString().split('T')[0];
-        const time = new Date(date).toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
-        $(el).closest(feedContent).find(lastEdited).parent().attr('hidden', false);
-        $(el).closest(feedContent).find(lastEdited).html(`${parsedDate} ${time}`);
+        const parsedDate = new Date(date).toISOString().split("T")[0];
+        const time = new Date(date).toLocaleTimeString([], {
+            hour: "2-digit",
+            minute: "2-digit",
+        });
+        $(el)
+            .closest(feedContent)
+            .find(lastEdited)
+            .parent()
+            .attr("hidden", false);
+        $(el)
+            .closest(feedContent)
+            .find(lastEdited)
+            .html(`${parsedDate} ${time}`);
     };
 
-    const updateComment = (el, id, comment, visibility, editUrl, commentMarkdown) => {
+    const updateComment = (
+        el,
+        id,
+        comment,
+        visibility,
+        editUrl,
+        commentMarkdown
+    ) => {
         $(el).html(comment);
-        $(el).attr('data-id', id);
-        $(el).attr('data-edit-url', editUrl);
-        $(el).attr('data-comment', commentMarkdown);
-        $(el).attr('data-visibility', visibility);
+        $(el).attr("data-id", id);
+        $(el).attr("data-edit-url", editUrl);
+        $(el).attr("data-comment", commentMarkdown);
+        $(el).attr("data-visibility", visibility);
     };
 
     const closeAllEditors = () => {
@@ -181,11 +241,11 @@
 
     const hideError = () => $(commentError).remove();
 
-    window.addEventListener('beforeunload', (e) => {
+    window.addEventListener("beforeunload", (e) => {
         if ($(submitEditButton).length) {
             e.preventDefault();
-            e.returnValue = 'It looks like you\'re still editing a comment. Are you sure you want to leave?';
+            e.returnValue =
+                "It looks like you're still editing a comment. Are you sure you want to leave?";
         }
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/fancybox-global.js b/hypha/static_src/src/javascript/apply/fancybox-global.js
index 25d6425910cebdcf33e1a5d4643a91c412d3827d..a4b6374c32585c2de2dda0f2cdfcfa1c0811880d 100644
--- a/hypha/static_src/src/javascript/apply/fancybox-global.js
+++ b/hypha/static_src/src/javascript/apply/fancybox-global.js
@@ -1,37 +1,35 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('[data-fancybox]').fancybox({
+    $("[data-fancybox]").fancybox({
         animationDuration: 350,
-        animationEffect: 'fade',
+        animationEffect: "fade",
         afterClose: function () {
-            if ($('.django-select2-checkboxes').length) {
-                $('.django-select2-checkboxes').select2('close');
+            if ($(".django-select2-checkboxes").length) {
+                $(".django-select2-checkboxes").select2("close");
             }
-        }
+        },
     });
 
     // Close any open select2 dropdowns when inside a modal
-    $('.modal').click((e) => {
-        if (e.target.classList.contains('select2-selection__rendered')) {
+    $(".modal").click((e) => {
+        if (e.target.classList.contains("select2-selection__rendered")) {
             return;
         }
-        if ($('.django-select2-checkboxes').length) {
-            $('.django-select2-checkboxes').select2('close');
+        if ($(".django-select2-checkboxes").length) {
+            $(".django-select2-checkboxes").select2("close");
         }
     });
 
     $(document).ready(
-        $('.modal').each((idx, element) => {
+        $(".modal").each((idx, element) => {
             var modal = $(element);
-            var error = modal.has('.errorlist');
+            var error = modal.has(".errorlist");
             if (error.length) {
-                const modalID = modal.attr('id');
+                const modalID = modal.attr("id");
                 const buttonTrigger = $(`[data-src="#${modalID}"]`);
                 buttonTrigger[0].click();
             }
         })
     );
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/file-uploads.js b/hypha/static_src/src/javascript/apply/file-uploads.js
index 138f92abf6d64aad79adb510c046421b65d4ac8a..3b91e992255b4d09f51df6def9c7c0332dad5db8 100644
--- a/hypha/static_src/src/javascript/apply/file-uploads.js
+++ b/hypha/static_src/src/javascript/apply/file-uploads.js
@@ -1,41 +1,48 @@
 jQuery(function ($) {
-    'use strict';
+    "use strict";
 
     // Initialize django-file-form
-    $('form').get().forEach(function (form) {
-        // Prevent initilising it multiple times and run it for forms
-        // that have a `form_id` field added by django-file-form.
-        if (!form.initUploadFieldsDone && form.querySelector('[name=form_id]')) {
-            init(form);
-            form.initUploadFieldsDone = true;
-        }
-        if (!form.initUploadFieldsDone && form.querySelector('[name=create_vendor_view-current_step]')) {
-            initWizard(form);
-            form.initUploadFieldsDone = true;
-        }
-    });
+    $("form")
+        .get()
+        .forEach(function (form) {
+            // Prevent initilising it multiple times and run it for forms
+            // that have a `form_id` field added by django-file-form.
+            if (
+                !form.initUploadFieldsDone &&
+                form.querySelector("[name=form_id]")
+            ) {
+                init(form);
+                form.initUploadFieldsDone = true;
+            }
+            if (
+                !form.initUploadFieldsDone &&
+                form.querySelector("[name=create_vendor_view-current_step]")
+            ) {
+                initWizard(form);
+                form.initUploadFieldsDone = true;
+            }
+        });
 
     function init(form) {
-        if ($('.form__group--file').length) {
+        if ($(".form__group--file").length) {
             window.initUploadFields(form);
 
             // Hide wrapper elements for hidden inputs added by django-file-form
-            $('input[type=hidden]').closest('.form__group').hide();
+            $("input[type=hidden]").closest(".form__group").hide();
         }
     }
 
     // Initilise multi-step wizard forms
     function initWizard(form) {
-        const step = form.querySelector('[name=create_vendor_view-current_step]').value;
-        if (step === 'documents') {
-            window.initUploadFields(
-                form,
-                {
-                    prefix: 'documents'
-                }
-            );
+        const step = form.querySelector(
+            "[name=create_vendor_view-current_step]"
+        ).value;
+        if (step === "documents") {
+            window.initUploadFields(form, {
+                prefix: "documents",
+            });
             // Hide wrapper elements for hidden inputs added by django-file-form
-            $('input[type=hidden]').closest('.form__group').hide();
+            $("input[type=hidden]").closest(".form__group").hide();
         }
     }
 });
diff --git a/hypha/static_src/src/javascript/apply/flag.js b/hypha/static_src/src/javascript/apply/flag.js
index 932622b582da6ea26d9931ce63d774060f1db262..f9a7fdf609da693e8654af4af59f73568831eee5 100644
--- a/hypha/static_src/src/javascript/apply/flag.js
+++ b/hypha/static_src/src/javascript/apply/flag.js
@@ -1,34 +1,41 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('.flagged-table').find('.all-submissions-table__parent').each(function () {
-        var $flagged_item = $(this);
-        var submission_id = $flagged_item.data('record-id');
-        var flag_type = $flagged_item.data('flag-type');
-        var $button = '<span class="button--float"><button class="button button--flag button--unflag flagged" data-id="' + submission_id + '" data-type="' + flag_type + '">Flag</button></span>';
-        $flagged_item.find('td.comments').css('position', 'relative').append($button);
-    });
+    $(".flagged-table")
+        .find(".all-submissions-table__parent")
+        .each(function () {
+            var $flagged_item = $(this);
+            var submission_id = $flagged_item.data("record-id");
+            var flag_type = $flagged_item.data("flag-type");
+            var $button =
+                '<span class="button--float"><button class="button button--flag button--unflag flagged" data-id="' +
+                submission_id +
+                '" data-type="' +
+                flag_type +
+                '">Flag</button></span>';
+            $flagged_item
+                .find("td.comments")
+                .css("position", "relative")
+                .append($button);
+        });
 
-    $('.button--flag').on('click', function (e) {
+    $(".button--flag").on("click", function (e) {
         e.preventDefault();
 
         var $current = $(this);
-        var id = $current.data('id');
-        var type = $current.data('type');
+        var id = $current.data("id");
+        var type = $current.data("type");
 
         $.ajax({
-            url: '/apply/submissions/' + id + '/' + type + '/flag/',
-            type: 'POST',
+            url: "/apply/submissions/" + id + "/" + type + "/flag/",
+            type: "POST",
             success: function (json) {
                 if (json.result) {
-                    $current.addClass('flagged');
+                    $current.addClass("flagged");
+                } else {
+                    $current.removeClass("flagged");
                 }
-                else {
-                    $current.removeClass('flagged');
-                }
-            }
+            },
         });
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/form-group-toggle.js b/hypha/static_src/src/javascript/apply/form-group-toggle.js
index 4c1c6d2599493a6ceda3f906a71f9e24cfdb8787..8035cf70f590d7da2ab8276ef995b3958dae35b9 100644
--- a/hypha/static_src/src/javascript/apply/form-group-toggle.js
+++ b/hypha/static_src/src/javascript/apply/form-group-toggle.js
@@ -1,47 +1,59 @@
+/* eslint-disable no-loop-func */
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     var i;
     for (i = 2; i < 20; i++) {
-        var $field_group = $('.field-group-' + i);
+        var $field_group = $(".field-group-" + i);
         if ($field_group.length) {
-            var classes = 'field-group-wrapper field-group-wrapper-' + i;
-            $field_group.each(function () { // eslint-disable-line no-loop-func
-                if ($(this).data('hidden') && classes.indexOf('js-hidden') === -1) {
-                    classes += ' js-hidden';
+            var classes = "field-group-wrapper field-group-wrapper-" + i;
+            $field_group.each(function () {
+                if (
+                    $(this).data("hidden") &&
+                    classes.indexOf("js-hidden") === -1
+                ) {
+                    classes += " js-hidden";
                 }
             });
             $field_group.wrapAll('<div class="' + classes + '" />');
-        }
-        else {
+        } else {
             break;
         }
     }
 
-    $('.form-fields-grouper input[type="radio"]').on('change', function () {
+    $('.form-fields-grouper input[type="radio"]').on("change", function () {
         var radio_input_value = $(this).val();
-        var fields_grouper_div = this.closest('.form-fields-grouper');
-        var fields_grouper_for = $(fields_grouper_div).data('grouper-for');
-        var group_toggle_on_value = $(fields_grouper_div).data('toggle-on');
-        var group_toggle_off_value = $(fields_grouper_div).data('toggle-off');
+        var fields_grouper_div = this.closest(".form-fields-grouper");
+        var fields_grouper_for = $(fields_grouper_div).data("grouper-for");
+        var group_toggle_on_value = $(fields_grouper_div).data("toggle-on");
+        var group_toggle_off_value = $(fields_grouper_div).data("toggle-off");
 
         if (radio_input_value === group_toggle_on_value) {
-            $('.field-group-wrapper-' + fields_grouper_for).removeClass('js-hidden').addClass('highlighted');
-            $('.field-group-' + fields_grouper_for).each(function () { // eslint-disable-line no-loop-func
-                if ($(this).data('required') === 'True') {
-                    $(this).children('.form__item').children().attr('required', true);
-                    $(this).children('label').append('<span class="form__required">*</span>');
+            $(".field-group-wrapper-" + fields_grouper_for)
+                .removeClass("js-hidden")
+                .addClass("highlighted");
+            $(".field-group-" + fields_grouper_for).each(function () {
+                if ($(this).data("required") === "True") {
+                    $(this)
+                        .children(".form__item")
+                        .children()
+                        .attr("required", true);
+                    $(this)
+                        .children("label")
+                        .append('<span class="form__required">*</span>');
                 }
             });
-        }
-        else if (radio_input_value === group_toggle_off_value) {
-            $('.field-group-wrapper-' + fields_grouper_for).removeClass('highlighted').addClass('js-hidden');
-            $('.field-group-' + fields_grouper_for).each(function () { // eslint-disable-line no-loop-func
-                $(this).children('.form__item').children().attr('required', false);
-                $(this).children('label').children('.form__required').remove();
+        } else if (radio_input_value === group_toggle_off_value) {
+            $(".field-group-wrapper-" + fields_grouper_for)
+                .removeClass("highlighted")
+                .addClass("js-hidden");
+            $(".field-group-" + fields_grouper_for).each(function () {
+                $(this)
+                    .children(".form__item")
+                    .children()
+                    .attr("required", false);
+                $(this).children("label").children(".form__required").remove();
             });
         }
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/multi-input-fields.js b/hypha/static_src/src/javascript/apply/multi-input-fields.js
index c015a55d02428a0519dff0fc2494efa0880d414e..f64a74b1c2665817473360ae0d0c3b04bf6fef2b 100644
--- a/hypha/static_src/src/javascript/apply/multi-input-fields.js
+++ b/hypha/static_src/src/javascript/apply/multi-input-fields.js
@@ -1,38 +1,45 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Visibility Index is set to 0 initially in the backend. But in case of edit application forms
     // with multiple values already set, we need to update it. The visibility index helps
     // to get the next field from the list of hidden inputs to be shown to an applicant on clicking the add button.
     // For example, a total of 5 multiple inputs, 3 values are already set by applicant while creating a submission.
     // On edit form, the visibility index should be updates so when the user clicks add, the 4th input should be displayed.
-    $('.multi-input-add-btn').each(function () {
-        var multiFieldId = $(this).data('multi-field-id');
-        const multiMaxIndex = $(this).data('multi-max-index');
-        var multiFieldInputs = $(".form__item[data-multi-field-for='" + multiFieldId + "']");
-        var multiFieldHiddenInput = $(".form__item.multi-input-field-hidden[data-multi-field-for='" + multiFieldId + "']");
-        var multiVisibilityIndex = multiFieldInputs.index(multiFieldHiddenInput);
+    $(".multi-input-add-btn").each(function () {
+        var multiFieldId = $(this).data("multi-field-id");
+        const multiMaxIndex = $(this).data("multi-max-index");
+        var multiFieldInputs = $(
+            ".form__item[data-multi-field-for='" + multiFieldId + "']"
+        );
+        var multiFieldHiddenInput = $(
+            ".form__item.multi-input-field-hidden[data-multi-field-for='" +
+                multiFieldId +
+                "']"
+        );
+        var multiVisibilityIndex = multiFieldInputs.index(
+            multiFieldHiddenInput
+        );
         if (multiVisibilityIndex >= 0) {
-            $(this).data('multi-visibility-index', multiVisibilityIndex);
-        }
-        else if (multiVisibilityIndex === -1) {
-            $(this).data('multi-visibility-index', multiMaxIndex);
+            $(this).data("multi-visibility-index", multiVisibilityIndex);
+        } else if (multiVisibilityIndex === -1) {
+            $(this).data("multi-visibility-index", multiMaxIndex);
         }
     });
 
-    $('.multi-input-add-btn').click(function () {
-        var multiFieldId = $(this).data('multi-field-id');
-        var multiVisibilityIndex = $(this).data('multi-visibility-index');
-        const multiMaxIndex = $(this).data('multi-max-index');
+    $(".multi-input-add-btn").click(function () {
+        var multiFieldId = $(this).data("multi-field-id");
+        var multiVisibilityIndex = $(this).data("multi-visibility-index");
+        const multiMaxIndex = $(this).data("multi-max-index");
 
         var multiShowIndex = multiVisibilityIndex + 1;
         if (multiShowIndex <= multiMaxIndex) {
-            var multiShowId = 'id_' + multiFieldId + '_' + multiShowIndex;
-            $('#' + multiShowId).parent('.form__item').removeClass('multi-input-field-hidden');
-            $(this).data('multi-visibility-index', multiShowIndex);
-        }
-        else {
+            var multiShowId = "id_" + multiFieldId + "_" + multiShowIndex;
+            $("#" + multiShowId)
+                .parent(".form__item")
+                .removeClass("multi-input-field-hidden");
+            $(this).data("multi-visibility-index", multiShowIndex);
+        } else {
             $(this).hide();
         }
     });
diff --git a/hypha/static_src/src/javascript/apply/past-reports-pagination.js b/hypha/static_src/src/javascript/apply/past-reports-pagination.js
index ef1a1b41a1b3409fdf08d0579697d3f644101c97..533db9baab29e2a0168eb35e0feec85edade36be 100644
--- a/hypha/static_src/src/javascript/apply/past-reports-pagination.js
+++ b/hypha/static_src/src/javascript/apply/past-reports-pagination.js
@@ -1,27 +1,28 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     function pastReportsPagination() {
-        $('.js-data-block-pagination').click((e) => {
+        $(".js-data-block-pagination").click((e) => {
             e.preventDefault();
             showNextTen();
         });
     }
 
     function showNextTen() {
-        const [...nextTen] = $('.js-past-reports-table tr.is-hidden').slice(0, 10);
-        nextTen.forEach(item => item.classList.remove('is-hidden'));
+        const [...nextTen] = $(".js-past-reports-table tr.is-hidden").slice(
+            0,
+            10
+        );
+        nextTen.forEach((item) => item.classList.remove("is-hidden"));
         checkRemaining();
     }
 
     function checkRemaining() {
-        const [...remaining] = $('.js-past-reports-table tr.is-hidden');
+        const [...remaining] = $(".js-past-reports-table tr.is-hidden");
         if (remaining.length === 0) {
-            $('.js-data-block-pagination').addClass('is-hidden');
+            $(".js-data-block-pagination").addClass("is-hidden");
         }
     }
 
     pastReportsPagination();
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/report-calculator.js b/hypha/static_src/src/javascript/apply/report-calculator.js
index 15d4056ba97bf7a796bd466b6ca3f840cf1f4e7a..755e28e34b1425fe31a69e06a7ec04bf27f395ac 100644
--- a/hypha/static_src/src/javascript/apply/report-calculator.js
+++ b/hypha/static_src/src/javascript/apply/report-calculator.js
@@ -1,24 +1,29 @@
 (function ($) {
-
-    'use strict';
-    const reportDataEl = document.getElementById('reportData');
+    "use strict";
+    const reportDataEl = document.getElementById("reportData");
     if (!reportDataEl) {
         return;
     }
     const reportData = JSON.parse(reportDataEl.textContent);
 
     // Form inputs
-    const frequencyNumberInput = document.getElementById('id_occurrence');
-    const frequencyPeriodSelect = document.getElementById('id_frequency');
-    const startDateInput = document.getElementById('id_start');
+    const frequencyNumberInput = document.getElementById("id_occurrence");
+    const frequencyPeriodSelect = document.getElementById("id_frequency");
+    const startDateInput = document.getElementById("id_start");
 
     // Form slots
-    const projectEndSlot = document.querySelector('.js-project-end-slot');
-    const frequencyNumberSlot = document.querySelector('.js-frequency-number-slot');
-    const frequencyPeriodSlot = document.querySelector('.js-frequency-period-slot');
-    const periodStartSlot = document.querySelector('.js-report-period-start');
-    const periodEndSlot = document.querySelector('.js-report-period-end');
-    const nextReportDueSlot = document.querySelector('.js-next-report-due-slot');
+    const projectEndSlot = document.querySelector(".js-project-end-slot");
+    const frequencyNumberSlot = document.querySelector(
+        ".js-frequency-number-slot"
+    );
+    const frequencyPeriodSlot = document.querySelector(
+        ".js-frequency-period-slot"
+    );
+    const periodStartSlot = document.querySelector(".js-report-period-start");
+    const periodEndSlot = document.querySelector(".js-report-period-end");
+    const nextReportDueSlot = document.querySelector(
+        ".js-next-report-due-slot"
+    );
 
     function init() {
         // Set on page load
@@ -55,14 +60,19 @@
         periodEndSlot.innerHTML = startDateInput.value;
 
         // Update the reporting period range (next report date - today)
-        const daysDiff = dateDiffInDays(new Date(), new Date(startDateInput.value));
+        const daysDiff = dateDiffInDays(
+            new Date(),
+            new Date(startDateInput.value)
+        );
         const weeksAndDays = getWeeks(daysDiff);
-        const {weeks, days} = weeksAndDays;
-        const pluraliseWeeks = weeks === 1 ? '' : 's';
-        const pluraliseDays = days === 1 ? '' : 's';
+        const { weeks, days } = weeksAndDays;
+        const pluraliseWeeks = weeks === 1 ? "" : "s";
+        const pluraliseDays = days === 1 ? "" : "s";
 
         nextReportDueSlot.innerHTML = `
-                ${weeks > 0 ? `${weeks} week${pluraliseWeeks}` : ''} ${days} day${pluraliseDays}
+                ${
+                    weeks > 0 ? `${weeks} week${pluraliseWeeks}` : ""
+                } ${days} day${pluraliseDays}
             `;
     }
 
@@ -84,14 +94,24 @@
     }
 
     function pluraliseTimePeriod(number) {
-        frequencyPeriodSlot.innerHTML = `${frequencyPeriodSelect.value}${Number(number) === 1 ? '' : 's'}`;
+        frequencyPeriodSlot.innerHTML = `${frequencyPeriodSelect.value}${
+            Number(number) === 1 ? "" : "s"
+        }`;
     }
 
     // Get the number of days between two dates
     function dateDiffInDays(startDate, EndDate) {
         const msPerDay = 1000 * 60 * 60 * 24;
-        const utc1 = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());
-        const utc2 = Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate());
+        const utc1 = Date.UTC(
+            startDate.getFullYear(),
+            startDate.getMonth(),
+            startDate.getDate()
+        );
+        const utc2 = Date.UTC(
+            EndDate.getFullYear(),
+            EndDate.getMonth(),
+            EndDate.getDate()
+        );
 
         return Math.floor((utc2 - utc1) / msPerDay);
     }
@@ -100,10 +120,9 @@
     function getWeeks(days) {
         return {
             weeks: Math.floor(days / 7),
-            days: days % 7
+            days: days % 7,
         };
     }
 
     init();
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/report-frequency.js b/hypha/static_src/src/javascript/apply/report-frequency.js
index 3bddda6649c307d6255279d8efab992a1b764fae..218e9528a38a4a728af903448b0b677eb169c8c5 100644
--- a/hypha/static_src/src/javascript/apply/report-frequency.js
+++ b/hypha/static_src/src/javascript/apply/report-frequency.js
@@ -1,26 +1,24 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    const var_repeat = $('#id_does_not_repeat');
+    const var_repeat = $("#id_does_not_repeat");
 
     if (!var_repeat.length) {
         return;
     }
 
     if (var_repeat[0].checked) {
-        $('.form__group--report-every').hide();
-        $('.form__group--schedule').hide();
+        $(".form__group--report-every").hide();
+        $(".form__group--schedule").hide();
     }
 
-    var_repeat.addEventListener('click', function () {
+    var_repeat.addEventListener("click", function () {
         if (var_repeat.checked) {
-            $('.form__group--report-every').hide();
-            $('.form__group--schedule').hide();
-        }
-        else {
-            $('.form__group--report-every').show();
-            $('.form__group--schedule').show();
+            $(".form__group--report-every").hide();
+            $(".form__group--schedule").hide();
+        } else {
+            $(".form__group--report-every").show();
+            $(".form__group--schedule").show();
         }
     });
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/screening-status.js b/hypha/static_src/src/javascript/apply/screening-status.js
index cc41aeb1fab05e6f409390b3d28bfda4e1d2d4e9..775977b6db48fba3c14fe34c5d2fc5bc5c321ee4 100644
--- a/hypha/static_src/src/javascript/apply/screening-status.js
+++ b/hypha/static_src/src/javascript/apply/screening-status.js
@@ -1,82 +1,109 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('.thumb').on('click', function (e) {
+    $(".thumb").on("click", function (e) {
         e.preventDefault();
 
         var $current = $(this);
-        var id = $current.data('id');
-        var yes = $current.data('yes');
+        var id = $current.data("id");
+        var yes = $current.data("yes");
 
         $.ajax({
-            url: '/api/v1/submissions/' + id + '/screening_statuses/default/',
-            type: 'POST',
-            data: {yes: yes},
+            url: "/api/v1/submissions/" + id + "/screening_statuses/default/",
+            type: "POST",
+            data: { yes: yes },
             success: function (json) {
                 if (json) {
-                    var screeningOptions = $('<p id="screening-options-para">' + '<a id="screening-options-ajax" data-fancybox="" data-src="#screen-application" data-yes=' + yes + ' class="link link--secondary-change" href="#"> Screening Options</a></p>');
-                    if ($.trim($('.show-screening-options').find('#screening-options-para').html()) === '') {
-                        $('.show-screening-options').find('#Options').remove();
-                        $('.show-screening-options').find('#screening-options').remove();
+                    var screeningOptions = $(
+                        '<p id="screening-options-para">' +
+                            '<a id="screening-options-ajax" data-fancybox="" data-src="#screen-application" data-yes=' +
+                            yes +
+                            ' class="link link--secondary-change" href="#"> Screening Options</a></p>'
+                    );
+                    if (
+                        $.trim(
+                            $(".show-screening-options")
+                                .find("#screening-options-para")
+                                .html()
+                        ) === ""
+                    ) {
+                        $(".show-screening-options").find("#Options").remove();
+                        $(".show-screening-options")
+                            .find("#screening-options")
+                            .remove();
                     }
-                    $('.show-screening-options').find('#screening-options-para').remove();
-                    $('.show-screening-options').append(screeningOptions);
+                    $(".show-screening-options")
+                        .find("#screening-options-para")
+                        .remove();
+                    $(".show-screening-options").append(screeningOptions);
                     if (yes === true) {
-                        $('.icon--dislike').removeClass('icon--dislike-no');
-                        $('.icon--dislike').removeClass('icon--dislike-disable');
-                        $current.find('.icon').addClass('icon--like-yes');
-                    }
-                    else {
-                        $('.icon--like').removeClass('icon--like-yes');
-                        $('.icon--like').removeClass('icon--like-disable');
-                        $current.find('.icon').addClass('icon--dislike-no');
+                        $(".icon--dislike").removeClass("icon--dislike-no");
+                        $(".icon--dislike").removeClass(
+                            "icon--dislike-disable"
+                        );
+                        $current.find(".icon").addClass("icon--like-yes");
+                    } else {
+                        $(".icon--like").removeClass("icon--like-yes");
+                        $(".icon--like").removeClass("icon--like-disable");
+                        $current.find(".icon").addClass("icon--dislike-no");
                     }
                 }
-            }
+            },
         });
     });
 
-    $('.show-screening-options').on('click', '#screening-options-ajax', function () {
-        var $screeningOptions = $(this);
-        var currentStatus = $screeningOptions.data('yes');
-        var $screenApplication = $('#screen-application');
-        var yesStatuses = $screenApplication.data('yes-statuses');
-        var noStatuses = $screenApplication.data('no-statuses');
-        var defaultYes = $screenApplication.data('default-yes');
-        var defaultNo = $screenApplication.data('default-no');
-        var $screeningStatuses = $screenApplication.find('#id_screening_statuses');
-        $screeningStatuses = $screeningStatuses.empty();
-        if (currentStatus === true) {
-            $('#current-status').text('Current decisions: ' + defaultYes);
-            $.each(yesStatuses, function (key, value) {
-                if (key === defaultYes) {
-                    $screeningStatuses.append($('<option></option>')
-                        .attr('value', value)
-                        .attr('selected', 'selected').text(key));
-                }
-                else {
-                    $screeningStatuses.append($('<option></option>')
-                        .attr('value', value).text(key)
-                    );
-                }
-            });
-        }
-        else {
-            $('#current-status').text('Current decisions: ' + defaultNo);
-            $.each(noStatuses, function (key, value) {
-                if (key === defaultNo) {
-                    $screeningStatuses.append($('<option></option>')
-                        .attr('value', value)
-                        .attr('selected', 'selected').text(key));
-                }
-                else {
-                    $screeningStatuses.append($('<option></option>')
-                        .attr('value', value).text(key)
-                    );
-                }
-            });
+    $(".show-screening-options").on(
+        "click",
+        "#screening-options-ajax",
+        function () {
+            var $screeningOptions = $(this);
+            var currentStatus = $screeningOptions.data("yes");
+            var $screenApplication = $("#screen-application");
+            var yesStatuses = $screenApplication.data("yes-statuses");
+            var noStatuses = $screenApplication.data("no-statuses");
+            var defaultYes = $screenApplication.data("default-yes");
+            var defaultNo = $screenApplication.data("default-no");
+            var $screeningStatuses = $screenApplication.find(
+                "#id_screening_statuses"
+            );
+            $screeningStatuses = $screeningStatuses.empty();
+            if (currentStatus === true) {
+                $("#current-status").text("Current decisions: " + defaultYes);
+                $.each(yesStatuses, function (key, value) {
+                    if (key === defaultYes) {
+                        $screeningStatuses.append(
+                            $("<option></option>")
+                                .attr("value", value)
+                                .attr("selected", "selected")
+                                .text(key)
+                        );
+                    } else {
+                        $screeningStatuses.append(
+                            $("<option></option>")
+                                .attr("value", value)
+                                .text(key)
+                        );
+                    }
+                });
+            } else {
+                $("#current-status").text("Current decisions: " + defaultNo);
+                $.each(noStatuses, function (key, value) {
+                    if (key === defaultNo) {
+                        $screeningStatuses.append(
+                            $("<option></option>")
+                                .attr("value", value)
+                                .attr("selected", "selected")
+                                .text(key)
+                        );
+                    } else {
+                        $screeningStatuses.append(
+                            $("<option></option>")
+                                .attr("value", value)
+                                .text(key)
+                        );
+                    }
+                });
+            }
         }
-    });
-
+    );
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/submission-filters.js b/hypha/static_src/src/javascript/apply/submission-filters.js
index 585b31eff5a3519531557375a910ed906bddd34a..2559211c5f8387b3444001283865c6ae5eee94cb 100644
--- a/hypha/static_src/src/javascript/apply/submission-filters.js
+++ b/hypha/static_src/src/javascript/apply/submission-filters.js
@@ -1,32 +1,34 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Variables
-    const $toggleButton = $('.js-toggle-filters');
-    const $closeButton = $('.js-close-filters');
-    const $clearButton = $('.js-clear-filters');
-    const filterOpenClass = 'filters-open';
-    const filterActiveClass = 'is-active';
+    const $toggleButton = $(".js-toggle-filters");
+    const $closeButton = $(".js-close-filters");
+    const $clearButton = $(".js-clear-filters");
+    const filterOpenClass = "filters-open";
+    const filterActiveClass = "is-active";
 
     const urlParams = new URLSearchParams(window.location.search);
 
-    const persistedParams = ['sort', 'query', 'submission'];
+    const persistedParams = ["sort", "query", "submission"];
 
     // check if the page has a query string and keep filters open if so on desktop
     const minimumNumberParams = persistedParams.reduce(
-        (count, param) => count + urlParams.has(param) ? 1 : 0,
+        (count, param) => (count + urlParams.has(param) ? 1 : 0),
         0
     );
 
-    if ([...urlParams].length > minimumNumberParams && $(window).width() > 1024) {
-        $('.filters').addClass(filterOpenClass);
-        $('.js-toggle-filters').text('Clear filters');
+    if (
+        [...urlParams].length > minimumNumberParams &&
+        $(window).width() > 1024
+    ) {
+        $(".filters").addClass(filterOpenClass);
+        $(".js-toggle-filters").text("Clear filters");
     }
 
     // Add active class to filters - dropdowns are dynamically appended to the dom,
     // so we have to listen for the event higher up
-    $('body').on('click', '.select2-dropdown', (e) => {
+    $("body").on("click", ".select2-dropdown", (e) => {
         // get the id of the dropdown
         let selectId = e.target.parentElement.parentElement.id;
 
@@ -35,17 +37,18 @@
 
         if (match.length !== 0) {
             // if the dropdown contains a clear class, the filters are active
-            if ($(match[0]).find('span.select2-selection__clear').length !== 0) {
+            if (
+                $(match[0]).find("span.select2-selection__clear").length !== 0
+            ) {
                 match[0].classList.add(filterActiveClass);
-            }
-            else {
+            } else {
                 match[0].classList.remove(filterActiveClass);
             }
         }
     });
 
     // remove active class on clearing select2
-    $('.select2').on('select2:unselecting', (e) => {
+    $(".select2").on("select2:unselecting", (e) => {
         const dropdown = e.target.nextElementSibling.firstChild.firstChild;
         if (dropdown.classList.contains(filterActiveClass)) {
             dropdown.classList.remove(filterActiveClass);
@@ -53,14 +56,14 @@
     });
 
     // toggle filters
-    $toggleButton.on('click', (e) => {
+    $toggleButton.on("click", (e) => {
         // find the nearest filters
-        const filters = e.target.closest('.js-table-actions').nextElementSibling;
+        const filters =
+            e.target.closest(".js-table-actions").nextElementSibling;
 
         if (filters.classList.contains(filterOpenClass)) {
             handleClearFilters();
-        }
-        else {
+        } else {
             filters.classList.add(filterOpenClass);
             // only update button text on desktop
             if (window.innerWidth >= 1024) {
@@ -70,101 +73,118 @@
     });
 
     // close filters on mobile
-    $closeButton.on('click', (e) => {
-        e.target.closest('.filters').classList.remove(filterOpenClass);
+    $closeButton.on("click", (e) => {
+        e.target.closest(".filters").classList.remove(filterOpenClass);
     });
 
     // redirect to submissions home to clear filters
     function handleClearFilters() {
         const query = persistedParams.reduce(
-            (query, param) => query + (urlParams.get(param) ? `&${param}=${urlParams.get(param)}` : ''), '?');
-        window.location.href = window.location.href.split('?')[0] + query;
+            (query, param) =>
+                query +
+                (urlParams.get(param)
+                    ? `&${param}=${urlParams.get(param)}`
+                    : ""),
+            "?"
+        );
+        window.location.href = window.location.href.split("?")[0] + query;
     }
 
     // toggle filters button wording
     function updateButtonText(button, filters) {
         if (filters.classList.contains(filterOpenClass)) {
-            button.textContent = 'Clear filters';
-        }
-        else {
-            button.textContent = 'Filters';
+            button.textContent = "Clear filters";
+        } else {
+            button.textContent = "Filters";
         }
     }
 
     // corrects spacing of dropdowns when toggled on mobile
     function mobileFilterPadding(element) {
-        const expanded = 'expanded-filter-element';
-        const dropdown = $(element).closest('.select2');
-        const openDropdown = $('.select2 .' + expanded);
+        const expanded = "expanded-filter-element";
+        const dropdown = $(element).closest(".select2");
+        const openDropdown = $(".select2 ." + expanded);
         let dropdownMargin = 0;
 
-        if (openDropdown.length > 0 && !openDropdown.hasClass('select2-container--open')) {
+        if (
+            openDropdown.length > 0 &&
+            !openDropdown.hasClass("select2-container--open")
+        ) {
             // reset the margin of the select we previously worked
             openDropdown.removeClass(expanded);
             // store the offset to adjust the new select box (elements above the old dropdown unaffected)
             if (dropdown.position().top > openDropdown.position().top) {
-                dropdownMargin = parseInt(openDropdown.css('marginBottom'));
+                dropdownMargin = parseInt(openDropdown.css("marginBottom"));
             }
-            openDropdown.css('margin-bottom', '0px');
+            openDropdown.css("margin-bottom", "0px");
         }
 
-        if (dropdown.hasClass('select2-container--open')) {
+        if (dropdown.hasClass("select2-container--open")) {
             dropdown.addClass(expanded);
-            const dropdownID = $(element).closest('.select2-selection').attr('aria-owns');
+            const dropdownID = $(element)
+                .closest(".select2-selection")
+                .attr("aria-owns");
             // Element which has the height of the select dropdown
             const match = $(`ul#${dropdownID}`);
             const dropdownHeight = match.outerHeight(true);
 
             // Element which has the position of the dropdown
-            const positionalMatch = match.closest('.select2-container');
+            const positionalMatch = match.closest(".select2-container");
 
             // Pad the bottom of the select box
-            dropdown.css('margin-bottom', `${dropdownHeight}px`);
+            dropdown.css("margin-bottom", `${dropdownHeight}px`);
 
             // bump up the dropdown options by height of closed elements
-            positionalMatch.css('top', positionalMatch.position().top - dropdownMargin);
+            positionalMatch.css(
+                "top",
+                positionalMatch.position().top - dropdownMargin
+            );
         }
     }
 
     // clear all filters
-    $clearButton.on('click', () => {
-        const dropdowns = document.querySelectorAll('.form__filters select');
-        dropdowns.forEach(dropdown => {
-            $(dropdown).val(null).trigger('change');
-            $('.select2-selection.is-active').removeClass(filterActiveClass);
+    $clearButton.on("click", () => {
+        const dropdowns = document.querySelectorAll(".form__filters select");
+        dropdowns.forEach((dropdown) => {
+            $(dropdown).val(null).trigger("change");
+            $(".select2-selection.is-active").removeClass(filterActiveClass);
             mobileFilterPadding(dropdown); // eslint-disable-line no-undef
         });
     });
 
     $(function () {
         // Add active class to select2 checkboxes after page has been filtered
-        const clearButtons = document.querySelectorAll('.select2-selection__clear');
-        clearButtons.forEach(clearButton => {
-            clearButton.parentElement.parentElement.classList.add(filterActiveClass);
+        const clearButtons = document.querySelectorAll(
+            ".select2-selection__clear"
+        );
+        clearButtons.forEach((clearButton) => {
+            clearButton.parentElement.parentElement.classList.add(
+                filterActiveClass
+            );
         });
     });
 
     // reset mobile filters if they're open past the tablet breakpoint
-    $(window).resize(function resize() {
-        if ($(window).width() < 1024) {
-            // close the filters if open when reducing the window size
-            $('.filters').removeClass('filters-open');
-
-            // update filter button text
-            $('.js-toggle-filters').text('Filters');
-
-            // Correct spacing of dropdowns when toggled
-            $('.select2').on('click', (e) => {
-                mobileFilterPadding(e.target);
-            });
-        }
-        else {
-            $('.filters').addClass('filters-open');
-        }
-    }).trigger('resize');
+    $(window)
+        .resize(function resize() {
+            if ($(window).width() < 1024) {
+                // close the filters if open when reducing the window size
+                $(".filters").removeClass("filters-open");
+
+                // update filter button text
+                $(".js-toggle-filters").text("Filters");
+
+                // Correct spacing of dropdowns when toggled
+                $(".select2").on("click", (e) => {
+                    mobileFilterPadding(e.target);
+                });
+            } else {
+                $(".filters").addClass("filters-open");
+            }
+        })
+        .trigger("resize");
 
-    $('#show-filters-button').on('click', () => {
-        $('.filters').addClass('filters-open');
+    $("#show-filters-button").on("click", () => {
+        $(".filters").addClass("filters-open");
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/submission-form-copy.js b/hypha/static_src/src/javascript/apply/submission-form-copy.js
index d34d403d4e1c770546bd354b2087be6c8022e517..739a2d4d552c570eb15c9da41857c6e829e0d91c 100644
--- a/hypha/static_src/src/javascript/apply/submission-form-copy.js
+++ b/hypha/static_src/src/javascript/apply/submission-form-copy.js
@@ -1,103 +1,129 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Strip html tags from text.
     function strip(html) {
-        var doc = new DOMParser().parseFromString(html, 'text/html');
-        return doc.body.textContent.trim() || '';
+        var doc = new DOMParser().parseFromString(html, "text/html");
+        return doc.body.textContent.trim() || "";
     }
 
     // Get all questions on the page/form.
     function get_questions() {
         var questions_text = [];
         var i = 1;
-        questions_text.push('# ' + $('.header__title').html());
-        $('.application-form').find('.form__group, .rich-text, h2, h3').each(function () {
-            var question_text = '';
-            var label_text = $(this).find('.form__question').html();
-            if (label_text) {
-                // Get the label, i.e. question.
-                label_text = strip(label_text);
-                label_text = label_text.replace(/(\r\n|\n|\r)/gm, '');
-                label_text = label_text.replace(/[ ]+/g, ' ');
-                question_text = '### ' + label_text;
+        questions_text.push("# " + $(".header__title").html());
+        $(".application-form")
+            .find(".form__group, .rich-text, h2, h3")
+            .each(function () {
+                var question_text = "";
+                var label_text = $(this).find(".form__question").html();
+                if (label_text) {
+                    // Get the label, i.e. question.
+                    label_text = strip(label_text);
+                    label_text = label_text.replace(/(\r\n|\n|\r)/gm, "");
+                    label_text = label_text.replace(/[ ]+/g, " ");
+                    question_text = "### " + label_text;
 
-                var help_text = $(this).find('.form__help').html();
-                var $help_link = $(this).find('.form__help-link');
-                var word_limit = $(this).attr('data-word-limit');
-                var $input_list = $(this).find('.form__item > ul > li');
-                var input_text = $(this).find('input').val();
-                var rich_text = $(this).find('.tinymce4-editor').val();
+                    var help_text = $(this).find(".form__help").html();
+                    var $help_link = $(this).find(".form__help-link");
+                    var word_limit = $(this).attr("data-word-limit");
+                    var $input_list = $(this).find(".form__item > ul > li");
+                    var input_text = $(this).find("input").val();
+                    var rich_text = $(this).find(".tinymce4-editor").val();
 
-                // Get help text and link if any.
-                if (help_text) {
-                    question_text = question_text + '\n\n' + strip(help_text);
-                }
-                if ($help_link.length !== 0) {
-                    question_text = question_text + '\n\n' + strip($help_link.html()) + ' <' + $help_link.find('a').attr('href') + '>';
-                }
+                    // Get help text and link if any.
+                    if (help_text) {
+                        question_text =
+                            question_text + "\n\n" + strip(help_text);
+                    }
+                    if ($help_link.length !== 0) {
+                        question_text =
+                            question_text +
+                            "\n\n" +
+                            strip($help_link.html()) +
+                            " <" +
+                            $help_link.find("a").attr("href") +
+                            ">";
+                    }
 
-                if (word_limit) {
-                    question_text = question_text + '\n\nLimit this field to ' + word_limit + ' words.';
-                }
+                    if (word_limit) {
+                        question_text =
+                            question_text +
+                            "\n\nLimit this field to " +
+                            word_limit +
+                            " words.";
+                    }
 
-                // Get the user input if any.
-                if ($input_list.length !== 0) {
-                    var input_list = [];
-                    var input_item = '';
-                    $input_list.each(function () {
-                        input_item = strip($(this).html());
-                        if ($(this).find('input').is(':checked')) {
-                            input_item = input_item + ' (selected)';
-                        }
-                        input_list.push(input_item);
-                    });
-                    question_text = question_text + '\n\n' + input_list.join('\n');
-                }
-                else if (input_text) {
-                    question_text = question_text + '\n\n' + strip(input_text);
+                    // Get the user input if any.
+                    if ($input_list.length !== 0) {
+                        var input_list = [];
+                        var input_item = "";
+                        $input_list.each(function () {
+                            input_item = strip($(this).html());
+                            if ($(this).find("input").is(":checked")) {
+                                input_item = input_item + " (selected)";
+                            }
+                            input_list.push(input_item);
+                        });
+                        question_text =
+                            question_text + "\n\n" + input_list.join("\n");
+                    } else if (input_text) {
+                        question_text =
+                            question_text + "\n\n" + strip(input_text);
+                    } else if (rich_text) {
+                        question_text =
+                            question_text + "\n\n" + strip(rich_text);
+                    }
+                } else {
+                    // Get the sub headers and help text.
+                    question_text = strip($(this).html());
+                    if ($(this).find("h2, h3")) {
+                        question_text = "## " + i + ". " + question_text;
+                        i++;
+                    }
                 }
-                else if (rich_text) {
-                    question_text = question_text + '\n\n' + strip(rich_text);
-                }
-            }
-            else {
-                // Get the sub headers and help text.
-                question_text = strip($(this).html());
-                if ($(this).find('h2, h3')) {
-                    question_text = '## ' + i + '. ' + question_text;
-                    i++;
-                }
-            }
-            questions_text.push(question_text);
-        });
-        return questions_text.join('\n\n');
+                questions_text.push(question_text);
+            });
+        return questions_text.join("\n\n");
     }
 
     // Allow users to copy all questions to the clipboard.
-    if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
-        var $button = $('<button/>')
-            .text('Copy questions to clipboard')
-            .addClass('link link--button link--button--narrow js-clipboard-button')
-            .attr('title', 'Copies all the questions and user input to the clipboard in plain text.');
-        var $application_form = $('.application-form');
-        $button.clone().css({'display': 'block', 'margin-left': 'auto'}).insertBefore($application_form);
-        $button.css({'margin-left': '20px'}).insertAfter($application_form.find('button').last());
+    if (
+        document.queryCommandSupported &&
+        document.queryCommandSupported("copy")
+    ) {
+        var $button = $("<button/>")
+            .text("Copy questions to clipboard")
+            .addClass(
+                "link link--button link--button--narrow js-clipboard-button"
+            )
+            .attr(
+                "title",
+                "Copies all the questions and user input to the clipboard in plain text."
+            );
+        var $application_form = $(".application-form");
+        $button
+            .clone()
+            .css({ display: "block", "margin-left": "auto" })
+            .insertBefore($application_form);
+        $button
+            .css({ "margin-left": "20px" })
+            .insertAfter($application_form.find("button").last());
 
-        $('.js-clipboard-button').on('click', function (e) {
+        $(".js-clipboard-button").on("click", function (e) {
             e.preventDefault();
-            $application_form.addClass('flash-item');
+            $application_form.addClass("flash-item");
             var questions = get_questions();
-            var $textarea = $('<textarea>').html(questions).addClass('visually-hidden');
-            $textarea.appendTo('body');
+            var $textarea = $("<textarea>")
+                .html(questions)
+                .addClass("visually-hidden");
+            $textarea.appendTo("body");
             $textarea.select();
-            document.execCommand('copy');
+            document.execCommand("copy");
             $textarea.remove();
             setTimeout(function () {
-                $application_form.removeClass('flash-item');
+                $application_form.removeClass("flash-item");
             }, 1200);
         });
     }
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/submission-text-cleanup.js b/hypha/static_src/src/javascript/apply/submission-text-cleanup.js
index 3ed4c2adce0c81e43ae8887a83b13a34c93a8b19..85675c7a120b8bce3f8d5c6a2237bd8cff21ed0f 100644
--- a/hypha/static_src/src/javascript/apply/submission-text-cleanup.js
+++ b/hypha/static_src/src/javascript/apply/submission-text-cleanup.js
@@ -1,15 +1,17 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('.rich-text--answers').find('p').each(function () {
-        // Detach (remove) p tag with only whitespace inside.
-        if ($.trim($(this).text()) === '') {
-            $(this).detach();
-        }
-    });
+    $(".rich-text--answers")
+        .find("p")
+        .each(function () {
+            // Detach (remove) p tag with only whitespace inside.
+            if ($.trim($(this).text()) === "") {
+                $(this).detach();
+            }
+        });
 
     // Wrap all tables in a div so overflow auto works.
-    $('.rich-text--answers').find('table').wrap('<div class="rich-text__table"></div>');
-
+    $(".rich-text--answers")
+        .find("table")
+        .wrap('<div class="rich-text__table"></div>');
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/submission-tooltips.js b/hypha/static_src/src/javascript/apply/submission-tooltips.js
deleted file mode 100644
index 2aa9fd46d04b5a39c41b5ee4eee195c8037e574a..0000000000000000000000000000000000000000
--- a/hypha/static_src/src/javascript/apply/submission-tooltips.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function ($) {
-
-    'use strict';
-
-    function generateTooltips() {
-
-        // get the submisttions titles
-        const titles = Array.prototype.slice.call(document.querySelectorAll('.js-title'));
-
-        // if the tile has been truncated...
-        titles.forEach(function (title) {
-            if (title.textContent.indexOf('...') >= 0) {
-                addToolTip(title);
-            }
-        });
-
-        // ...add a tooltip class
-        function addToolTip(title) {
-            title.classList.add('has-tooltip');
-        }
-    }
-
-    // Add tooltips to truncated titles on submissions overview table
-    generateTooltips();
-
-})(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/tabs.js b/hypha/static_src/src/javascript/apply/tabs.js
index 29ebab1030290dec3f8875b97d37d1ef3e3c4639..905accbbff8c0db2a8781fe51da7092bf0a4be4d 100644
--- a/hypha/static_src/src/javascript/apply/tabs.js
+++ b/hypha/static_src/src/javascript/apply/tabs.js
@@ -1,27 +1,32 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     let Tabs = class {
         static selector() {
-            return '.js-tabs';
+            return ".js-tabs";
         }
 
         constructor(node) {
             this.node = node[0];
             // The tabs
-            this.tabItems = Array.prototype.slice.call(this.node.querySelectorAll('.tab__item:not(.js-tabs-off)'));
+            this.tabItems = Array.prototype.slice.call(
+                this.node.querySelectorAll(".tab__item:not(.js-tabs-off)")
+            );
 
             // The tabs content
-            this.tabsContents = Array.prototype.slice.call(document.querySelectorAll('.tabs__content'));
+            this.tabsContents = Array.prototype.slice.call(
+                document.querySelectorAll(".tabs__content")
+            );
 
             // The tabs content container
-            this.tabsContentsContainer = Array.prototype.slice.call(document.querySelectorAll('.js-tabs-content'));
+            this.tabsContentsContainer = Array.prototype.slice.call(
+                document.querySelectorAll(".js-tabs-content")
+            );
 
             // Active classes
-            this.tabActiveClass = 'tab__item--active';
-            this.tabContentActiveClass = 'tabs__content--current';
-            this.defaultSelectedTab = 'tab-1';
+            this.tabActiveClass = "tab__item--active";
+            this.tabContentActiveClass = "tabs__content--current";
+            this.defaultSelectedTab = "tab-1";
             this.addDataAttributes();
             this.bindEvents();
         }
@@ -32,8 +37,8 @@
                 tabsContent.dataset.tabs = i + 1;
             });
 
-            $('.js-tabs').each(function (i) {
-                $(this).attr('data-tabs', i + 1);
+            $(".js-tabs").each(function (i) {
+                $(this).attr("data-tabs", i + 1);
             });
         }
 
@@ -41,7 +46,7 @@
             this.updateTabOnLoad();
 
             this.tabItems.forEach((el) => {
-                el.addEventListener('click', (e) => {
+                el.addEventListener("click", (e) => {
                     // prevent the page jumping
                     e.preventDefault();
                     this.tabs(e);
@@ -56,17 +61,19 @@
         updateTabOnLoad() {
             // Find tab with matching hash and activate
             const url = document.location.toString();
-            const tabName = url.split('#')[1];
+            const tabName = url.split("#")[1];
             const match = this.findTab(tabName);
 
-            return tabName ? this.addTabClasses(match) : this.addTabClasses(null);
+            return tabName
+                ? this.addTabClasses(match)
+                : this.addTabClasses(null);
         }
 
         tabs(e) {
             // Find current tab
             const tab = e.currentTarget;
 
-            const tabContentId = $(tab).closest('.js-tabs').data('tabs');
+            const tabContentId = $(tab).closest(".js-tabs").data("tabs");
             this.stripTabClasses(tabContentId);
             this.addTabClasses(tab);
             this.updateUrl(tab);
@@ -74,19 +81,31 @@
 
         stripTabClasses(tabContentId) {
             // remove active classes from all tabs and tab contents
-            const parents = Array.prototype.slice.call($(`.js-tabs-content[data-tabs=${tabContentId}]`).find('.tabs__content'));
-            const childTabs = Array.prototype.slice.call($(`.js-tabs[data-tabs=${tabContentId}]`).find('.tab__item'));
-            childTabs.forEach(tabItem => tabItem.classList.remove(this.tabActiveClass));
-            parents.forEach(tabsContent => tabsContent.classList.remove(this.tabContentActiveClass));
+            const parents = Array.prototype.slice.call(
+                $(`.js-tabs-content[data-tabs=${tabContentId}]`).find(
+                    ".tabs__content"
+                )
+            );
+            const childTabs = Array.prototype.slice.call(
+                $(`.js-tabs[data-tabs=${tabContentId}]`).find(".tab__item")
+            );
+            childTabs.forEach((tabItem) =>
+                tabItem.classList.remove(this.tabActiveClass)
+            );
+            parents.forEach((tabsContent) =>
+                tabsContent.classList.remove(this.tabContentActiveClass)
+            );
         }
 
         addTabClasses(tab) {
             if (tab === null) {
-                tab = document.querySelector(`[data-tab=${this.defaultSelectedTab}]`);
+                tab = document.querySelector(
+                    `[data-tab=${this.defaultSelectedTab}]`
+                );
             }
 
-            const tabId = tab.getAttribute('data-tab');
-            const tabContentId = $(tab).closest('.js-tabs').data('tabs');
+            const tabId = tab.getAttribute("data-tab");
+            const tabContentId = $(tab).closest(".js-tabs").data("tabs");
             const parents = $(`.js-tabs-content[data-tabs=${tabContentId}]`);
 
             // add active classes to tabs and their respecitve content
@@ -95,12 +114,11 @@
         }
 
         updateUrl(tab) {
-            window.location.hash = tab.getAttribute('href');
+            window.location.hash = tab.getAttribute("href");
         }
     };
 
     $(Tabs.selector()).each((index, el) => {
         new Tabs($(el));
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/tinymce-word-count.js b/hypha/static_src/src/javascript/apply/tinymce-word-count.js
index 58c80dbeb353eb2873e40953c05f963d99129e83..d776654a08374182d56bd9f1842808bdfbc42946 100644
--- a/hypha/static_src/src/javascript/apply/tinymce-word-count.js
+++ b/hypha/static_src/src/javascript/apply/tinymce-word-count.js
@@ -1,40 +1,48 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     var word_count_interval;
 
     const observer_options = {
-        childList: true
+        childList: true,
     };
 
     function word_count(el) {
         let word_count;
         try {
             word_count = parseInt(el.innerText.match(/\d+/)[0], 10);
-        }
-        catch (e) {
+        } catch (e) {
             word_count = 0;
         }
-        const word_limit = parseInt($(el).parents().eq(4).attr('data-word-limit'), 10);
+        const word_limit = parseInt(
+            $(el).parents().eq(4).attr("data-word-limit"),
+            10
+        );
         const percent_to_get = 20;
-        const word_limit_to_show_warning = word_limit - (percent_to_get / 100) * word_limit;
+        const word_limit_to_show_warning =
+            word_limit - (percent_to_get / 100) * word_limit;
 
         if (word_count <= word_limit_to_show_warning) {
-            el.setAttribute('data-after-word-count', ' out of ' + word_limit);
-            el.classList.remove('word-count-warning');
-            el.classList.remove('word-count-warning-2');
-        }
-        else if (word_count > word_limit_to_show_warning && word_count <= word_limit) {
-            el.setAttribute('data-after-word-count', ' out of ' + word_limit + ' (Close to the limit)');
-            el.classList.remove('word-count-warning-2');
-            el.classList.add('word-count-warning');
+            el.setAttribute("data-after-word-count", " out of " + word_limit);
+            el.classList.remove("word-count-warning");
+            el.classList.remove("word-count-warning-2");
+        } else if (
+            word_count > word_limit_to_show_warning &&
+            word_count <= word_limit
+        ) {
+            el.setAttribute(
+                "data-after-word-count",
+                " out of " + word_limit + " (Close to the limit)"
+            );
+            el.classList.remove("word-count-warning-2");
+            el.classList.add("word-count-warning");
+        } else if (word_count > word_limit) {
+            el.setAttribute(
+                "data-after-word-count",
+                " out of " + word_limit + " (Over the limit)"
+            );
+            el.classList.add("word-count-warning-2");
         }
-        else if (word_count > word_limit) {
-            el.setAttribute('data-after-word-count', ' out of ' + word_limit + ' (Over the limit)');
-            el.classList.add('word-count-warning-2');
-        }
-
     }
 
     const observer = new MutationObserver(function (mutations) {
@@ -44,7 +52,9 @@
     });
 
     function word_count_alert() {
-        const word_counts = document.querySelectorAll('.tox-statusbar__wordcount');
+        const word_counts = document.querySelectorAll(
+            ".tox-statusbar__wordcount"
+        );
         if (word_counts.length > 0) {
             clearInterval(word_count_interval);
         }
@@ -57,5 +67,4 @@
     }
 
     word_count_interval = setInterval(word_count_alert, 300);
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/toggle-actions-panel.js b/hypha/static_src/src/javascript/apply/toggle-actions-panel.js
index 6050e331591cb40035b06d5cfc79723faf73bb61..53cd7196b081d68820378dcaea1b4b859fc07ee9 100644
--- a/hypha/static_src/src/javascript/apply/toggle-actions-panel.js
+++ b/hypha/static_src/src/javascript/apply/toggle-actions-panel.js
@@ -1,16 +1,14 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     function toggleActionsPanel() {
-        $('.js-actions-toggle').click(function (e) {
+        $(".js-actions-toggle").click(function (e) {
             e.preventDefault();
-            this.classList.toggle('is-active');
-            this.nextElementSibling.classList.toggle('is-visible');
+            this.classList.toggle("is-active");
+            this.nextElementSibling.classList.toggle("is-visible");
         });
     }
 
     // Show actions sidebar on mobile
     toggleActionsPanel();
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/toggle-payment-block.js b/hypha/static_src/src/javascript/apply/toggle-payment-block.js
index 603c10644aa686a31dcf5fb0003d8cf17a81d2ea..ad123ec868be3f419d6738246d182f89af52970a 100644
--- a/hypha/static_src/src/javascript/apply/toggle-payment-block.js
+++ b/hypha/static_src/src/javascript/apply/toggle-payment-block.js
@@ -1,17 +1,18 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     function togglePaymentBlock() {
-        $('.js-payment-block-rejected-link').click(function (e) {
+        $(".js-payment-block-rejected-link").click(function (e) {
             e.preventDefault();
 
-            this.innerHTML = (this.innerHTML === 'Show rejected') ? 'Hide rejected' : 'Show rejected';
+            this.innerHTML =
+                this.innerHTML === "Show rejected"
+                    ? "Hide rejected"
+                    : "Show rejected";
 
-            $('.js-payment-block-rejected-table').toggleClass('is-hidden');
+            $(".js-payment-block-rejected-table").toggleClass("is-hidden");
         });
     }
 
     togglePaymentBlock();
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/toggle-related.js b/hypha/static_src/src/javascript/apply/toggle-related.js
index 34d61d24222d59ea1867e2649ccc591f6f1e9e62..abcd959fa734740fe177862525c87468a55fe369 100644
--- a/hypha/static_src/src/javascript/apply/toggle-related.js
+++ b/hypha/static_src/src/javascript/apply/toggle-related.js
@@ -1,23 +1,26 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Collaps long comments in activity feed.
-    $('.related-sidebar').each(function () {
-        var $content = $(this).find('ul');
+    $(".related-sidebar").each(function () {
+        var $content = $(this).find("ul");
         var content_height = $content.outerHeight();
         if (content_height > 300) {
-            $(this).addClass('related-sidebar--collaps');
-            $(this).append('<p class="related-sidebar__show-button"><a class="link link--button link--button--narrow" href="#">Show</a></p>');
+            $(this).addClass("related-sidebar--collaps");
+            $(this).append(
+                '<p class="related-sidebar__show-button"><a class="link link--button link--button--narrow" href="#">Show</a></p>'
+            );
         }
     });
 
     // Allow users to show full comment.
-    $('.related-sidebar__show-button').find('.link').click(function (e) {
-        e.preventDefault();
-        $(this).parents('.related-sidebar').removeClass('related-sidebar--collaps');
-        $(this).parent().detach();
-    });
-
+    $(".related-sidebar__show-button")
+        .find(".link")
+        .click(function (e) {
+            e.preventDefault();
+            $(this)
+                .parents(".related-sidebar")
+                .removeClass("related-sidebar--collaps");
+            $(this).parent().detach();
+        });
 })(jQuery);
-
diff --git a/hypha/static_src/src/javascript/apply/two-factor-focus.js b/hypha/static_src/src/javascript/apply/two-factor-focus.js
index 159f2a8ee27f30cae26419dc5241dd103c063552..b0316860639328f82e967b623ac92c47563d6f5a 100644
--- a/hypha/static_src/src/javascript/apply/two-factor-focus.js
+++ b/hypha/static_src/src/javascript/apply/two-factor-focus.js
@@ -1,7 +1,5 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('#id_generator-token').focus();
-
+    $("#id_generator-token").focus();
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/apply/url-search-params.js b/hypha/static_src/src/javascript/apply/url-search-params.js
index bf125f6d2457fda734f3322d065813af2aa6552f..e181b1269bfe275460aa1534b66a26be6ac45343 100644
--- a/hypha/static_src/src/javascript/apply/url-search-params.js
+++ b/hypha/static_src/src/javascript/apply/url-search-params.js
@@ -1,5 +1,314 @@
 /* (c) Andrea Giammarchi - ISC */
 // https://raw.githubusercontent.com/ungap/url-search-params/master/min.js
 /* eslint-disable */
-var self=this||{};try{!function(t,e){if(new t("q=%2B").get("q")!==e||new t({q:e}).get("q")!==e||new t([["q",e]]).get("q")!==e||"q=%0A"!==new t("q=\n").toString()||"q=+%26"!==new t({q:" &"}).toString()||"q=%25zx"!==new t({q:"%zx"}).toString())throw t;self.URLSearchParams=t}(URLSearchParams,"+")}catch(t){!function(t,a,o){"use strict";var u=t.create,h=t.defineProperty,e=/[!'\(\)~]|%20|%00/g,n=/%(?![0-9a-fA-F]{2})/g,r=/\+/g,i={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},s={append:function(t,e){p(this._ungap,t,e)},delete:function(t){delete this._ungap[t]},get:function(t){return this.has(t)?this._ungap[t][0]:null},getAll:function(t){return this.has(t)?this._ungap[t].slice(0):[]},has:function(t){return t in this._ungap},set:function(t,e){this._ungap[t]=[a(e)]},forEach:function(e,n){var r=this;for(var i in r._ungap)r._ungap[i].forEach(t,i);function t(t){e.call(n,t,a(i),r)}},toJSON:function(){return{}},toString:function(){var t=[];for(var e in this._ungap)for(var n=v(e),r=0,i=this._ungap[e];r<i.length;r++)t.push(n+"="+v(i[r]));return t.join("&")}};for(var c in s)h(f.prototype,c,{configurable:!0,writable:!0,value:s[c]});function f(t){var e=u(null);switch(h(this,"_ungap",{value:e}),!0){case!t:break;case"string"==typeof t:"?"===t.charAt(0)&&(t=t.slice(1));for(var n=t.split("&"),r=0,i=n.length;r<i;r++){var a=(s=n[r]).indexOf("=");-1<a?p(e,g(s.slice(0,a)),g(s.slice(a+1))):s.length&&p(e,g(s),"")}break;case o(t):for(var s,r=0,i=t.length;r<i;r++){p(e,(s=t[r])[0],s[1])}break;case"forEach"in t:t.forEach(l,e);break;default:for(var c in t)p(e,c,t[c])}}function l(t,e){p(this,e,t)}function p(t,e,n){var r=o(n)?n.join(","):n;e in t?t[e].push(r):t[e]=[r]}function g(t){return decodeURIComponent(t.replace(n,"%25").replace(r," "))}function v(t){return encodeURIComponent(t).replace(e,d)}function d(t){return i[t]}self.URLSearchParams=f}(Object,String,Array.isArray)}!function(d){var r=!1;try{r=!!Symbol.iterator}catch(t){}function t(t,e){var n=[];return t.forEach(e,n),r?n[Symbol.iterator]():{next:function(){var t=n.shift();return{done:void 0===t,value:t}}}}"forEach"in d||(d.forEach=function(n,r){var i=this,t=Object.create(null);this.toString().replace(/=[\s\S]*?(?:&|$)/g,"=").split("=").forEach(function(e){!e.length||e in t||(t[e]=i.getAll(e)).forEach(function(t){n.call(r,t,e,i)})})}),"keys"in d||(d.keys=function(){return t(this,function(t,e){this.push(e)})}),"values"in d||(d.values=function(){return t(this,function(t,e){this.push(t)})}),"entries"in d||(d.entries=function(){return t(this,function(t,e){this.push([e,t])})}),!r||Symbol.iterator in d||(d[Symbol.iterator]=d.entries),"sort"in d||(d.sort=function(){for(var t,e,n,r=this.entries(),i=r.next(),a=i.done,s=[],c=Object.create(null);!a;)e=(n=i.value)[0],s.push(e),e in c||(c[e]=[]),c[e].push(n[1]),a=(i=r.next()).done;for(s.sort(),t=0;t<s.length;t++)this.delete(s[t]);for(t=0;t<s.length;t++)e=s[t],this.append(e,c[e].shift())}),function(f){function l(t){var e=t.append;t.append=d.append,URLSearchParams.call(t,t._usp.search.slice(1)),t.append=e}function p(t,e){if(!(t instanceof e))throw new TypeError("'searchParams' accessed on an object that does not implement interface "+e.name)}function t(e){var n,r,i,t=e.prototype,a=v(t,"searchParams"),s=v(t,"href"),c=v(t,"search");function o(t,e){d.append.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function u(t){d.delete.call(this,t),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function h(t,e){d.set.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}!a&&c&&c.set&&(i=c,r=function(t,e){return t.append=o,t.delete=u,t.set=h,g(t,"_usp",{configurable:!0,writable:!0,value:e})},n=function(t,e){return g(t,"_searchParams",{configurable:!0,writable:!0,value:r(e,t)}),e},f.defineProperties(t,{href:{get:function(){return s.get.call(this)},set:function(t){var e=this._searchParams;s.set.call(this,t),e&&l(e)}},search:{get:function(){return c.get.call(this)},set:function(t){var e=this._searchParams;c.set.call(this,t),e&&l(e)}},searchParams:{get:function(){return p(this,e),this._searchParams||n(this,new URLSearchParams(this.search.slice(1)))},set:function(t){p(this,e),n(this,t)}}}))}var g=f.defineProperty,v=f.getOwnPropertyDescriptor;try{t(HTMLAnchorElement),/^function|object$/.test(typeof URL)&&URL.prototype&&t(URL)}catch(t){}}(Object)}(self.URLSearchParams.prototype,Object);
+var self = this || {};
+try {
+    !(function (t, e) {
+        if (
+            new t("q=%2B").get("q") !== e ||
+            new t({ q: e }).get("q") !== e ||
+            new t([["q", e]]).get("q") !== e ||
+            "q=%0A" !== new t("q=\n").toString() ||
+            "q=+%26" !== new t({ q: " &" }).toString() ||
+            "q=%25zx" !== new t({ q: "%zx" }).toString()
+        )
+            throw t;
+        self.URLSearchParams = t;
+    })(URLSearchParams, "+");
+} catch (t) {
+    !(function (t, a, o) {
+        "use strict";
+        var u = t.create,
+            h = t.defineProperty,
+            e = /[!'\(\)~]|%20|%00/g,
+            n = /%(?![0-9a-fA-F]{2})/g,
+            r = /\+/g,
+            i = {
+                "!": "%21",
+                "'": "%27",
+                "(": "%28",
+                ")": "%29",
+                "~": "%7E",
+                "%20": "+",
+                "%00": "\0",
+            },
+            s = {
+                append: function (t, e) {
+                    p(this._ungap, t, e);
+                },
+                delete: function (t) {
+                    delete this._ungap[t];
+                },
+                get: function (t) {
+                    return this.has(t) ? this._ungap[t][0] : null;
+                },
+                getAll: function (t) {
+                    return this.has(t) ? this._ungap[t].slice(0) : [];
+                },
+                has: function (t) {
+                    return t in this._ungap;
+                },
+                set: function (t, e) {
+                    this._ungap[t] = [a(e)];
+                },
+                forEach: function (e, n) {
+                    var r = this;
+                    for (var i in r._ungap) r._ungap[i].forEach(t, i);
+                    function t(t) {
+                        e.call(n, t, a(i), r);
+                    }
+                },
+                toJSON: function () {
+                    return {};
+                },
+                toString: function () {
+                    var t = [];
+                    for (var e in this._ungap)
+                        for (
+                            var n = v(e), r = 0, i = this._ungap[e];
+                            r < i.length;
+                            r++
+                        )
+                            t.push(n + "=" + v(i[r]));
+                    return t.join("&");
+                },
+            };
+        for (var c in s)
+            h(f.prototype, c, { configurable: !0, writable: !0, value: s[c] });
+        function f(t) {
+            var e = u(null);
+            switch ((h(this, "_ungap", { value: e }), !0)) {
+                case !t:
+                    break;
+                case "string" == typeof t:
+                    "?" === t.charAt(0) && (t = t.slice(1));
+                    for (
+                        var n = t.split("&"), r = 0, i = n.length;
+                        r < i;
+                        r++
+                    ) {
+                        var a = (s = n[r]).indexOf("=");
+                        -1 < a
+                            ? p(e, g(s.slice(0, a)), g(s.slice(a + 1)))
+                            : s.length && p(e, g(s), "");
+                    }
+                    break;
+                case o(t):
+                    for (var s, r = 0, i = t.length; r < i; r++) {
+                        p(e, (s = t[r])[0], s[1]);
+                    }
+                    break;
+                case "forEach" in t:
+                    t.forEach(l, e);
+                    break;
+                default:
+                    for (var c in t) p(e, c, t[c]);
+            }
+        }
+        function l(t, e) {
+            p(this, e, t);
+        }
+        function p(t, e, n) {
+            var r = o(n) ? n.join(",") : n;
+            e in t ? t[e].push(r) : (t[e] = [r]);
+        }
+        function g(t) {
+            return decodeURIComponent(t.replace(n, "%25").replace(r, " "));
+        }
+        function v(t) {
+            return encodeURIComponent(t).replace(e, d);
+        }
+        function d(t) {
+            return i[t];
+        }
+        self.URLSearchParams = f;
+    })(Object, String, Array.isArray);
+}
+!(function (d) {
+    var r = !1;
+    try {
+        r = !!Symbol.iterator;
+    } catch (t) {}
+    function t(t, e) {
+        var n = [];
+        return (
+            t.forEach(e, n),
+            r
+                ? n[Symbol.iterator]()
+                : {
+                      next: function () {
+                          var t = n.shift();
+                          return { done: void 0 === t, value: t };
+                      },
+                  }
+        );
+    }
+    "forEach" in d ||
+        (d.forEach = function (n, r) {
+            var i = this,
+                t = Object.create(null);
+            this.toString()
+                .replace(/=[\s\S]*?(?:&|$)/g, "=")
+                .split("=")
+                .forEach(function (e) {
+                    !e.length ||
+                        e in t ||
+                        (t[e] = i.getAll(e)).forEach(function (t) {
+                            n.call(r, t, e, i);
+                        });
+                });
+        }),
+        "keys" in d ||
+            (d.keys = function () {
+                return t(this, function (t, e) {
+                    this.push(e);
+                });
+            }),
+        "values" in d ||
+            (d.values = function () {
+                return t(this, function (t, e) {
+                    this.push(t);
+                });
+            }),
+        "entries" in d ||
+            (d.entries = function () {
+                return t(this, function (t, e) {
+                    this.push([e, t]);
+                });
+            }),
+        !r || Symbol.iterator in d || (d[Symbol.iterator] = d.entries),
+        "sort" in d ||
+            (d.sort = function () {
+                for (
+                    var t,
+                        e,
+                        n,
+                        r = this.entries(),
+                        i = r.next(),
+                        a = i.done,
+                        s = [],
+                        c = Object.create(null);
+                    !a;
+
+                )
+                    (e = (n = i.value)[0]),
+                        s.push(e),
+                        e in c || (c[e] = []),
+                        c[e].push(n[1]),
+                        (a = (i = r.next()).done);
+                for (s.sort(), t = 0; t < s.length; t++) this.delete(s[t]);
+                for (t = 0; t < s.length; t++)
+                    (e = s[t]), this.append(e, c[e].shift());
+            }),
+        (function (f) {
+            function l(t) {
+                var e = t.append;
+                (t.append = d.append),
+                    URLSearchParams.call(t, t._usp.search.slice(1)),
+                    (t.append = e);
+            }
+            function p(t, e) {
+                if (!(t instanceof e))
+                    throw new TypeError(
+                        "'searchParams' accessed on an object that does not implement interface " +
+                            e.name
+                    );
+            }
+            function t(e) {
+                var n,
+                    r,
+                    i,
+                    t = e.prototype,
+                    a = v(t, "searchParams"),
+                    s = v(t, "href"),
+                    c = v(t, "search");
+                function o(t, e) {
+                    d.append.call(this, t, e),
+                        (t = this.toString()),
+                        i.set.call(this._usp, t ? "?" + t : "");
+                }
+                function u(t) {
+                    d.delete.call(this, t),
+                        (t = this.toString()),
+                        i.set.call(this._usp, t ? "?" + t : "");
+                }
+                function h(t, e) {
+                    d.set.call(this, t, e),
+                        (t = this.toString()),
+                        i.set.call(this._usp, t ? "?" + t : "");
+                }
+                !a &&
+                    c &&
+                    c.set &&
+                    ((i = c),
+                    (r = function (t, e) {
+                        return (
+                            (t.append = o),
+                            (t.delete = u),
+                            (t.set = h),
+                            g(t, "_usp", {
+                                configurable: !0,
+                                writable: !0,
+                                value: e,
+                            })
+                        );
+                    }),
+                    (n = function (t, e) {
+                        return (
+                            g(t, "_searchParams", {
+                                configurable: !0,
+                                writable: !0,
+                                value: r(e, t),
+                            }),
+                            e
+                        );
+                    }),
+                    f.defineProperties(t, {
+                        href: {
+                            get: function () {
+                                return s.get.call(this);
+                            },
+                            set: function (t) {
+                                var e = this._searchParams;
+                                s.set.call(this, t), e && l(e);
+                            },
+                        },
+                        search: {
+                            get: function () {
+                                return c.get.call(this);
+                            },
+                            set: function (t) {
+                                var e = this._searchParams;
+                                c.set.call(this, t), e && l(e);
+                            },
+                        },
+                        searchParams: {
+                            get: function () {
+                                return (
+                                    p(this, e),
+                                    this._searchParams ||
+                                        n(
+                                            this,
+                                            new URLSearchParams(
+                                                this.search.slice(1)
+                                            )
+                                        )
+                                );
+                            },
+                            set: function (t) {
+                                p(this, e), n(this, t);
+                            },
+                        },
+                    }));
+            }
+            var g = f.defineProperty,
+                v = f.getOwnPropertyDescriptor;
+            try {
+                t(HTMLAnchorElement),
+                    /^function|object$/.test(typeof URL) &&
+                        URL.prototype &&
+                        t(URL);
+            } catch (t) {}
+        })(Object);
+})(self.URLSearchParams.prototype, Object);
 /* eslint-enable */
diff --git a/hypha/static_src/src/javascript/main-top.js b/hypha/static_src/src/javascript/main-top.js
index 15c8148234f410b63c43a64c189a0f2f850ccc5b..bf2afa502e5ea404c9243c2a220afe8d087181ac 100644
--- a/hypha/static_src/src/javascript/main-top.js
+++ b/hypha/static_src/src/javascript/main-top.js
@@ -1,7 +1,5 @@
 (function () {
+    "use strict";
 
-    'use strict';
-
-    document.querySelector('html').classList.replace('no-js', 'js');
-
+    document.querySelector("html").classList.replace("no-js", "js");
 })();
diff --git a/hypha/static_src/src/javascript/main.js b/hypha/static_src/src/javascript/main.js
index f69750f07fe906436cad234de5c82a6284da73ec..c37dbfc02414ce634bc9c71c260653c32ca23606 100644
--- a/hypha/static_src/src/javascript/main.js
+++ b/hypha/static_src/src/javascript/main.js
@@ -1,10 +1,9 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     let Search = class {
         static selector() {
-            return '.js-search-toggle';
+            return ".js-search-toggle";
         }
 
         constructor(node, searchForm) {
@@ -19,20 +18,24 @@
 
         toggle() {
             // show the search
-            this.searchForm[0].classList.toggle('is-visible');
+            this.searchForm[0].classList.toggle("is-visible");
 
             // swap the icons
-            this.node[0].querySelector('.header__icon--open-search').classList.toggle('is-hidden');
-            this.node[0].querySelector('.header__icon--close-search').classList.toggle('is-unhidden');
+            this.node[0]
+                .querySelector(".header__icon--open-search")
+                .classList.toggle("is-hidden");
+            this.node[0]
+                .querySelector(".header__icon--close-search")
+                .classList.toggle("is-unhidden");
 
             // add modifier to header to be able to change header icon colours
-            document.querySelector('.header').classList.toggle('search-open');
+            document.querySelector(".header").classList.toggle("search-open");
         }
     };
 
     let MobileMenu = class {
         static selector() {
-            return '.js-mobile-menu-toggle';
+            return ".js-mobile-menu-toggle";
         }
 
         constructor(node, closeButton, mobileMenu, search) {
@@ -51,28 +54,37 @@
 
         toggle() {
             // toggle mobile menu
-            this.mobileMenu[0].classList.toggle('is-visible');
+            this.mobileMenu[0].classList.toggle("is-visible");
 
             // check if search exists
             if (document.body.contains(this.search[0])) {
                 // reset the search whenever the mobile menu is toggled
-                if (this.search[0].classList.contains('is-visible')) {
-                    this.search[0].classList.toggle('is-visible');
-                    document.querySelector('.header__inner--menu-open').classList.toggle('header__inner--search-open');
+                if (this.search[0].classList.contains("is-visible")) {
+                    this.search[0].classList.toggle("is-visible");
+                    document
+                        .querySelector(".header__inner--menu-open")
+                        .classList.toggle("header__inner--search-open");
                 }
             }
 
             // reset the search show/hide icons
-            if (this.mobileMenu[0].classList.contains('is-visible') && document.body.contains(this.search[0])) {
-                document.querySelector('.header__icon--open-search-menu-closed').classList.remove('is-hidden');
-                document.querySelector('.header__icon--close-search-menu-closed').classList.remove('is-unhidden');
+            if (
+                this.mobileMenu[0].classList.contains("is-visible") &&
+                document.body.contains(this.search[0])
+            ) {
+                document
+                    .querySelector(".header__icon--open-search-menu-closed")
+                    .classList.remove("is-hidden");
+                document
+                    .querySelector(".header__icon--close-search-menu-closed")
+                    .classList.remove("is-unhidden");
             }
         }
     };
 
     let MobileSearch = class {
         static selector() {
-            return '.js-mobile-search-toggle';
+            return ".js-mobile-search-toggle";
         }
 
         constructor(node, mobileMenu, searchForm, searchToggleButton) {
@@ -89,84 +101,97 @@
 
         toggle() {
             // hide the mobile menu
-            this.mobileMenu.classList.remove('is-visible');
+            this.mobileMenu.classList.remove("is-visible");
 
             // wait for the mobile menu to close
             setTimeout(() => {
                 // open the search
-                this.searchForm.classList.add('is-visible');
+                this.searchForm.classList.add("is-visible");
 
                 // swap the icons
-                this.searchToggleButton.querySelector('.header__icon--open-search').classList.add('is-hidden');
-                this.searchToggleButton.querySelector('.header__icon--close-search').classList.add('is-unhidden');
+                this.searchToggleButton
+                    .querySelector(".header__icon--open-search")
+                    .classList.add("is-hidden");
+                this.searchToggleButton
+                    .querySelector(".header__icon--close-search")
+                    .classList.add("is-unhidden");
             }, 250);
         }
     };
 
     $(MobileMenu.selector()).each((index, el) => {
-        new MobileMenu($(el), $('.js-mobile-menu-close'), $('.header__menus--mobile'), $('.header__search'));
+        new MobileMenu(
+            $(el),
+            $(".js-mobile-menu-close"),
+            $(".header__menus--mobile"),
+            $(".header__search")
+        );
     });
 
     $(Search.selector()).each((index, el) => {
-        new Search($(el), $('.header__search'));
+        new Search($(el), $(".header__search"));
     });
 
     $(MobileSearch.selector()).each((index, el) => {
-        new MobileSearch($(el), $('.header__menus--mobile'), $('.header__search'), $('.js-search-toggle'));
+        new MobileSearch(
+            $(el),
+            $(".header__menus--mobile"),
+            $(".header__search"),
+            $(".js-search-toggle")
+        );
     });
 
     // Close the message
-    $('.js-close-message').click((e) => {
+    $(".js-close-message").click((e) => {
         e.preventDefault();
-        var message = e.target.closest('.js-message');
-        message.classList.add('messages__text--hide');
+        var message = e.target.closest(".js-message");
+        message.classList.add("messages__text--hide");
     });
 
     // reset mobile filters if they're open past the tablet breakpoint
-    $(window).resize(function resize() {
-        if ($(window).width() > 1024) {
-            $('.js-actions-toggle').removeClass('is-active');
-            $('.js-actions-sidebar').removeClass('is-visible');
-            $('.tr--parent.is-expanded').removeClass('is-expanded');
-        }
-    }).trigger('resize');
-
-    $('form').filter('.form__comments').submit(function (e) {
-        var $form = $(this);
-        var formValues = $form.serialize();
-        var previousValues = $form.attr('data-django-form-submit-last');
-
-        if (previousValues === formValues) {
-            // Previously submitted - don't submit again
-            e.preventDefault();
-        }
-        else {
-            $form.attr('data-django-form-submit-last', formValues);
-        }
-    });
-
-    // Get the header and admin bar height and set custom prop with value
-    $(window).on('load', function () {
-        const headerHeight = $('.header').outerHeight();
-        const adminbarHeight = $('.admin-bar').outerHeight();
-        document.documentElement.style.setProperty('--header-admin-height', headerHeight + adminbarHeight + 'px');
-    });
+    $(window)
+        .resize(function resize() {
+            if ($(window).width() > 1024) {
+                $(".js-actions-toggle").removeClass("is-active");
+                $(".js-actions-sidebar").removeClass("is-visible");
+                $(".tr--parent.is-expanded").removeClass("is-expanded");
+            }
+        })
+        .trigger("resize");
+
+    $("form")
+        .filter(".form__comments")
+        .submit(function (e) {
+            var $form = $(this);
+            var formValues = $form.serialize();
+            var previousValues = $form.attr("data-django-form-submit-last");
+
+            if (previousValues === formValues) {
+                // Previously submitted - don't submit again
+                e.preventDefault();
+            } else {
+                $form.attr("data-django-form-submit-last", formValues);
+            }
+        });
 
     // Setting the CSRF token on AJAX requests.
     var csrftoken = false;
-    if (typeof window.Cookies !== 'undefined') {
-        csrftoken = window.Cookies.get('csrftoken');
+    if (typeof window.Cookies !== "undefined") {
+        csrftoken = window.Cookies.get("csrftoken");
     }
     function csrfSafeMethod(method) {
         // these HTTP methods do not require CSRF protection
-        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
+        return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);
     }
     $.ajaxSetup({
         beforeSend: function (xhr, settings) {
-            if (csrftoken && !csrfSafeMethod(settings.type) && !this.crossDomain) {
-                xhr.setRequestHeader('X-CSRFToken', csrftoken);
+            if (
+                csrftoken &&
+                !csrfSafeMethod(settings.type) &&
+                !this.crossDomain
+            ) {
+                xhr.setRequestHeader("X-CSRFToken", csrftoken);
             }
-        }
+        },
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/public/all-investments-table.js b/hypha/static_src/src/javascript/public/all-investments-table.js
index 218d48c5a45f5549a2babb18a8047413976aa99e..bd95169d03e84415a3418b5309a74fb72b91c007 100644
--- a/hypha/static_src/src/javascript/public/all-investments-table.js
+++ b/hypha/static_src/src/javascript/public/all-investments-table.js
@@ -1,20 +1,22 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // add the toggle arrow before the investments titles
-    $('.all-investments-table__parent td.title').prepend('<span class="all-investments-table__toggle js-toggle-investment"><span class="arrow"></span></span>');
+    $(".all-investments-table__parent td.title").prepend(
+        '<span class="all-investments-table__toggle js-toggle-investment"><span class="arrow"></span></span>'
+    );
 
     // grab all the toggles
     const children = Array.prototype.slice.call(
-        document.querySelectorAll('.js-toggle-investment')
+        document.querySelectorAll(".js-toggle-investment")
     );
 
     // show/hide the investment child rows
     children.forEach(function (child) {
-        child.addEventListener('click', (e) => {
-            $(e.target).closest('.all-investments-table__parent').toggleClass('is-expanded');
+        child.addEventListener("click", (e) => {
+            $(e.target)
+                .closest(".all-investments-table__parent")
+                .toggleClass("is-expanded");
         });
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/public/dataviz-iframe.js b/hypha/static_src/src/javascript/public/dataviz-iframe.js
index 5c344cb4fa913c4de55a4e03f7f0b384e8e0bab6..02ace43b0133eed76a2e091884527656bb7d4061 100644
--- a/hypha/static_src/src/javascript/public/dataviz-iframe.js
+++ b/hypha/static_src/src/javascript/public/dataviz-iframe.js
@@ -1,29 +1,30 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    if (window.location.pathname.indexOf('visualizing-otf-application-data') !== -1) {
-        var $dataviz_iframe = $('<iframe/>', {
-            id: 'dataviz',
-            src: 'https://dataviz.opentech.fund/',
-            title: 'Visualizing OTF Application Data',
-            width: '100%',
-            height: '140rem',
-            frameborder: 0
+    if (
+        window.location.pathname.indexOf("visualizing-otf-application-data") !==
+        -1
+    ) {
+        var $dataviz_iframe = $("<iframe/>", {
+            id: "dataviz",
+            src: "https://dataviz.opentech.fund/",
+            title: "Visualizing OTF Application Data",
+            width: "100%",
+            height: "140rem",
+            frameborder: 0,
         });
-        $('.section--share').before($dataviz_iframe);
+        $(".section--share").before($dataviz_iframe);
     }
 
-    if (window.location.pathname.indexOf('impacts-and-outcomes') !== -1) {
-        var $dataviz_iframe2 = $('<iframe/>', {
-            id: 'dataviz',
-            src: 'https://dataviz.opentech.fund/impacts/',
-            title: 'Impacts and Outcomes',
-            width: '100%',
-            height: '550rem',
-            frameborder: 0
+    if (window.location.pathname.indexOf("impacts-and-outcomes") !== -1) {
+        var $dataviz_iframe2 = $("<iframe/>", {
+            id: "dataviz",
+            src: "https://dataviz.opentech.fund/impacts/",
+            title: "Impacts and Outcomes",
+            width: "100%",
+            height: "550rem",
+            frameborder: 0,
         });
-        $('.section--share').before($dataviz_iframe2);
+        $(".section--share").before($dataviz_iframe2);
     }
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/public/investment-filters.js b/hypha/static_src/src/javascript/public/investment-filters.js
index dcd8bff44b19c660df2fc39f7357f6da06c659e4..67be8de506edc2322097194dc66ede6989124776 100644
--- a/hypha/static_src/src/javascript/public/investment-filters.js
+++ b/hypha/static_src/src/javascript/public/investment-filters.js
@@ -1,32 +1,34 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     // Variables
-    const $toggleButton = $('.js-toggle-filters');
-    const $closeButton = $('.js-close-filters');
-    const $clearButton = $('.js-clear-filters');
-    const filterOpenClass = 'filters-open';
-    const filterActiveClass = 'is-active';
+    const $toggleButton = $(".js-toggle-filters");
+    const $closeButton = $(".js-close-filters");
+    const $clearButton = $(".js-clear-filters");
+    const filterOpenClass = "filters-open";
+    const filterActiveClass = "is-active";
 
     const urlParams = new URLSearchParams(window.location.search);
 
-    const persistedParams = ['sort', 'query', 'investment'];
+    const persistedParams = ["sort", "query", "investment"];
 
     // check if the page has a query string and keep filters open if so on desktop
     const minimumNumberParams = persistedParams.reduce(
-        (count, param) => count + urlParams.has(param) ? 1 : 0,
+        (count, param) => (count + urlParams.has(param) ? 1 : 0),
         0
     );
 
-    if ([...urlParams].length > minimumNumberParams && $(window).width() > 1024) {
-        $('.filters').addClass(filterOpenClass);
-        $('.js-toggle-filters').text('Clear filters');
+    if (
+        [...urlParams].length > minimumNumberParams &&
+        $(window).width() > 1024
+    ) {
+        $(".filters").addClass(filterOpenClass);
+        $(".js-toggle-filters").text("Clear filters");
     }
 
     // Add active class to filters - dropdowns are dynamically appended to the dom,
     // so we have to listen for the event higher up
-    $('body').on('click', '.select2-dropdown', (e) => {
+    $("body").on("click", ".select2-dropdown", (e) => {
         // get the id of the dropdown
         let selectId = e.target.parentElement.parentElement.id;
 
@@ -34,16 +36,15 @@
         let match = $(`.select2-selection[aria-owns="${selectId}"]`);
 
         // if the dropdown contains a clear class, the filters are active
-        if ($(match[0]).find('span.select2-selection__clear').length !== 0) {
+        if ($(match[0]).find("span.select2-selection__clear").length !== 0) {
             match[0].classList.add(filterActiveClass);
-        }
-        else {
+        } else {
             match[0].classList.remove(filterActiveClass);
         }
     });
 
     // remove active class on clearing select2
-    $('.select2').on('select2:unselecting', (e) => {
+    $(".select2").on("select2:unselecting", (e) => {
         const dropdown = e.target.nextElementSibling.firstChild.firstChild;
         if (dropdown.classList.contains(filterActiveClass)) {
             dropdown.classList.remove(filterActiveClass);
@@ -51,14 +52,14 @@
     });
 
     // toggle filters
-    $toggleButton.on('click', (e) => {
+    $toggleButton.on("click", (e) => {
         // find the nearest filters
-        const filters = e.target.closest('.js-table-actions').nextElementSibling;
+        const filters =
+            e.target.closest(".js-table-actions").nextElementSibling;
 
         if (filters.classList.contains(filterOpenClass)) {
             handleClearFilters();
-        }
-        else {
+        } else {
             filters.classList.add(filterOpenClass);
             // only update button text on desktop
             if (window.innerWidth >= 1024) {
@@ -68,94 +69,112 @@
     });
 
     // close filters on mobile
-    $closeButton.on('click', (e) => {
-        e.target.closest('.filters').classList.remove(filterOpenClass);
+    $closeButton.on("click", (e) => {
+        e.target.closest(".filters").classList.remove(filterOpenClass);
     });
 
     // redirect to investments home to clear filters
     function handleClearFilters() {
         const query = persistedParams.reduce(
-            (query, param) => query + (urlParams.get(param) ? `&${param}=${urlParams.get(param)}` : ''), '?');
-        window.location.href = window.location.href.split('?')[0] + query;
+            (query, param) =>
+                query +
+                (urlParams.get(param)
+                    ? `&${param}=${urlParams.get(param)}`
+                    : ""),
+            "?"
+        );
+        window.location.href = window.location.href.split("?")[0] + query;
     }
 
     // toggle filters button wording
     function updateButtonText(button, filters) {
         if (filters.classList.contains(filterOpenClass)) {
-            button.textContent = 'Clear filters';
-        }
-        else {
-            button.textContent = 'Filters';
+            button.textContent = "Clear filters";
+        } else {
+            button.textContent = "Filters";
         }
     }
 
     // corrects spacing of dropdowns when toggled on mobile
     function mobileFilterPadding(element) {
-        const expanded = 'expanded-filter-element';
-        const dropdown = $(element).closest('.select2');
-        const openDropdown = $('.select2 .' + expanded);
+        const expanded = "expanded-filter-element";
+        const dropdown = $(element).closest(".select2");
+        const openDropdown = $(".select2 ." + expanded);
         let dropdownMargin = 0;
 
-        if (openDropdown.length > 0 && !openDropdown.hasClass('select2-container--open')) {
+        if (
+            openDropdown.length > 0 &&
+            !openDropdown.hasClass("select2-container--open")
+        ) {
             // reset the margin of the select we previously worked
             openDropdown.removeClass(expanded);
             // store the offset to adjust the new select box (elements above the old dropdown unaffected)
             if (dropdown.position().top > openDropdown.position().top) {
-                dropdownMargin = parseInt(openDropdown.css('marginBottom'));
+                dropdownMargin = parseInt(openDropdown.css("marginBottom"));
             }
-            openDropdown.css('margin-bottom', '0px');
+            openDropdown.css("margin-bottom", "0px");
         }
 
-        if (dropdown.hasClass('select2-container--open')) {
+        if (dropdown.hasClass("select2-container--open")) {
             dropdown.addClass(expanded);
-            const dropdownID = $(element).closest('.select2-selection').attr('aria-owns');
+            const dropdownID = $(element)
+                .closest(".select2-selection")
+                .attr("aria-owns");
             // Element which has the height of the select dropdown
             const match = $(`ul#${dropdownID}`);
             const dropdownHeight = match.outerHeight(true);
 
             // Element which has the position of the dropdown
-            const positionalMatch = match.closest('.select2-container');
+            const positionalMatch = match.closest(".select2-container");
 
             // Pad the bottom of the select box
-            dropdown.css('margin-bottom', `${dropdownHeight}px`);
+            dropdown.css("margin-bottom", `${dropdownHeight}px`);
 
             // bump up the dropdown options by height of closed elements
-            positionalMatch.css('top', positionalMatch.position().top - dropdownMargin);
+            positionalMatch.css(
+                "top",
+                positionalMatch.position().top - dropdownMargin
+            );
         }
     }
 
     // clear all filters
-    $clearButton.on('click', () => {
-        const dropdowns = document.querySelectorAll('.form__filters select');
-        dropdowns.forEach(dropdown => {
-            $(dropdown).val(null).trigger('change');
-            $('.select2-selection.is-active').removeClass(filterActiveClass);
+    $clearButton.on("click", () => {
+        const dropdowns = document.querySelectorAll(".form__filters select");
+        dropdowns.forEach((dropdown) => {
+            $(dropdown).val(null).trigger("change");
+            $(".select2-selection.is-active").removeClass(filterActiveClass);
             mobileFilterPadding(dropdown); // eslint-disable-line no-undef
         });
     });
 
     $(function () {
         // Add active class to select2 checkboxes after page has been filtered
-        const clearButtons = document.querySelectorAll('.select2-selection__clear');
-        clearButtons.forEach(clearButton => {
-            clearButton.parentElement.parentElement.classList.add(filterActiveClass);
+        const clearButtons = document.querySelectorAll(
+            ".select2-selection__clear"
+        );
+        clearButtons.forEach((clearButton) => {
+            clearButton.parentElement.parentElement.classList.add(
+                filterActiveClass
+            );
         });
     });
 
     // reset mobile filters if they're open past the tablet breakpoint
-    $(window).resize(function resize() {
-        if ($(window).width() < 1024) {
-            // close the filters if open when reducing the window size
-            $('body').removeClass('filters-open');
-
-            // update filter button text
-            $('.js-toggle-filters').text('Filters');
-
-            // Correct spacing of dropdowns when toggled
-            $('.select2').on('click', (e) => {
-                mobileFilterPadding(e.target);
-            });
-        }
-    }).trigger('resize');
-
+    $(window)
+        .resize(function resize() {
+            if ($(window).width() < 1024) {
+                // close the filters if open when reducing the window size
+                $("body").removeClass("filters-open");
+
+                // update filter button text
+                $(".js-toggle-filters").text("Filters");
+
+                // Correct spacing of dropdowns when toggled
+                $(".select2").on("click", (e) => {
+                    mobileFilterPadding(e.target);
+                });
+            }
+        })
+        .trigger("resize");
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/public/investment-tooltips.js b/hypha/static_src/src/javascript/public/investment-tooltips.js
index 0b81c0f242b0c81a6d409b9c16b2e70c7b94e6dc..3d1c38986472a74938c9870d91d048b6e02e1569 100644
--- a/hypha/static_src/src/javascript/public/investment-tooltips.js
+++ b/hypha/static_src/src/javascript/public/investment-tooltips.js
@@ -1,26 +1,25 @@
 (function ($) {
-
-    'use strict';
+    "use strict";
 
     function generateTooltips() {
-
         // get the investments titles
-        const titles = Array.prototype.slice.call(document.querySelectorAll('.js-title'));
+        const titles = Array.prototype.slice.call(
+            document.querySelectorAll(".js-title")
+        );
 
         // if the tile has been truncated...
         titles.forEach(function (title) {
-            if (title.textContent.indexOf('...') >= 0) {
+            if (title.textContent.indexOf("...") >= 0) {
                 addToolTip(title);
             }
         });
 
         // ...add a tooltip class
         function addToolTip(title) {
-            title.classList.add('has-tooltip');
+            title.classList.add("has-tooltip");
         }
     }
 
     // Add tooltips to truncated titles on investments overview table
     generateTooltips();
-
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/public/page-box.js b/hypha/static_src/src/javascript/public/page-box.js
index 188079985498cad1ee2a38e2911d3ba708e63c51..93a5161a717267b3d496a4b0aa883aa04bad1e7c 100644
--- a/hypha/static_src/src/javascript/public/page-box.js
+++ b/hypha/static_src/src/javascript/public/page-box.js
@@ -1,7 +1,11 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('.page-box').wrapAll('<div class="wrapper wrapper--breakout wrapper--inner-space-large wrapper--page-box" />').wrapAll('<div class="wrapper wrapper--small wrapper--flex page-boxes" />');
-
+    $(".page-box")
+        .wrapAll(
+            '<div class="wrapper wrapper--breakout wrapper--inner-space-large wrapper--page-box" />'
+        )
+        .wrapAll(
+            '<div class="wrapper wrapper--small wrapper--flex page-boxes" />'
+        );
 })(jQuery);
diff --git a/hypha/static_src/src/javascript/public/protect-form.js b/hypha/static_src/src/javascript/public/protect-form.js
index 64f98cba72d6eb72729aa34b739635c2f9a8fde9..6377e5322248b7064277913f5d21118925765e72 100644
--- a/hypha/static_src/src/javascript/public/protect-form.js
+++ b/hypha/static_src/src/javascript/public/protect-form.js
@@ -1,37 +1,35 @@
 (function ($) {
+    "use strict";
 
-    'use strict';
-
-    $('.wagtail-form, .newsletter-form').each(function () {
+    $(".wagtail-form, .newsletter-form").each(function () {
         var $protect_form = $(this);
         var $protect_form_button = $protect_form.find('button[type="submit"]');
-        var protect_form_action = $protect_form.data('actionpath');
+        var protect_form_action = $protect_form.data("actionpath");
 
         // Remove the "no javascript" messages
-        $('.message-no-js').detach();
+        $(".message-no-js").detach();
 
         // Wait for a mouse to move, indicating they are human.
-        $('body').mousemove(function () {
+        $("body").mousemove(function () {
             // Unlock the form.
-            $protect_form.attr('action', protect_form_action);
-            $protect_form_button.attr('disabled', false);
+            $protect_form.attr("action", protect_form_action);
+            $protect_form_button.attr("disabled", false);
         });
 
         // Wait for a touch move event, indicating that they are human.
-        $('body').on('touchmove', function () {
+        $("body").on("touchmove", function () {
             // Unlock the form.
-            $protect_form.attr('action', protect_form_action);
-            $protect_form_button.attr('disabled', false);
+            $protect_form.attr("action", protect_form_action);
+            $protect_form_button.attr("disabled", false);
         });
 
         // A tab or enter key pressed can also indicate they are human.
-        $('body').keydown(function (e) {
-            if ((e.keyCode === 9) || (e.keyCode === 13)) {
+        $("body").keydown(function (e) {
+            if (e.keyCode === 9 || e.keyCode === 13) {
                 // Unlock the form.
-                $protect_form.attr('action', protect_form_action);
-                $protect_form_button.attr('disabled', false);
+                $protect_form.attr("action", protect_form_action);
+                $protect_form_button.attr("disabled", false);
             }
         });
     });
-
 })(jQuery);
diff --git a/hypha/static_src/src/sass/apply/abstracts/_functions.scss b/hypha/static_src/src/sass/apply/abstracts/_functions.scss
index bc9d71f89d259a35b9e0455fb348ccae3028a7a2..89b4f08abf25fd4d95be2cea5237d6d39f540a40 100644
--- a/hypha/static_src/src/sass/apply/abstracts/_functions.scss
+++ b/hypha/static_src/src/sass/apply/abstracts/_functions.scss
@@ -1,6 +1,6 @@
 // stylelint-disable scss/function-unquote-no-unquoted-strings-inside
 
-@use 'sass:math';
+@use "sass:math";
 
 // Strip the unit from the given value and return the value
 @function strip-unit($value) {
@@ -18,20 +18,23 @@
 @function opposite-direction($directions) {
     $opposite-directions: ();
     $direction-map: (
-        'top':    'bottom',
-        'right':  'left',
-        'bottom': 'top',
-        'left':   'right',
-        'center': 'center',
-        'ltr':    'rtl',
-        'rtl':    'ltr'
+        "top": "bottom",
+        "right": "left",
+        "bottom": "top",
+        "left": "right",
+        "center": "center",
+        "ltr": "rtl",
+        "rtl": "ltr",
     );
 
     @each $direction in $directions {
         $direction: to-lower-case($direction);
 
         @if map-has-key($direction-map, $direction) {
-            $opposite-directions: append($opposite-directions, unquote(map-get($direction-map, $direction)));
+            $opposite-directions: append(
+                $opposite-directions,
+                unquote(map-get($direction-map, $direction))
+            );
         } @else {
             @warn 'No opposite direction can be found for `#{$direction}`. Direction omitted.';
         }
diff --git a/hypha/static_src/src/sass/apply/abstracts/_mixins.scss b/hypha/static_src/src/sass/apply/abstracts/_mixins.scss
index d10f66f96e0e98eaf3267ed275db44af09d98a5c..20d7fe93e608107988dea61c807af82753a92ceb 100644
--- a/hypha/static_src/src/sass/apply/abstracts/_mixins.scss
+++ b/hypha/static_src/src/sass/apply/abstracts/_mixins.scss
@@ -1,12 +1,12 @@
 // stylelint-disable
 
-@use 'sass:math';
+@use "sass:math";
 
 // Media queries
 @mixin media-query($queries...) {
     @each $query in $queries {
         @each $breakpoint in $breakpoints {
-            $name:        nth($breakpoint, 1);
+            $name: nth($breakpoint, 1);
             $declaration: nth($breakpoint, 2);
 
             @if $query == $name and $declaration {
@@ -20,11 +20,21 @@
 
 //   Placeholder text
 @mixin placeholder-text {
-    &.placeholder { @content; }
-    &:-moz-placeholder { @content; }
-    &::-moz-placeholder { @content; }
-    &:-ms-input-placeholder { @content; }
-    &::-webkit-input-placeholder { @content; }
+    &.placeholder {
+        @content;
+    }
+    &:-moz-placeholder {
+        @content;
+    }
+    &::-moz-placeholder {
+        @content;
+    }
+    &:-ms-input-placeholder {
+        @content;
+    }
+    &::-webkit-input-placeholder {
+        @content;
+    }
 }
 
 // Hide text
@@ -45,14 +55,12 @@
 
 // Output a rem value for the given property
 @mixin rem($property, $values) {
-
     $rem: ();
 
     @each $value in $values {
         @if $value == 0 or $value == auto or $value == inherit {
             $rem: append($rem, $value);
-        }
-        @else {
+        } @else {
             $rem: append($rem, rem(strip-unit($value)));
         }
     }
@@ -70,15 +78,14 @@
 
     @if $size == null {
         @warn 'Font size ‘#{$keyword}’ does not exist';
-    }
-    @else {
+    } @else {
         @include rem-font-size($size);
     }
 }
 
 // Button mixin
 @mixin button($bg, $hover-bg) {
-    padding: .5em 50px;
+    padding: 0.5em 50px;
     font-weight: $weight--bold;
     color: $color--white;
     text-align: center;
@@ -121,18 +128,20 @@
 // Wide button mixin
 @mixin button--wide {
     @include media-query(tablet-landscape) {
-        padding: .5em 80px;
+        padding: 0.5em 80px;
     }
 }
 
 // Viewport sized typography mixin that takes a min and max pixel-based value
 @mixin responsive-font-sizes($min, $max) {
-
-    $vw-context: (1260 * .1) * 1px;
+    $vw-context: (1260 * 0.1) * 1px;
     $responsive: math.div($max, $vw-context) * 10vw;
 
-    $responsive-unitless: math.div($responsive, ($responsive - $responsive + 1));
-    $dimension: if(unit($responsive) == 'vh', 'height', 'width');
+    $responsive-unitless: math.div(
+        $responsive,
+        ($responsive - $responsive + 1)
+    );
+    $dimension: if(unit($responsive) == "vh", "height", "width");
     $min-breakpoint: math.div($min, $responsive-unitless) * 100;
 
     @media (max-#{$dimension}: #{$min-breakpoint}) {
@@ -159,7 +168,7 @@
 
     width: 0;
     height: 0;
-    content: '';
+    content: "";
     border-#{opposite-direction($direction)}: ($size * 1.5) solid $color;
 
     $perpendicular-borders: $size solid transparent;
@@ -167,12 +176,11 @@
     @if $direction == top or $direction == bottom {
         border-right: $perpendicular-borders;
         border-left: $perpendicular-borders;
-    }
-    @else if $direction == right or $direction == left {
+    } @else if $direction == right or $direction == left {
         border-top: $perpendicular-borders;
         border-bottom: $perpendicular-borders;
     }
-  }
+}
 
 // used for the submission list items in the react app
 @mixin submission-list-item {
@@ -215,34 +223,11 @@
     }
 }
 
-@mixin column-scrolling {
-    @include media-query(tablet-landscape) {
-        height: calc(100vh - var(--header-admin-height) - #{$listing-header-height});
-        overflow-y: scroll;
-    }
-
-    @include media-query(laptop-short) {
-        // allow for vertical scrolling on laptops
-        height: calc(100vh -  #{$listing-header-height});
-    }
-}
-
 @mixin table-checkbox {
-    input[type='checkbox'] {
+    input[type="checkbox"] {
         margin: 0 auto;
         display: block;
-        width: 20px;
-        height: 20px;
-        border: 1px solid $color--mid-grey;
-        -webkit-appearance: none;
-        -moz-appearance: none;
-        appearance: none;
-        background-color: $color--white;
-
-        &:checked {
-            background: url('./../../images/tick.svg') $color--dark-blue center no-repeat;
-            background-size: 12px;
-            border: 1px solid $color--dark-blue;
-        }
+        width: 1.1rem;
+        height: 1.1rem;
     }
 }
diff --git a/hypha/static_src/src/sass/apply/abstracts/_variables.scss b/hypha/static_src/src/sass/apply/abstracts/_variables.scss
index af9e997dfff216c4f90ec3deb7fa722d703c9e96..5b97abe40812eb9baa1b7f87f5da9d5a0d50eec8 100644
--- a/hypha/static_src/src/sass/apply/abstracts/_variables.scss
+++ b/hypha/static_src/src/sass/apply/abstracts/_variables.scss
@@ -2,13 +2,12 @@
 // stylelint-disable color-function-notation, color-no-hex, alpha-value-notation
 // Set via JS
 :root {
-    --header-admin-height: 0;
     --last-listing-item-height: 0;
 }
 
 // Default
 $color--white: #fff;
-$color--black: #141414;
+$color--black: #1f2328;
 $color--light-grey: #f7f7f7;
 $color--light-mid-grey: #e8e8e8;
 $color--mid-grey: #cfcfcf;
@@ -18,7 +17,7 @@ $color--dark-grey: #404041;
 // Brand
 $color--lightest-blue: #24aae1;
 $color--light-blue: #1d79a8;
-$color--light-blue-90: transparentize($color--light-blue, .9);
+$color--light-blue-90: transparentize($color--light-blue, 0.9);
 $color--lighter-blue: #7ab8d4;
 $color--dark-blue: #0c72a0;
 $color--darkest-blue: #3d6bdb;
@@ -46,28 +45,28 @@ $color--linkedin: #137ab8;
 $color--facebook: #396ab5;
 
 // Transparent
-$color--black-60: rgba(0, 0, 0, .6);
-$color--black-50: rgba(0, 0, 0, .5);
-$color--black-40: rgba(0, 0, 0, .4);
-$color--black-25: rgba(0, 0, 0, .25);
-$color--black-20: rgba(0, 0, 0, .2);
-$color--black-10: rgba(0, 0, 0, .1);
-$color--white-50: rgba(255, 255, 255, .5);
-$color--white-40: rgba(255, 255, 255, .4);
-$color--white-25: rgba(255, 255, 255, .25);
-$color--white-20: rgba(255, 255, 255, .2);
-$color--white-10: rgba(255, 255, 255, .1);
+$color--black-60: rgba(0, 0, 0, 0.6);
+$color--black-50: rgba(0, 0, 0, 0.5);
+$color--black-40: rgba(0, 0, 0, 0.4);
+$color--black-25: rgba(0, 0, 0, 0.25);
+$color--black-20: rgba(0, 0, 0, 0.2);
+$color--black-10: rgba(0, 0, 0, 0.1);
+$color--white-50: rgba(255, 255, 255, 0.5);
+$color--white-40: rgba(255, 255, 255, 0.4);
+$color--white-25: rgba(255, 255, 255, 0.25);
+$color--white-20: rgba(255, 255, 255, 0.2);
+$color--white-10: rgba(255, 255, 255, 0.1);
 
 // Assignment
-$color--default: $color--dark-grey;
+$color--default: $color--black;
 $color--primary: $color--light-blue;
 $color--error: $color--tomato;
 $color--correct: $color--mint;
 $color--button-disabled: $color--lighter-blue;
 
 // Fonts
-$font--primary: 'Source Sans Pro';
-$font--headings: 'Source Sans Pro';
+$font--primary: "Source Sans Pro";
+$font--headings: "Source Sans Pro";
 
 // Font weights
 $weight--black: 800;
@@ -78,17 +77,17 @@ $weight--light: 200;
 
 // Font sizes
 $base-font-size: 16px;
-$base-font-size-large: 19px;
+$base-font-size-large: 18px;
 $base-line-height: 24px;
-$base-line-height-large: 29px;
+$base-line-height-large: 28px;
 $font-sizes: (
-    alpha:   72px,
-    beta:    42px,
-    gamma:   36px,
-    delta:   24px,
-    epsilon: 17px,
-    zeta:    15px,
-    milli:   13px
+    alpha: 36px,
+    beta: 30px,
+    gamma: 28px,
+    delta: 24px,
+    epsilon: 18px,
+    zeta: 14px,
+    milli: 12px,
 );
 
 // Wrappers
@@ -101,21 +100,21 @@ $max-text-line-length: 50em;
 
 // Breakpoints
 $breakpoints: (
-    'mob-portrait'      '(min-width: 320px)',
-    'mob-landscape'     '(min-width: 480px)',
-    'small-tablet'      '(min-width: 600px)',
-    'tablet-portrait'   '(min-width: 768px)',
-    'tablet-landscape'  '(min-width: 1024px)',
-    'laptop-short'      '(min-width: 1024px) and (max-height: 1280px)',
-    'desktop'           '(min-width: 1320px)',
-    'desktop-medium'    '(min-width: 1920px)',
-    'desktop-wide'      '(min-width: 2556px)'
+    "mob-portrait" "(min-width: 320px)",
+    "mob-landscape" "(min-width: 480px)",
+    "small-tablet" "(min-width: 600px)",
+    "tablet-portrait" "(min-width: 768px)",
+    "tablet-landscape" "(min-width: 1024px)",
+    "laptop-short" "(min-width: 1024px) and (max-height: 1280px)",
+    "desktop" "(min-width: 1320px)",
+    "desktop-medium" "(min-width: 1920px)",
+    "desktop-wide" "(min-width: 2556px)"
 );
 
 // Transition
-$transition: .25s ease-out;
-$quick-transition: .15s ease;
-$medium-transition: .5s ease;
+$transition: 0.25s ease-out;
+$quick-transition: 0.15s ease;
+$medium-transition: 0.5s ease;
 
 // Delays
 $base-delay: 30ms;
@@ -124,13 +123,10 @@ $base-delay: 30ms;
 $mobile-gutter: 20px;
 
 // Filters
-$filter-dropdown: '.select2 .select2-selection.select2-selection--single';
-
-// listing header/spacer height
-$listing-header-height: 75px;
+$filter-dropdown: ".select2 .select2-selection.select2-selection--single";
 
 // Table breakpoint
-$table-breakpoint: 'tablet-landscape';
+$table-breakpoint: "tablet-landscape";
 
 // Dropdown height
 $dropdown-height: 45px;
diff --git a/hypha/static_src/src/sass/apply/base/_base.scss b/hypha/static_src/src/sass/apply/base/_base.scss
index 855804bcfb0bfcd1f2c64542aa039dacd685d440..4952f470f66c5f9c4a17395a0775961e8df19e3c 100644
--- a/hypha/static_src/src/sass/apply/base/_base.scss
+++ b/hypha/static_src/src/sass/apply/base/_base.scss
@@ -1,30 +1,10 @@
 // stylelint-disable property-no-vendor-prefix
-
-// Box Sizing
-*,
-*::before,
-*::after {
-    box-sizing: border-box;
-}
-
-// Prevent text size change on orientation change.
-html {
-    font-family: $font--primary;
-    -webkit-text-size-adjust: 100%;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-}
-
 body {
     overflow-x: hidden;
 
     &.no-scroll {
         overflow-y: hidden;
     }
-
-    &.app-open {
-        overflow: hidden;
-    }
 }
 
 // Prevent empty space below images appearing
@@ -33,19 +13,6 @@ svg {
     vertical-align: top;
 }
 
-// Responsive images
-img {
-    height: auto;
-    max-width: 100%;
-}
-
-button,
-input,
-select,
-textarea {
-    font-family: inherit;
-}
-
 a {
     color: $color--primary;
     text-decoration: none;
@@ -56,14 +23,7 @@ a {
 }
 
 p {
-    margin-block: 1rem;
-}
-
-ul,
-ol {
-    padding: 0;
-    margin: 0;
-    list-style: none;
+    margin-block: 0.5rem;
 }
 
 details > summary {
@@ -125,10 +85,6 @@ details > summary {
     left: 0;
 }
 
-.light-grey-bg {
-    background-color: $color--light-grey;
-}
-
 .mid-grey-text {
     color: $color--mid-dark-grey;
 }
diff --git a/hypha/static_src/src/sass/apply/base/_typography.scss b/hypha/static_src/src/sass/apply/base/_typography.scss
index 40a1847267e6603a7cb74e635f8de2eaed463a68..e08ce072e9f6de77e1f1bde29ae00cefe0c47d45 100644
--- a/hypha/static_src/src/sass/apply/base/_typography.scss
+++ b/hypha/static_src/src/sass/apply/base/_typography.scss
@@ -1,10 +1,8 @@
-@use 'sass:math';
+@use "sass:math";
 
 // $TYPOGRAPHY
 // Base font
 html {
-    font-size: math.div($base-font-size, 16px) * 100%;
-    line-height: math.div($base-line-height, $base-font-size);
     color: $color--default;
 }
 
@@ -15,9 +13,8 @@ html {
 */
 @mixin heading-text {
     margin: 0 0 1rem;
-    font-family: $font--headings;
     font-style: inherit;
-    font-weight: $weight--bold;
+    font-weight: $weight--semibold;
 }
 
 @mixin body-text {
@@ -45,32 +42,39 @@ h6,
 h1,
 %h1,
 .alpha {
-    @include responsive-font-sizes(40px, map-get($font-sizes, alpha));
-    font-weight: $weight--black;
+    font-size: 2.25rem;
+    line-height: 2.5rem;
+    font-weight: 400;
 }
 
 h2,
 %h2,
 .beta {
-    @include responsive-font-sizes(30px, map-get($font-sizes, beta));
+    font-size: 1.875rem;
+    line-height: 2.25rem;
+    font-weight: 500;
 }
 
 h3,
 %h3,
 .gamma {
-    @include responsive-font-sizes(20px, map-get($font-sizes, gamma));
+    font-size: 1.5rem;
+    line-height: 2rem;
 }
 
 h4,
 %h4,
 .delta {
-    @include responsive-font-sizes(18px, map-get($font-sizes, delta));
+    font-size: 1.25rem;
+    line-height: 1.75rem;
 }
 
 h5,
 %h5,
 .epsilon {
-    @include responsive-font-sizes(15px, map-get($font-sizes, epsilon));
+    font-size: 1.125rem;
+    line-height: 1.75rem;
+    font-weight: 600;
 }
 
 h6,
@@ -81,5 +85,6 @@ h6,
 
 small,
 .milli {
-    @include font-size(milli);
+    font-size: 0.875rem;
+    line-height: 1.25rem;
 }
diff --git a/hypha/static_src/src/sass/apply/components/_activity-notifications.scss b/hypha/static_src/src/sass/apply/components/_activity-notifications.scss
index f6e2215a30a49ef0d8db9bca611d7a44f5fa7b8b..cd26e229c1fb2a92a03162cf183117d2dd135d4f 100644
--- a/hypha/static_src/src/sass/apply/components/_activity-notifications.scss
+++ b/hypha/static_src/src/sass/apply/components/_activity-notifications.scss
@@ -12,16 +12,18 @@
     &__content {
         position: absolute;
         right: 1em;
-        margin-top: .5rem;
-        padding-bottom: .25rem;
+        margin-top: 0.5rem;
+        padding-bottom: 0.25rem;
         background-color: $color--white;
         border: 1px solid $color--light-grey;
         min-width: 400px;
-        box-shadow: rgba(0, 0, 0, 10%) 0 4px 6px -1px, rgba(0, 0, 0, 6%) 0 2px 4px -1px;  /* stylelint-disable-line */
+        box-shadow:
+            rgba(#000, 10%) 0 4px 6px -1px,
+            rgba(#000, 6%) 0 2px 4px -1px;
     }
 
     &__header {
-        padding: .75rem 1rem;
+        padding: 0.75rem 1rem;
         display: flex;
         justify-content: space-between;
         border-bottom: 1px solid $color--light-grey;
@@ -35,7 +37,7 @@
 
     &__item {
         margin: 0;
-        padding: .75rem 1rem;
+        padding: 0.75rem 1rem;
         border-bottom: 1px solid $color--light-grey;
 
         &:last-child {
diff --git a/hypha/static_src/src/sass/apply/components/_admin-bar.scss b/hypha/static_src/src/sass/apply/components/_admin-bar.scss
index f9a0d081298b4206ccec0a99a5f01a678feac4ca..2a836d18de7ff5dc63921c0d30bbc7d9c7764e16 100644
--- a/hypha/static_src/src/sass/apply/components/_admin-bar.scss
+++ b/hypha/static_src/src/sass/apply/components/_admin-bar.scss
@@ -43,7 +43,7 @@
 
         &::before {
             @include triangle(top, currentColor, 5px);
-            margin-right: .5rem;
+            margin-right: 0.5rem;
             transform: rotate(-90deg);
         }
     }
diff --git a/hypha/static_src/src/sass/apply/components/_alert.scss b/hypha/static_src/src/sass/apply/components/_alert.scss
index 9c1997b5e6fe28000fd9986286f5cc3f51c73371..90d1e9ecbddabd45423e7be7c5010500366f12b7 100644
--- a/hypha/static_src/src/sass/apply/components/_alert.scss
+++ b/hypha/static_src/src/sass/apply/components/_alert.scss
@@ -14,7 +14,7 @@
         width: 25px;
         height: 25px;
         fill: $color--light-blue;
-        margin-right: .8rem;
+        margin-right: 0.8rem;
     }
 
     &__text {
diff --git a/hypha/static_src/src/sass/apply/components/_all-reviews-table.scss b/hypha/static_src/src/sass/apply/components/_all-reviews-table.scss
index 666499c49642c7debe1f3a6b4b0ff5a3366d2f6f..00553701828ef1172cd96cc7b604917694adef94 100644
--- a/hypha/static_src/src/sass/apply/components/_all-reviews-table.scss
+++ b/hypha/static_src/src/sass/apply/components/_all-reviews-table.scss
@@ -37,34 +37,6 @@
                     display: table-cell;
                 }
 
-                &.has-tooltip {
-                    @include media-query($table-breakpoint) {
-                        &::before {
-                            position: absolute;
-                            top: 50px;
-                            left: 45px;
-                            z-index: -1;
-                            width: 200px;
-                            padding: 5px;
-                            font-size: 12px;
-                            font-weight: $weight--normal;
-                            white-space: normal;
-                            background: $color--sky-blue;
-                            border: 1px solid $color--marine;
-                            content: attr(data-title-tooltip);
-                            opacity: 0;
-                            transition: opacity $transition;
-                        }
-
-                        &:hover {
-                            &::before {
-                                z-index: 10;
-                                opacity: 1;
-                            }
-                        }
-                    }
-                }
-
                 a {
                     color: $color--primary;
                 }
diff --git a/hypha/static_src/src/sass/apply/components/_all-submissions-table.scss b/hypha/static_src/src/sass/apply/components/_all-submissions-table.scss
index 5b2346cb7b96705a6129250e430ac675a527ca5e..9ab67a2422f5812a8ef9da2ba2e18b538828c66d 100644
--- a/hypha/static_src/src/sass/apply/components/_all-submissions-table.scss
+++ b/hypha/static_src/src/sass/apply/components/_all-submissions-table.scss
@@ -1,4 +1,4 @@
-// stylelint-disable selector-max-compound-selectors
+// stylelint-disable selector-class-pattern,selector-max-compound-selectors
 
 .all-submissions-table {
     @include table-ordering-styles;
@@ -14,11 +14,11 @@
         }
 
         th {
-            &.reviews_stats { // stylelint-disable-line selector-class-pattern
+            &.reviews_stats {
                 color: $color--black-60;
 
                 div {
-                    font-size: 13px;
+                    font-size: 0.75rem;
                 }
             }
 
@@ -53,6 +53,12 @@
                     width: 110px;
                 }
             }
+
+            &.organization_name {
+                @include media-query($table-breakpoint) {
+                    width: 110px;
+                }
+            }
         }
 
         tr {
@@ -64,7 +70,7 @@
 
     tbody {
         tr {
-            &[data-archived='True'] {
+            &[data-archived="True"] {
                 background-color: $color--light-mid-grey;
             }
         }
@@ -84,34 +90,6 @@
                 @include media-query(desktop) {
                     display: table-cell;
                 }
-
-                &.has-tooltip {
-                    @include media-query($table-breakpoint) {
-                        &::before {
-                            position: absolute;
-                            top: 75px;
-                            left: 45px;
-                            z-index: -1;
-                            width: 200px;
-                            padding: 5px;
-                            font-size: 12px;
-                            font-weight: $weight--normal;
-                            white-space: normal;
-                            background: $color--sky-blue;
-                            border: 1px solid $color--marine;
-                            content: attr(data-title-tooltip);
-                            opacity: 0;
-                            transition: opacity $transition;
-                        }
-
-                        &:hover {
-                            &::before {
-                                z-index: 10;
-                                opacity: 1;
-                            }
-                        }
-                    }
-                }
             }
 
             // project status label
@@ -140,12 +118,13 @@
                     font-size: 13px;
                     text-align: center;
                     vertical-align: middle;
-                    background: url('./../../images/quote-outline.svg') transparent no-repeat center center;
+                    background: url("./../../images/quote-outline.svg")
+                        transparent no-repeat center center;
                     background-size: 24px;
                 }
             }
 
-            &.reviews_stats { // stylelint-disable-line selector-class-pattern
+            &.reviews_stats {
                 display: none;
 
                 @include media-query($table-breakpoint) {
@@ -166,19 +145,23 @@
 
             &.fund,
             &.round,
-            &.screening_status { // stylelint-disable-line selector-class-pattern
-                -webkit-hyphens: auto; // stylelint-disable-line property-no-vendor-prefix
-                -ms-hyphens: auto; // stylelint-disable-line property-no-vendor-prefix
+            &.screening_status {
                 hyphens: auto;
             }
 
+            &.organization_name {
+                @include media-query($table-breakpoint) {
+                    padding-left: 15px;
+                }
+            }
+
             // arrow to toggle project info - added via js
             @include media-query($table-breakpoint) {
                 .arrow {
                     @include triangle(right, $color--primary, 6px);
                     position: relative;
                     display: inline-block;
-                    margin-right: 15px;
+                    margin-right: 10px;
                     transform: rotate(0);
                     transition: transform $transition;
 
@@ -188,7 +171,8 @@
                 }
             }
 
-            > span.mobile-label { // stylelint-disable-line force-element-nesting
+            // stylelint-disable-next-line force-element-nesting
+            > span.mobile-label {
                 display: inline-block;
                 width: 90px;
 
diff --git a/hypha/static_src/src/sass/apply/components/_button.scss b/hypha/static_src/src/sass/apply/components/_button.scss
index 87c7dc99084a5c17944d41b45d145286b95939b1..15cb9472bd2aed9e63432c5d77ba15d54b57b8d2 100644
--- a/hypha/static_src/src/sass/apply/components/_button.scss
+++ b/hypha/static_src/src/sass/apply/components/_button.scss
@@ -13,7 +13,7 @@
     &:disabled,
     &.is-disabled {
         pointer-events: none;
-        opacity: .5;
+        opacity: 0.5;
     }
 
     &-default,
@@ -21,6 +21,7 @@
     &--primary {
         @include button($color--light-blue, $color--dark-blue);
         display: inline-block;
+        border: 1px solid $color--light-blue;
 
         .form--filters & {
             width: 100%;
@@ -32,14 +33,14 @@
     &--project-action {
         @include button($color--light-blue, $color--dark-blue);
         display: inline-block;
-        padding: .5rem 1.2rem;
+        padding: 0.5rem 1.2rem;
 
         &--white {
             @include button($color--white, $color--light-blue);
             display: inline-block;
             color: $color--light-blue;
             border: 1px solid $color--mid-grey;
-            padding: .5rem 1.2rem;
+            padding: 0.5rem 1.2rem;
 
             &:focus {
                 color: $color--light-blue;
@@ -55,7 +56,7 @@
             display: inline-block;
             color: $color--light-blue;
             border: 1px solid $color--mid-grey;
-            padding: .5rem 3.3rem;
+            padding: 0.5rem 3.3rem;
 
             &:focus {
                 color: $color--light-blue;
@@ -104,6 +105,7 @@
         }
     }
 
+    &--secondary,
     &--white {
         @include button($color--white, $color--light-blue);
         display: inline-block;
@@ -135,7 +137,8 @@
         padding: 15px 20px;
         font-weight: $weight--normal;
         color: $color--default;
-        background: url('./../../images/filters.svg') $color--white no-repeat 93% center;
+        background: url("./../../images/filters.svg") $color--white no-repeat
+            93% center;
         border: 1px solid $color--light-mid-grey;
         transition: none;
         width: 100%;
@@ -146,11 +149,11 @@
             border: 0;
             justify-content: flex-start;
             width: auto;
-            opacity: .7;
+            opacity: 0.7;
 
             &::before {
-                content: '';
-                background-image: url('./../../images/filters.svg');
+                content: "";
+                background-image: url("./../../images/filters.svg");
                 transform: rotate(90deg);
                 background-color: transparent;
                 background-position: left center;
@@ -169,7 +172,7 @@
 
     &--search {
         position: absolute;
-        top: .65em;
+        top: 0.65em;
         right: 10px;
 
         svg {
@@ -216,7 +219,7 @@
             top: 0;
             right: 15px;
             font-size: 30px;
-            content: '+';
+            content: "+";
             line-height: 1.2;
         }
 
@@ -226,7 +229,7 @@
 
             &::after {
                 top: -12px;
-                content: '_';
+                content: "_";
             }
         }
 
@@ -388,7 +391,7 @@
             position: relative;
 
             &::after {
-                content: '\2691';
+                content: "\2691";
                 color: $color--tomato;
                 position: absolute;
                 top: 4px;
diff --git a/hypha/static_src/src/sass/apply/components/_comment.scss b/hypha/static_src/src/sass/apply/components/_comment.scss
index d09963a1b4f19dacc576c42105ed6ef3f1ca40af..85656b6583ea46fed26527dab203770e1786648c 100644
--- a/hypha/static_src/src/sass/apply/components/_comment.scss
+++ b/hypha/static_src/src/sass/apply/components/_comment.scss
@@ -23,10 +23,6 @@
         margin: 0;
     }
 
-    &__time {
-        font-size: map-get($font-sizes, milli);
-    }
-
     &__user {
         font-weight: $weight--semibold;
     }
diff --git a/hypha/static_src/src/sass/apply/components/_data-block.scss b/hypha/static_src/src/sass/apply/components/_data-block.scss
index 5d5e4efff9c1adb1c477d9ae71cc38913e15e1d0..4525092609910c648874bf26f56a94a95b37ce54 100644
--- a/hypha/static_src/src/sass/apply/components/_data-block.scss
+++ b/hypha/static_src/src/sass/apply/components/_data-block.scss
@@ -36,7 +36,7 @@
     &__button {
         @include button($color--light-blue, $color--dark-blue);
         display: inline-block;
-        padding: .5rem 1.2rem;
+        padding: 0.5rem 1.2rem;
 
         #{$root}__header & {
             &:hover,
@@ -233,7 +233,7 @@
         margin-bottom: 2rem;
 
         &::after {
-            content: '';
+            content: "";
             width: calc(100% + 2rem);
             position: absolute;
             height: 2px;
@@ -251,7 +251,7 @@
 
     &__card-copy,
     &__card-title {
-        margin: 0 0 .5rem;
+        margin: 0 0 0.5rem;
     }
 
     &__card-title {
diff --git a/hypha/static_src/src/sass/apply/components/_docs-block.scss b/hypha/static_src/src/sass/apply/components/_docs-block.scss
index 2ac66caffbe18f4cf7061017726baeb007986b7a..1637e00440959ba820b8268b09c1751525ed569a 100644
--- a/hypha/static_src/src/sass/apply/components/_docs-block.scss
+++ b/hypha/static_src/src/sass/apply/components/_docs-block.scss
@@ -3,15 +3,16 @@
 
     &__header {
         background-color: $color--light-blue-90;
-        padding: 1rem;
+        padding: 0.5rem 0.75rem;
         display: flex;
         justify-content: space-between;
         align-items: center;
     }
 
     &__heading {
-        font-size: $base-font-size-large;
-        font-weight: $weight--bold;
+        font-size: 1.125rem;
+        line-height: 1.75rem;
+        font-weight: 600;
         margin: 0;
     }
 
@@ -71,7 +72,7 @@
         height: 20px;
         stroke: $color--mid-grey;
         fill: transparent;
-        margin-right: .5rem;
+        margin-right: 0.5rem;
 
         @include media-query(tablet-landscape) {
             margin-right: 1rem;
@@ -125,8 +126,8 @@
         padding: 0 1rem 1rem;
 
         .button {
-            padding: .5rem 1rem;
-            margin: 0 .5rem .5rem 0;
+            padding: 0.5rem 1rem;
+            margin: 0 0.5rem 0.5rem 0;
 
             &:last-child {
                 margin: 0;
diff --git a/hypha/static_src/src/sass/apply/components/_dropdown.scss b/hypha/static_src/src/sass/apply/components/_dropdown.scss
index 6b112d5b7a462ad06d1a8eb94077227cd471f8a2..3ec2d37f42b5178ff0f5ab9ea9736b013cb0c194 100644
--- a/hypha/static_src/src/sass/apply/components/_dropdown.scss
+++ b/hypha/static_src/src/sass/apply/components/_dropdown.scss
@@ -31,7 +31,11 @@
 }
 
 /* Change color of dropdown links on hover */
-.dropdown-content a:hover { background-color: $color--mid-grey; }
+.dropdown-content a:hover {
+    background-color: $color--mid-grey;
+}
 
 /* Show the dropdown menu */
-.show { display: block; }
+.show {
+    display: block;
+}
diff --git a/hypha/static_src/src/sass/apply/components/_editor.scss b/hypha/static_src/src/sass/apply/components/_editor.scss
index eb3aea65b7016c0c41a0b9facc9032f6eb31de73..42ccdd8f4357b6457077c4419568b4c2579e9c31 100644
--- a/hypha/static_src/src/sass/apply/components/_editor.scss
+++ b/hypha/static_src/src/sass/apply/components/_editor.scss
@@ -37,7 +37,7 @@
 
     & > span {
         display: inline-block;
-        background-image: url('./../../images/editor-buttons.png');
+        background-image: url("./../../images/editor-buttons.png");
         background-repeat: no-repeat;
         background-position: 0 0;
         width: 20px;
@@ -51,6 +51,6 @@
 
 .wmd-prompt-dialog {
     background-color: $color--light-grey;
-    padding: .5em;
+    padding: 0.5em;
     border: 4px solid $color--primary;
 }
diff --git a/hypha/static_src/src/sass/apply/components/_feed.scss b/hypha/static_src/src/sass/apply/components/_feed.scss
index 83d342d4b649be9649f3864790c004b368c1cb52..5228385373bd59a63c1d04286df35066251136c6 100644
--- a/hypha/static_src/src/sass/apply/components/_feed.scss
+++ b/hypha/static_src/src/sass/apply/components/_feed.scss
@@ -144,7 +144,8 @@
 
             span {
                 &:first-child {
-                    &::after { // stylelint-disable-line max-nesting-depth
+                    // stylelint-disable-next-line max-nesting-depth
+                    &::after {
                         @include triangle(right, $color--black-50, 4px);
                         display: inline-block;
                         margin: 0 5px 0 10px;
@@ -166,7 +167,7 @@
             width: 10px;
             height: 14px;
             margin-left: 10px;
-            margin-top: .35em;
+            margin-top: 0.35em;
             fill: $color--dark-blue;
         }
     }
@@ -201,7 +202,11 @@
         width: 100%;
         text-align: center;
         margin: 0;
-        padding: 3em 0 .5em;
-        background-image: linear-gradient(to bottom, $color--white-10, $color--white);
+        padding: 3em 0 0.5em;
+        background-image: linear-gradient(
+            to bottom,
+            $color--white-10,
+            $color--white
+        );
     }
 }
diff --git a/hypha/static_src/src/sass/apply/components/_filters.scss b/hypha/static_src/src/sass/apply/components/_filters.scss
index 9ef9a2d25e6a600a937099d00df710f7fb6e87ab..fae37cac5dcf0ff0ca6262d37366fdda56c7b6ca 100644
--- a/hypha/static_src/src/sass/apply/components/_filters.scss
+++ b/hypha/static_src/src/sass/apply/components/_filters.scss
@@ -44,7 +44,7 @@
             display: none;
         }
 
-        > div[class^='js-'] {
+        > div[class^="js-"] {
             color: $color--primary;
 
             &:hover {
diff --git a/hypha/static_src/src/sass/apply/components/_form.scss b/hypha/static_src/src/sass/apply/components/_form.scss
index 2426a46dbfc8c066b7df21bebcfb5be62b445ea7..fc7a2fa9ec75c74e7f9849fb3a29b8e4e4788bc6 100644
--- a/hypha/static_src/src/sass/apply/components/_form.scss
+++ b/hypha/static_src/src/sass/apply/components/_form.scss
@@ -1,6 +1,6 @@
 // stylelint-disable selector-max-compound-selectors
 
-@use 'sass:math';
+@use "sass:math";
 
 .form {
     $root: &;
@@ -11,13 +11,13 @@
 
             label {
                 display: block;
-                margin-bottom: .5em;
+                margin-bottom: 0.5em;
                 font-weight: $weight--bold;
             }
         }
 
         button {
-            margin-top: 10px;
+            margin-top: 1.5rem;
         }
     }
 
@@ -50,7 +50,8 @@
 
     &__group {
         position: relative;
-        margin: 1rem 0;
+        margin-top: 0.5rem;
+        margin-bottom: 1.5rem;
 
         &:nth-of-type(1) {
             margin-top: 0;
@@ -75,12 +76,14 @@
                 font-weight: 700;
             }
 
-            &.id_occurrence { // stylelint-disable-line selector-class-pattern
+            // stylelint-disable-next-line selector-class-pattern
+            &.id_occurrence {
                 width: 15%;
                 margin: 0 1rem;
             }
 
-            &.id_frequency { // stylelint-disable-line selector-class-pattern
+            // stylelint-disable-next-line selector-class-pattern
+            &.id_frequency {
                 margin: 0;
             }
         }
@@ -94,20 +97,21 @@
                 &__item {
                     display: flex;
                     align-items: center;
-                    gap: .5em;
+                    gap: 0.5em;
                 }
             }
         }
 
-        input[type='date']:last-child {
+        input[type="date"]:last-child {
             max-width: 385px;
         }
     }
 
     &__question {
         display: block;
-        margin-bottom: .5em;
-        font-weight: $weight--bold;
+        font-weight: $weight--semibold;
+        font-size: 1rem;
+        line-height: 1.25rem;
 
         // stylelint-disable selector-class-pattern
         &--image_field,
@@ -117,15 +121,21 @@
             @include button($color--light-blue, $color--darkest-blue);
             max-width: 290px;
             text-align: center;
-            background: url('./../../images/upload.svg') $color--light-blue no-repeat 40px center;
+            background: url("./../../images/upload.svg") $color--light-blue
+                no-repeat 20px center;
             border: 0;
 
             .no-js & {
                 display: none;
             }
 
+            .form__required {
+                color: $color--white;
+            }
+
             &:hover {
-                background: url('./../../images/upload.svg') $color--darkest-blue no-repeat 40px center;
+                background: url("./../../images/upload.svg") $color--dark-blue
+                    no-repeat 20px center;
 
                 .no-js & {
                     background: none;
@@ -135,7 +145,6 @@
 
         &--boolean_field {
             display: inline;
-            font-size: 17px;
             margin-bottom: 0;
         }
         // stylelint-enable selector-class-pattern
@@ -143,7 +152,7 @@
 
     &__file-list {
         ul {
-            margin: .5rem 0;
+            margin: 0.5rem 0;
         }
     }
 
@@ -164,7 +173,7 @@
 
             &.is-active {
                 font-weight: $weight--normal;
-                background-color: transparentize($color--primary, .9);
+                background-color: transparentize($color--primary, 0.9);
                 border-color: $color--mid-grey;
             }
 
@@ -241,7 +250,7 @@
                     @supports (display: grid) {
                         display: grid;
                         grid-template-columns: 1fr 1fr;
-                        grid-gap: 5px;
+                        gap: 5px;
                     }
                 }
 
@@ -258,7 +267,8 @@
                 }
 
                 input {
-                    &:first-of-type { // stylelint-disable-line max-nesting-depth
+                    // stylelint-disable-next-line max-nesting-depth
+                    &:first-of-type {
                         @supports (display: grid) {
                             grid-column: 1;
                         }
@@ -286,12 +296,20 @@
     }
 
     &__help {
+        margin: 0;
+        color: var(--color-fg-muted);
+        font-size: 0.875rem;
+        line-height: 1.25rem;
+
         .profile & {
             margin-top: 0;
         }
     }
 
     &__help-link {
+        font-size: 0.875rem;
+        line-height: 1.25rem;
+
         a {
             &:hover {
                 cursor: pointer;
@@ -309,13 +327,11 @@
 
     &__item {
         position: relative;
-        padding-bottom: 10px;
+        padding-top: 0.5rem;
     }
 
     &__select {
         max-width: 385px;
-        background: url('./../../images/dropdown.svg') $color--white no-repeat 95% center;
-        background-size: 8px;
 
         &:has(.choices) {
             background: none;
@@ -335,17 +351,11 @@
             }
         }
 
-        select[multiple='multiple'] {
+        select[multiple="multiple"] {
             display: block;
         }
 
         select {
-            background: transparent;
-            border-radius: 0;
-            appearance: none;
-            -webkit-appearance: none; // stylelint-disable-line property-no-vendor-prefix
-            -moz-appearance: none; // stylelint-disable-line property-no-vendor-prefix
-
             option {
                 background-color: $color--white;
             }
@@ -356,61 +366,17 @@
         }
     }
 
-    &__comments {
-        display: grid;
-        grid-template-areas: 'message' 'visibility' 'actions';
-        grid-template-rows: auto auto auto;
-        grid-template-columns: 1fr;
-
-        @include media-query(tablet-landscape) {
-            grid-template-areas: 'message visibility' 'actions actions';
-            grid-template-rows: auto auto;
-            grid-template-columns: 2fr 1fr;
-            column-gap: 2rem;
-
-            .wmd-input {
-                max-width: 100%;
-                margin-bottom: 0;
-            }
-        }
-
-        .id_message { // stylelint-disable-line selector-class-pattern
-            grid-area: message;
-
-            > label {
-                @include hidden;
-            }
-        }
-
-        .id_visibility_0 { // stylelint-disable-line selector-class-pattern
-            grid-area: visibility;
-        }
-
-        .button {
-            grid-area: actions;
-            max-width: 210px;
-            text-align: center;
-        }
-    }
-
     select,
-    input[type='url'],
-    input[type='text']:not(.input--secondary),
-    input[type='date'],
-    input[type='time'],
-    input[type='email'],
-    input[type='number'],
-    input[type='password'],
-    input[type='datetime-local'] {
+    input[type="url"],
+    input[type="text"]:not(.input--secondary),
+    input[type="date"],
+    input[type="time"],
+    input[type="email"],
+    input[type="number"],
+    input[type="password"],
+    input[type="datetime-local"] {
         width: 100%;
         max-width: 385px;
-        padding: .4em;
-        border: 1px solid $color--mid-grey;
-
-        &:disabled {
-            color: $color--black-50;
-            cursor: not-allowed;
-        }
 
         &.invalid {
             border: 2px solid $color--error;
@@ -421,14 +387,14 @@
     &__error {
         select,
         textarea,
-        input[type='url'],
-        input[type='text'],
-        input[type='date'],
-        input[type='time'],
-        input[type='email'],
-        input[type='number'],
-        input[type='password'],
-        input[type='datetime-local'] {
+        input[type="url"],
+        input[type="text"],
+        input[type="date"],
+        input[type="time"],
+        input[type="email"],
+        input[type="number"],
+        input[type="password"],
+        input[type="datetime-local"] {
             border: 2px solid $color--error;
         }
     }
@@ -455,21 +421,21 @@
                 border-color: transparent $color--error transparent transparent;
                 border-style: solid;
                 border-width: 5px 10px 5px 0;
-                content: '';
+                content: "";
             }
         }
     }
 
     // make date & time input siblings inline
-    input[type='date'] {
+    input[type="date"] {
         max-width: calc(385px - 100px);
     }
 
-    input[type='date'] + input[type='time'] {
+    input[type="date"] + input[type="time"] {
         width: 100px;
     }
 
-    input[type='file'] {
+    input[type="file"] {
         @extend %off-screen;
 
         .no-js & {
@@ -481,68 +447,95 @@
     &__textarea {
         display: block;
         width: 100%;
-        padding: .4em;
-        margin-bottom: 1em;
+        padding: 0.4em;
         border: 1px solid $color--mid-grey;
         line-height: math.div($base-line-height, $base-font-size);
+    }
 
-        @include media-query(tablet-portrait) {
+    .wmd-preview {
+        width: 100%;
+
+        @include media-query(tablet-landscape) {
             max-width: 70%;
         }
     }
 
-    // Radio + Checkbox
-    [type='radio'],
-    [type='checkbox'] {
-        appearance: none;
-        accent-color: $color--dark-blue;
-        height: .7em;
-        width: .7em;
-        outline: 2px solid $color--dark-blue;
+    &__comments {
+        display: grid;
+        grid-template-areas: "message" "visibility" "actions";
+        grid-template-rows: auto auto auto;
+        grid-template-columns: 1fr;
 
-        & + label {
-            padding-inline-start: .5em;
+        @include media-query(tablet-landscape) {
+            grid-template-areas: "message visibility" "actions actions";
+            grid-template-rows: auto auto;
+            grid-template-columns: 2fr 1fr;
+            column-gap: 2rem;
 
-            &:hover {
-                font-weight: bold;
+            .wmd-input,
+            .wmd-preview {
+                max-width: 100%;
+                margin-bottom: 0;
             }
         }
 
-        &:checked {
-            background-color: $color--dark-blue;
+        // stylelint-disable-next-line selector-class-pattern
+        .id_message {
+            grid-area: message;
+
+            > label {
+                @include hidden;
+            }
         }
-    }
 
-    // Radio specific
-    [type='radio'] {
-        border-radius: 50%;
-        outline-offset: 2px;
-    }
+        // stylelint-disable-next-line selector-class-pattern
+        .id_visibility_0 {
+            grid-area: visibility;
+        }
 
-    // Checkbox specific
-    input[type='checkbox'] {
-        height: 1em;
-        width: 1em;
-        background-position: center;
-        background-repeat: no-repeat;
-        background-size: .8em;
+        .button {
+            grid-area: actions;
+            max-width: 210px;
+            text-align: center;
+        }
+    }
 
-        &:checked {
-            background-image: url('./../../images/tick.svg');
+    // Radio + Checkbox
+    [type="radio"],
+    [type="checkbox"] {
+        & + label {
+            padding-inline-start: 0.25rem;
+            cursor: pointer;
         }
     }
 
     .errorlist {
         padding: 5px;
-        margin-bottom: .2em;
+        margin-bottom: 0.2em;
         background: $color--light-pink;
         border: 1px solid $color--tomato;
     }
 
     .address {
-        padding: .4em;
-        border: 1px solid $color--mid-grey;
+        padding: 0.4em;
+        border: 1px solid #cfcfcf8f; // stylelint-disable-line color-no-hex
         max-width: 410px;
+
+        // stylelint-disable-next-line selector-class-pattern
+        .form__group {
+            margin-top: 0.5rem;
+        }
+
+        // stylelint-disable-next-line selector-class-pattern
+        .form__question {
+            margin-bottom: 0.25rem;
+            font-size: 1rem;
+            line-height: 1.25rem;
+
+            &:nth-of-type(1) {
+                margin-top: 0;
+            }
+        }
     }
 
     .multi-input-field-hidden {
@@ -568,5 +561,7 @@
 }
 
 @keyframes flash {
-    50% { background-color: $color--mustard; }
+    50% {
+        background-color: $color--mustard;
+    }
 }
diff --git a/hypha/static_src/src/sass/apply/components/_funding-block.scss b/hypha/static_src/src/sass/apply/components/_funding-block.scss
index 969bdeca020ea40f79f203a8bb4085f5e58de13d..3f053ffa4a97818f336ecdddeb8cda95396ae0f2 100644
--- a/hypha/static_src/src/sass/apply/components/_funding-block.scss
+++ b/hypha/static_src/src/sass/apply/components/_funding-block.scss
@@ -12,10 +12,10 @@
     }
 
     &__item {
-        margin: 0 .5rem 1rem 0;
+        margin: 0 0.5rem 1rem 0;
 
         @include media-query(mob-landscape) {
-            margin: 0 .5rem 0 0;
+            margin: 0 0.5rem 0 0;
         }
 
         &:last-child {
diff --git a/hypha/static_src/src/sass/apply/components/_grid.scss b/hypha/static_src/src/sass/apply/components/_grid.scss
index 32b13f0c4b026f8d8788bb1998e4208132e917da..5e9adc94e809a2829437fb05cceb2daa6f923eb7 100644
--- a/hypha/static_src/src/sass/apply/components/_grid.scss
+++ b/hypha/static_src/src/sass/apply/components/_grid.scss
@@ -27,8 +27,8 @@
 @supports (display: grid) {
     .grid {
         display: grid;
-        margin: 30px 0;
-        grid-gap: 10px;
+        margin-bottom: 1rem;
+        gap: 10px;
         grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
 
         > * {
@@ -39,7 +39,7 @@
 
         &--two {
             grid-template-columns: 100%;
-            grid-gap: 0;
+            gap: 0.25rem;
 
             @include media-query(tablet-portrait) {
                 grid-template-columns: 1fr 1fr;
@@ -51,7 +51,7 @@
 
             .form--comments & {
                 margin: 20px 0 0;
-                grid-gap: 10px;
+                gap: 10px;
                 grid-template-columns: 100px 100px;
             }
 
@@ -70,7 +70,7 @@
 
         &--proposal-info {
             grid-template-columns: 100%;
-            grid-gap: 10px;
+            gap: 10px;
             margin: 0 0 1rem;
 
             @include media-query(mob-landscape) {
@@ -83,6 +83,14 @@
             }
         }
 
+        &--status-update {
+            grid-template-columns: 100%;
+
+            @include media-query(mob-landscape) {
+                grid-template-columns: 100%;
+            }
+        }
+
         &__cell {
             &--span-two {
                 @include media-query(mob-landscape) {
diff --git a/hypha/static_src/src/sass/apply/components/_heading.scss b/hypha/static_src/src/sass/apply/components/_heading.scss
index 1c2aeff121328b14e09b45347123b6d40539282b..f160e5a8ceb05faeb070f78a9f897f90895849e6 100644
--- a/hypha/static_src/src/sass/apply/components/_heading.scss
+++ b/hypha/static_src/src/sass/apply/components/_heading.scss
@@ -6,21 +6,17 @@
     &--meta {
         display: flex;
         flex-wrap: wrap;
-        margin: 0;
-
-        @include media-query(tablet-portrait) {
-            margin-bottom: 1rem;
-        }
+        margin-top: 0.25rem;
 
         span {
             &::after {
-                padding: 0 15px;
-                content: '|';
+                padding: 0 0.25rem;
+                content: "•";
             }
 
             &:last-child {
                 &::after {
-                    content: '';
+                    content: "";
                 }
             }
         }
@@ -31,7 +27,7 @@
         flex-direction: column;
         margin-top: 20px;
         font-weight: $weight--normal;
-        color: transparentize($color--dark-grey, .5);
+        color: transparentize($color--dark-grey, 0.5);
 
         @include media-query(tablet-landscape) {
             flex-direction: row;
@@ -48,7 +44,7 @@
     }
 
     &--light-grey {
-        color: transparentize($color--dark-grey, .5);
+        color: transparentize($color--dark-grey, 0.5);
     }
 
     &--uppercase {
@@ -59,6 +55,7 @@
         font-weight: 500;
         font-size: 1.25rem;
         line-height: 1.75rem;
+        margin-bottom: 0.25rem;
     }
 
     &--bold {
diff --git a/hypha/static_src/src/sass/apply/components/_icon.scss b/hypha/static_src/src/sass/apply/components/_icon.scss
index 868f45a52d700a3c767fd6385a48d3cd79b04fca..5cee7bc02e3f8ba51ba64df2f751e62ae065d656 100644
--- a/hypha/static_src/src/sass/apply/components/_icon.scss
+++ b/hypha/static_src/src/sass/apply/components/_icon.scss
@@ -5,13 +5,14 @@
     transition: fill $transition;
     fill: $color--dark-grey;
 
-    .header__menus--mobile.is-visible & { // stylelint-disable-line force-element-nesting, selector-class-pattern
+    // stylelint-disable-next-line force-element-nesting, selector-class-pattern
+    .header__menus--mobile.is-visible & {
         fill: $color--white;
     }
 
     &--anchor-link {
         line-height: 1;
-        height: .8em;
+        height: 0.8em;
         vertical-align: middle;
     }
 
@@ -67,7 +68,8 @@
     &--speech-bubble {
         fill: $color--white;
 
-        .activity-feed__header & { // stylelint-disable-line selector-class-pattern
+        // stylelint-disable-next-line selector-class-pattern
+        .activity-feed__header & {
             margin-left: 10px;
         }
     }
@@ -93,7 +95,7 @@
 
     &--eye {
         position: relative;
-        top: .25em;
+        top: 0.25em;
         align-self: center;
         width: 1em;
         height: 1em;
@@ -122,11 +124,15 @@
         height: 1em;
         margin-right: 2px;
         stroke: $color--light-blue;
+
+        .border:hover & {
+            stroke: $color--white;
+        }
     }
 
     &--caret-down {
         position: relative;
-        top: .4em;
+        top: 0.4em;
         align-self: center;
         width: 1em;
         height: 1em;
@@ -135,7 +141,7 @@
 
     &--caret-up {
         position: relative;
-        top: .4em;
+        top: 0.4em;
         align-self: center;
         width: 1em;
         height: 1em;
@@ -144,11 +150,18 @@
 
     &--arrow-up {
         position: relative;
-        top: .1em;
         align-self: center;
-        width: 1.4em;
-        height: 1.4em;
-        fill: $color--light-blue;
+        width: 16px;
+        height: 17px;
+        stroke: $color--light-blue;
+    }
+
+    &--arrow-down {
+        position: relative;
+        align-self: center;
+        width: 16px;
+        height: 17px;
+        stroke: $color--light-blue;
     }
 
     &--arrow-up-short-bar {
@@ -176,6 +189,13 @@
         fill: $color--light-blue;
     }
 
+    &--request-changes {
+        width: 20px;
+        height: 20px;
+        margin-right: 4px;
+        margin-top: 2px;
+    }
+
     &--padlock {
         width: 12px;
         margin-left: 7px;
diff --git a/hypha/static_src/src/sass/apply/components/_input.scss b/hypha/static_src/src/sass/apply/components/_input.scss
deleted file mode 100644
index fa64ea285549a1667ce69b28956e986ce9035b1c..0000000000000000000000000000000000000000
--- a/hypha/static_src/src/sass/apply/components/_input.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-.input {
-    &--search {
-        width: 100%;
-        padding: 10px;
-        color: $color--dark-grey;
-        background: transparent;
-        border: 1px solid $color--mid-dark-grey;
-    }
-}
diff --git a/hypha/static_src/src/sass/apply/components/_invoice-block.scss b/hypha/static_src/src/sass/apply/components/_invoice-block.scss
index 273c8a953d9f6988994f42d7aac7098dac7dd1a3..737587e58d118d7dca455b9e7f3f8c35ebf94cea 100644
--- a/hypha/static_src/src/sass/apply/components/_invoice-block.scss
+++ b/hypha/static_src/src/sass/apply/components/_invoice-block.scss
@@ -23,7 +23,7 @@
 
     &__title {
         font-weight: $weight--bold;
-        margin: 0 0 .2rem;
+        margin: 0 0 0.2rem;
     }
 
     &__meta {
diff --git a/hypha/static_src/src/sass/apply/components/_link.scss b/hypha/static_src/src/sass/apply/components/_link.scss
index 0edca13edc4c2106fb522f0fa1916c9e566f543d..711085053eaaec91417d1afb6549f8cfdd4256f0 100644
--- a/hypha/static_src/src/sass/apply/components/_link.scss
+++ b/hypha/static_src/src/sass/apply/components/_link.scss
@@ -2,7 +2,7 @@
     &:disabled,
     &.is-disabled {
         pointer-events: none;
-        opacity: .5;
+        opacity: 0.5;
     }
 
     &--button {
@@ -120,11 +120,8 @@
         width: 60px;
         height: 60px;
         color: $color--white;
-        background: url('./../../images/speech-bubble-blue.svg') no-repeat center;
-
-        .app-open & {
-            display: none;
-        }
+        background: url("./../../images/speech-bubble-blue.svg") no-repeat
+            center;
 
         @include media-query(tablet-portrait) {
             @include button($color--light-blue, $color--dark-blue);
@@ -143,7 +140,7 @@
                 font-size: 30px;
                 border: 2px solid $color--white;
                 border-radius: 50%;
-                content: '+';
+                content: "+";
                 display: flex;
                 align-items: center;
                 justify-content: center;
@@ -178,7 +175,7 @@
             font-size: 30px;
             border: 2px solid $color--white;
             border-radius: 50%;
-            content: '\2013';
+            content: "\2013";
             display: flex;
             align-items: center;
             justify-content: center;
@@ -273,7 +270,7 @@
 
         &::before {
             @include triangle(top, $color--dark-blue, 7px);
-            margin-right: .7rem;
+            margin-right: 0.7rem;
             transition: transform $transition;
             transform: rotate(180deg);
         }
diff --git a/hypha/static_src/src/sass/apply/components/_messages.scss b/hypha/static_src/src/sass/apply/components/_messages.scss
index cd047ed598648e348734312b3b7f41c839437642..bd186b20910bc63da6a45db5bdcf8e64dfe9750d 100644
--- a/hypha/static_src/src/sass/apply/components/_messages.scss
+++ b/hypha/static_src/src/sass/apply/components/_messages.scss
@@ -7,7 +7,7 @@
     pointer-events: none;
 
     &__actions {
-        border: .01px ridge $color--black;
+        border: 0.01px ridge $color--black;
         display: flex;
         align-items: center;
         max-width: 450px;
diff --git a/hypha/static_src/src/sass/apply/components/_nav.scss b/hypha/static_src/src/sass/apply/components/_nav.scss
index b9b6b566c1704be05a113d3eda41110469dae3e1..b96b60e8ce7e70593cf68b8ae33826aa15d3ed59 100644
--- a/hypha/static_src/src/sass/apply/components/_nav.scss
+++ b/hypha/static_src/src/sass/apply/components/_nav.scss
@@ -63,9 +63,9 @@
                 width: 100%;
                 height: 5px;
                 background-color: $color--dark-blue;
-                content: '';
+                content: "";
                 opacity: 0;
-                transition: opacity .5s cubic-bezier(.2, 1.4, .67, 1.13);
+                transition: opacity 0.5s cubic-bezier(0.2, 1.4, 0.67, 1.13);
             }
         }
 
diff --git a/hypha/static_src/src/sass/apply/components/_nprogress.scss b/hypha/static_src/src/sass/apply/components/_nprogress.scss
index eab1f7174e2be4d38cb4bfca9de9d0e8995851ee..b48d4d1b2fa2e4939769c054e9fee5eb52fae416 100644
--- a/hypha/static_src/src/sass/apply/components/_nprogress.scss
+++ b/hypha/static_src/src/sass/apply/components/_nprogress.scss
@@ -22,7 +22,9 @@
         right: 0px;
         width: 100px;
         height: 100%;
-        box-shadow: 0 0 10px $color--dark-blue, 0 0 5px $color--dark-blue;
+        box-shadow:
+            0 0 10px $color--dark-blue,
+            0 0 5px $color--dark-blue;
         opacity: 1;
 
         transform: rotate(3deg) translate(0px, -4px);
diff --git a/hypha/static_src/src/sass/apply/components/_projects-table.scss b/hypha/static_src/src/sass/apply/components/_projects-table.scss
index f71dc949c0da631af9f16119e4e76bb1ba7ba4f4..425d24c246cda1c2d129f3ae940958f51d4b8d60 100644
--- a/hypha/static_src/src/sass/apply/components/_projects-table.scss
+++ b/hypha/static_src/src/sass/apply/components/_projects-table.scss
@@ -3,7 +3,7 @@
 
     .reporting {
         .icon {
-            margin-right: .3rem;
+            margin-right: 0.3rem;
             width: 25px;
             height: 25px;
             fill: $color--tomato;
diff --git a/hypha/static_src/src/sass/apply/components/_related-sidebar.scss b/hypha/static_src/src/sass/apply/components/_related-sidebar.scss
index feb8eb4bbc363b111ff9f9b07e1ccdec1b757434..2b14df825abc3cdd276dd2c8890410fe43bb8ffa 100644
--- a/hypha/static_src/src/sass/apply/components/_related-sidebar.scss
+++ b/hypha/static_src/src/sass/apply/components/_related-sidebar.scss
@@ -17,7 +17,11 @@
         width: 100%;
         text-align: center;
         margin: 0;
-        padding: 3em 0 .5em;
-        background-image: linear-gradient(to bottom, $color--white-10, $color--white);
+        padding: 3em 0 0.5em;
+        background-image: linear-gradient(
+            to bottom,
+            $color--white-10,
+            $color--white
+        );
     }
 }
diff --git a/hypha/static_src/src/sass/apply/components/_reviews-sidebar.scss b/hypha/static_src/src/sass/apply/components/_reviews-sidebar.scss
index d34b31ed64a15a6c6bd89632d52cd021b80d32ba..7fda99be164c13d4c803042aec055ad8228ee1ea 100644
--- a/hypha/static_src/src/sass/apply/components/_reviews-sidebar.scss
+++ b/hypha/static_src/src/sass/apply/components/_reviews-sidebar.scss
@@ -22,7 +22,7 @@
         @supports (display: grid) {
             display: grid;
             grid-template-columns: 45% 25% 15% 15%;
-            grid-gap: 5px;
+            gap: 5px;
         }
 
         &--decision {
@@ -30,7 +30,6 @@
             font-weight: $weight--semibold;
 
             &:first-child {
-
                 #{$root}__outcome {
                     &::before,
                     &::after {
@@ -58,6 +57,18 @@
         &.no-response {
             color: $color--black-20;
         }
+
+        .yes {
+            color: $color--green;
+        }
+
+        .maybe {
+            color: $color--mustard;
+        }
+
+        .no {
+            color: $color--tomato;
+        }
     }
 
     &__date {
diff --git a/hypha/static_src/src/sass/apply/components/_revisions.scss b/hypha/static_src/src/sass/apply/components/_revisions.scss
index 43820fa267c3ef113b901701842770cddf11fc50..bc78e946d3dda1e58a905bf0a360e9a181c5ec69 100644
--- a/hypha/static_src/src/sass/apply/components/_revisions.scss
+++ b/hypha/static_src/src/sass/apply/components/_revisions.scss
@@ -1,6 +1,7 @@
 .revision-diff-table {
     td {
         vertical-align: top;
+        word-break: break-word;
     }
 }
 
diff --git a/hypha/static_src/src/sass/apply/components/_select2.scss b/hypha/static_src/src/sass/apply/components/_select2.scss
index c4d63956d9ac6a7cb66c68765888f472014cb1bf..3f77877333771abdcb62aca9ed08b7d93d0b06e6 100644
--- a/hypha/static_src/src/sass/apply/components/_select2.scss
+++ b/hypha/static_src/src/sass/apply/components/_select2.scss
@@ -7,7 +7,8 @@
 
     .select2-container--default,
     &.select2-container--default {
-        width: 100% !important; // stylelint-disable-line declaration-no-important
+        // stylelint-disable-next-line declaration-no-important
+        width: 100% !important;
 
         .select2-selection--single {
             height: $dropdown-height;
@@ -33,11 +34,12 @@
                 right: 15px;
                 height: $dropdown-height;
                 pointer-events: none;
-                background: url('./../../images/dropdown.svg') transparent no-repeat 95% center;
+                background: url("./../../images/dropdown.svg") transparent
+                    no-repeat 95% center;
                 background-size: 8px;
                 width: 8px;
 
-                b[role='presentation'] {
+                b[role="presentation"] {
                     display: none;
                 }
             }
@@ -49,11 +51,14 @@
     }
 }
 
-.select2-container { // stylelint-disable-line no-duplicate-selectors
+// stylelint-disable-next-line no-duplicate-selectors
+.select2-container {
     &--default {
         .select2-results__option--highlighted[aria-selected] {
-            color: $color--default !important; // stylelint-disable-line declaration-no-important
-            background-color: transparentize($color--primary, .9) !important; // stylelint-disable-line declaration-no-important, max-line-length
+            // stylelint-disable-next-line declaration-no-important
+            color: $color--default !important;
+            // stylelint-disable-next-line declaration-no-important, max-line-length
+            background-color: transparentize($color--primary, 0.9) !important;
         }
     }
 
@@ -78,15 +83,16 @@
             margin-right: 10px;
             background: $color--white;
             border: 1px solid $color--mid-grey;
-            content: '';
+            content: "";
         }
 
-        &[aria-selected='true'] {
+        &[aria-selected="true"] {
             &::before {
-                background: url('./../../images/tick.svg') $color--dark-blue center no-repeat;
+                background: url("./../../images/tick.svg") $color--dark-blue
+                    center no-repeat;
                 background-size: 12px;
                 border: 1px solid $color--dark-blue;
-                content: '';
+                content: "";
             }
         }
     }
diff --git a/hypha/static_src/src/sass/apply/components/_sidebar.scss b/hypha/static_src/src/sass/apply/components/_sidebar.scss
index 5602e2d5f780d3e22e68bcfd8425ae16555231df..e9f50591f3f244e2694432711132a8a693526f81 100644
--- a/hypha/static_src/src/sass/apply/components/_sidebar.scss
+++ b/hypha/static_src/src/sass/apply/components/_sidebar.scss
@@ -35,7 +35,8 @@
         }
     }
 
-    &__project { // stylelint-disable value-no-vendor-prefix
+    &__project {
+        // stylelint-disable value-no-vendor-prefix
         position: -webkit-sticky; /* for Safari */
         position: sticky;
         align-self: flex-start;
@@ -74,13 +75,13 @@
     }
 
     &__screening-option {
-        margin: .3em;
+        margin: 0.3em;
         border: 1px solid $color--black-20;
         border-radius: 16px;
         padding: 6px;
         padding-right: 12px;
         padding-left: 12px;
-        font-size: .8125rem;
+        font-size: 0.8125rem;
     }
 
     &__separator {
@@ -97,7 +98,7 @@
             width: calc(100% - 60px);
             height: 1px;
             background-color: $color--black-20;
-            content: '';
+            content: "";
         }
 
         &--medium {
diff --git a/hypha/static_src/src/sass/apply/components/_simplified.scss b/hypha/static_src/src/sass/apply/components/_simplified.scss
index 607d03940cea2777ba09813514c0676e1b06912b..d68bc7418688638780fad285969b22d7545c0ed4 100644
--- a/hypha/static_src/src/sass/apply/components/_simplified.scss
+++ b/hypha/static_src/src/sass/apply/components/_simplified.scss
@@ -35,7 +35,7 @@
 
         &::before {
             @include triangle(top, currentColor, 5px);
-            margin-right: .5rem;
+            margin-right: 0.5rem;
             transform: rotate(-90deg);
         }
     }
@@ -48,7 +48,7 @@
 
         &::before {
             @include triangle(top, currentColor, 5px);
-            margin-right: .5rem;
+            margin-right: 0.5rem;
             transform: rotate(-90deg);
         }
     }
@@ -71,13 +71,13 @@
         span {
             &::after {
                 padding: 0 15px;
-                content: '|';
+                content: "|";
             }
 
             &:last-child {
                 &::after {
                     padding: 0;
-                    content: '';
+                    content: "";
                 }
             }
         }
@@ -87,7 +87,7 @@
         padding: $mobile-gutter 0;
 
         @include media-query(tablet-portrait) {
-            padding: 3rem 0;
+            padding: 1rem 0;
         }
     }
 
@@ -98,7 +98,7 @@
         flex-direction: column;
         margin-top: $mobile-gutter;
         font-weight: $weight--normal;
-        color: transparentize($color--dark-grey, .5);
+        color: transparentize($color--dark-grey, 0.5);
 
         @include media-query(tablet-landscape) {
             flex-direction: row;
@@ -152,4 +152,10 @@
             margin: 0;
         }
     }
+
+    &__paf_answers {
+        h4 {
+            font-size: 16px;
+        }
+    }
 }
diff --git a/hypha/static_src/src/sass/apply/components/_stat-block.scss b/hypha/static_src/src/sass/apply/components/_stat-block.scss
index a778fe0517a18dfa7db448bcc8156d12edef309d..6f5718d1e758835e1209fd92c295d7e8e824d87c 100644
--- a/hypha/static_src/src/sass/apply/components/_stat-block.scss
+++ b/hypha/static_src/src/sass/apply/components/_stat-block.scss
@@ -37,12 +37,12 @@
     }
 
     &__text {
-        font-weight: $weight--bold;
-        margin: .5rem 0;
-        color: $color--dark-grey;
+        // font-weight: $weight--bold;
+        margin: 0.5rem 0;
+        color: var(--color-fg-default);
 
         @include media-query(small-tablet) {
-            margin: .5rem 0;
+            margin: 0.5rem 0;
         }
     }
 
diff --git a/hypha/static_src/src/sass/apply/components/_status-bar.scss b/hypha/static_src/src/sass/apply/components/_status-bar.scss
index 965c0b472192d04ee67e9b556841f0a1f8ca6b85..c39210ab5b08630a42a545135996482f6aa880fe 100644
--- a/hypha/static_src/src/sass/apply/components/_status-bar.scss
+++ b/hypha/static_src/src/sass/apply/components/_status-bar.scss
@@ -71,7 +71,7 @@
             background: $color--dark-grey;
             border: 5px solid $color--mid-grey;
             border-radius: 50%;
-            content: '';
+            content: "";
 
             .status-bar--small & {
                 background: $color--white;
@@ -107,7 +107,7 @@
                 background: $color--white;
                 border: 5px solid $color--error;
                 border-radius: 50%;
-                content: '';
+                content: "";
             }
         }
 
diff --git a/hypha/static_src/src/sass/apply/components/_status-block.scss b/hypha/static_src/src/sass/apply/components/_status-block.scss
index 6f9e758d59b2e816b69b02aa59b62d10a65e2ff3..3eac969d3cf5a2c5b8011d3bee1c2c326847eeb9 100644
--- a/hypha/static_src/src/sass/apply/components/_status-block.scss
+++ b/hypha/static_src/src/sass/apply/components/_status-block.scss
@@ -46,7 +46,7 @@
     }
 
     &__info {
-        font-size: 13px;
+        @include font-size(zeta);
         color: $color--dark-blue;
 
         @include media-query(tablet-landscape) {
@@ -55,7 +55,7 @@
     }
 
     &__title {
-        font-weight: $weight--semibold;
+        font-weight: 500;
         width: 100%;
         hyphens: auto;
     }
diff --git a/hypha/static_src/src/sass/apply/components/_submission-meta.scss b/hypha/static_src/src/sass/apply/components/_submission-meta.scss
index d6c5869cf701b1008382e5b861f0521a9b29a44f..6edb709a6ade232228908872ee8fb7222358b17a 100644
--- a/hypha/static_src/src/sass/apply/components/_submission-meta.scss
+++ b/hypha/static_src/src/sass/apply/components/_submission-meta.scss
@@ -4,7 +4,8 @@
     tbody {
         td {
             &.phase {
-                span { // stylelint-disable-line selector-max-compound-selectors
+                // stylelint-disable-next-line selector-max-compound-selectors
+                span {
                     display: inline-block;
                     padding: 10px;
                     font-size: 13px;
diff --git a/hypha/static_src/src/sass/apply/components/_table.scss b/hypha/static_src/src/sass/apply/components/_table.scss
index 3edb14e1ee2915616a57e32ef6d09d625c9a7511..78049b10a6c34249795fc3807f7fca9dba0c0dd4 100644
--- a/hypha/static_src/src/sass/apply/components/_table.scss
+++ b/hypha/static_src/src/sass/apply/components/_table.scss
@@ -30,14 +30,14 @@
 
             a {
                 color: $color--black-60;
-                transition: color .25s ease-out;
+                transition: color 0.25s ease-out;
             }
         }
 
         // table rows
         tr {
             border: 1px solid $color--light-mid-grey;
-            transition: box-shadow .15s ease;
+            transition: box-shadow 0.15s ease;
 
             @include media-query($table-breakpoint) {
                 border-top: 0;
diff --git a/hypha/static_src/src/sass/apply/components/_tabs.scss b/hypha/static_src/src/sass/apply/components/_tabs.scss
index edb7d766514a3c43d8ba5aa3686e62b2eea1158c..9524b83a7da0111f75f015aaccdb900bbae75308 100644
--- a/hypha/static_src/src/sass/apply/components/_tabs.scss
+++ b/hypha/static_src/src/sass/apply/components/_tabs.scss
@@ -1,5 +1,5 @@
 .tabs {
-    margin: 20px 0 -20px;
+    margin: 1.5rem 0 -20px;
 
     &__container {
         display: flex;
@@ -25,7 +25,10 @@
         hyphens: auto;
         color: $color--mid-grey;
         text-transform: uppercase;
-        transition: color, background-color, .1s ease-out;
+        transition:
+            color,
+            background-color,
+            0.1s ease-out;
 
         @include media-query(mob-landscape) {
             width: 33%;
@@ -34,17 +37,21 @@
 
         @include media-query(small-tablet) {
             width: auto;
-            padding: 20px;
+            padding: 0.75rem 1rem;
         }
 
         &:hover {
             color: $color--light-blue;
+            background-color: rgba(
+                #fff,
+                0.8
+            ); // stylelint-disable-line color-no-hex
         }
 
         &--alt {
             font-size: map-get($font-sizes, zeta);
             font-weight: $weight--semibold;
-            padding: .5rem 1rem;
+            padding: 0.5rem 1rem;
             text-transform: none;
             display: inline-block;
             border-bottom: 3px solid transparent;
diff --git a/hypha/static_src/src/sass/apply/components/_two-factor.scss b/hypha/static_src/src/sass/apply/components/_two-factor.scss
index 3ab6ae68af3160aefc5c3dcb549347edb9d1f78b..410b24f6b73fd5363d7c967c677c48ee04e9e806 100644
--- a/hypha/static_src/src/sass/apply/components/_two-factor.scss
+++ b/hypha/static_src/src/sass/apply/components/_two-factor.scss
@@ -5,7 +5,7 @@
 
     &__back {
         position: absolute;
-        top: .5rem;
+        top: 0.5rem;
     }
 
     h1,
@@ -20,7 +20,7 @@
 }
 
 // 2FA token label font size
-label[for='id_generator-token'] {
+label[for="id_generator-token"] {
     font-size: 1.2em;
 }
 
diff --git a/hypha/static_src/src/sass/apply/components/_wrapper.scss b/hypha/static_src/src/sass/apply/components/_wrapper.scss
index 74a3e198a5d9e0e472a2d1f266eba97366026b5b..9df98f33440ddbdff7fe606a14f622627467a6a5 100644
--- a/hypha/static_src/src/sass/apply/components/_wrapper.scss
+++ b/hypha/static_src/src/sass/apply/components/_wrapper.scss
@@ -3,22 +3,25 @@
 
     &--small {
         max-width: $wrapper--small;
-        margin: 0 auto;
+        margin-left: auto;
+        margin-right: auto;
     }
 
     &--medium {
         max-width: $wrapper--medium;
-        margin: 0 auto;
+        margin-left: auto;
+        margin-right: auto;
     }
 
     &--large {
         max-width: $site-width;
-        margin: 0 auto;
+        margin-left: auto;
+        margin-right: auto;
     }
 
     &--main {
         padding: 0 $mobile-gutter;
-        min-height: calc(100vh - 260px - 160px);  // viewport - (header + footer)
+        min-height: calc(100vh - 260px - 160px); // viewport - (header + footer)
 
         @include media-query(desktop) {
             padding: 0;
@@ -63,7 +66,7 @@
     }
 
     &--light-grey-bg {
-        background-color: $color--light-grey;
+        background-color: var(--color-bg-default);
     }
 
     &--media-boxes {
@@ -91,11 +94,11 @@
     }
 
     &--form {
-        padding: 20px;
-        margin: 20px auto;
+        padding: 0;
+        margin: 2em auto;
 
-        @include media-query(tablet-portrait) {
-            padding: 2rem 17rem 2rem 5rem;
+        @include media-query(tablet-landscape) {
+            padding: 2rem 17rem 2rem 0;
             margin: 1rem auto 3rem;
         }
     }
@@ -242,7 +245,7 @@
     }
 
     &--status-bar-outer {
-        padding: 20px;
+        padding: 20px 0;
         background-color: $color--white;
         border-bottom: 3px solid $color--light-grey;
     }
diff --git a/hypha/static_src/src/sass/apply/fancybox.scss b/hypha/static_src/src/sass/apply/fancybox.scss
index cd57c18b5ed7ec72e944746ba78eb21abb7ad7f3..f96f4cbe0d67bbd624355a80d73d01dd48ed5e95 100644
--- a/hypha/static_src/src/sass/apply/fancybox.scss
+++ b/hypha/static_src/src/sass/apply/fancybox.scss
@@ -1,187 +1,193 @@
 // stylelint-disable
 body.fancybox-active {
-	overflow: hidden;
+    overflow: hidden;
 }
 
 body.fancybox-iosfix {
-	position: fixed;
+    position: fixed;
     left: 0;
     right: 0;
 }
 
 .fancybox-is-hidden {
-	position: absolute;
-	top: -9999px;
-	left: -9999px;
-	visibility: hidden;
+    position: absolute;
+    top: -9999px;
+    left: -9999px;
+    visibility: hidden;
 }
 
 .fancybox-container {
-	position: fixed;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	z-index: 99992;
-	-webkit-tap-highlight-color: rgba(0,0,0,0);
-	backface-visibility: hidden;
-	transform: translateZ(0);
-	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 99992;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+    backface-visibility: hidden;
+    transform: translateZ(0);
+    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
+        "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji",
+        "Segoe UI Emoji", "Segoe UI Symbol";
 }
 
 .fancybox-outer,
 .fancybox-inner,
 .fancybox-bg,
 .fancybox-stage {
-	position: absolute;
-	top: 0;
-	right: 0;
-	bottom: 0;
-	left: 0;
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
 }
 
 .fancybox-outer {
-	overflow-y: auto;
-	-webkit-overflow-scrolling: touch;
+    overflow-y: auto;
+    -webkit-overflow-scrolling: touch;
 }
 
 .fancybox-bg {
-	background: rgb(30,30,30);
-	opacity: 0;
-	transition-duration: inherit;
-	transition-property: opacity;
-	transition-timing-function: cubic-bezier(.47,0,.74,.71);
+    background: rgb(30, 30, 30);
+    opacity: 0;
+    transition-duration: inherit;
+    transition-property: opacity;
+    transition-timing-function: cubic-bezier(0.47, 0, 0.74, 0.71);
 }
 
 .fancybox-is-open .fancybox-bg {
-	opacity: .87;
-	transition-timing-function: cubic-bezier(.22,.61,.36,1);
+    opacity: 0.87;
+    transition-timing-function: cubic-bezier(0.22, 0.61, 0.36, 1);
 }
 
 .fancybox-infobar,
 .fancybox-toolbar,
 .fancybox-caption-wrap {
-	position: absolute;
-	direction: ltr;
-	z-index: 99997;
-	opacity: 0;
-	visibility: hidden;
-	transition: opacity .25s, visibility 0s linear .25s;
-	box-sizing: border-box;
+    position: absolute;
+    direction: ltr;
+    z-index: 99997;
+    opacity: 0;
+    visibility: hidden;
+    transition:
+        opacity 0.25s,
+        visibility 0s linear 0.25s;
+    box-sizing: border-box;
 }
 
 .fancybox-show-infobar .fancybox-infobar,
 .fancybox-show-toolbar .fancybox-toolbar,
 .fancybox-show-caption .fancybox-caption-wrap {
-	opacity: 1;
-	visibility: visible;
-	transition: opacity .25s, visibility 0s;
+    opacity: 1;
+    visibility: visible;
+    transition:
+        opacity 0.25s,
+        visibility 0s;
 }
 
 .fancybox-infobar {
-	top: 0;
-	left: 0;
-	font-size: 13px;
-	padding: 0 10px;
-	height: 44px;
-	min-width: 44px;
-	line-height: 44px;
-	color: #ccc;
-	text-align: center;
-	pointer-events: none;
-	user-select: none;
-	-webkit-touch-callout: none;
-	-webkit-tap-highlight-color: rgba(0,0,0,0);
-	-webkit-font-smoothing: subpixel-antialiased;
-	mix-blend-mode: exclusion;
+    top: 0;
+    left: 0;
+    font-size: 13px;
+    padding: 0 10px;
+    height: 44px;
+    min-width: 44px;
+    line-height: 44px;
+    color: #ccc;
+    text-align: center;
+    pointer-events: none;
+    user-select: none;
+    -webkit-touch-callout: none;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+    -webkit-font-smoothing: subpixel-antialiased;
+    mix-blend-mode: exclusion;
 }
 
 .fancybox-toolbar {
-	top: 0;
-	right: 0;
-	margin: 0;
-	padding: 0;
+    top: 0;
+    right: 0;
+    margin: 0;
+    padding: 0;
 }
 
 .fancybox-stage {
-	overflow: hidden;
-	direction: ltr;
-	z-index: 99994;
-	-webkit-transform: translate3d(0, 0, 0);
+    overflow: hidden;
+    direction: ltr;
+    z-index: 99994;
+    -webkit-transform: translate3d(0, 0, 0);
 }
 
 .fancybox-is-closing .fancybox-stage {
-  overflow: visible;
+    overflow: visible;
 }
 
 .fancybox-slide {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	margin: 0;
-	padding: 0;
-	overflow: auto;
-	outline: none;
-	white-space: normal;
-	box-sizing: border-box;
-	text-align: center;
-	z-index: 99994;
-	-webkit-overflow-scrolling: touch;
-	display: none;
-	backface-visibility: hidden;
-	transition-property: transform, opacity;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    overflow: auto;
+    outline: none;
+    white-space: normal;
+    box-sizing: border-box;
+    text-align: center;
+    z-index: 99994;
+    -webkit-overflow-scrolling: touch;
+    display: none;
+    backface-visibility: hidden;
+    transition-property: transform, opacity;
 }
 
 .fancybox-slide::before {
-	content: '';
-	display: inline-block;
-	vertical-align: middle;
-	height: 100%;
-	width: 0;
+    content: "";
+    display: inline-block;
+    vertical-align: middle;
+    height: 100%;
+    width: 0;
 }
 
 .fancybox-is-sliding .fancybox-slide,
 .fancybox-slide--previous,
 .fancybox-slide--current,
 .fancybox-slide--next {
-	display: block;
+    display: block;
 }
 
 .fancybox-slide--image {
-	overflow: visible;
+    overflow: visible;
 }
 
 .fancybox-slide--image::before {
-	display: none;
+    display: none;
 }
 
 .fancybox-slide--video .fancybox-content,
 .fancybox-slide--video iframe {
-	background: #000;
+    background: #000;
 }
 
 .fancybox-slide--map .fancybox-content,
 .fancybox-slide--map iframe {
-	background: #E5E3DF;
+    background: #e5e3df;
 }
 
 .fancybox-slide--next {
-	z-index: 99995;
+    z-index: 99995;
 }
 
 .fancybox-slide > * {
-	display: inline-block;
-	position: relative;
-	padding: 24px;
-	margin: 44px 0 44px;
-	border-width: 0;
-	vertical-align: middle;
-	text-align: left;
-	background-color: #fff;
-	overflow: auto;
-	box-sizing: border-box;
+    display: inline-block;
+    position: relative;
+    padding: 24px;
+    margin: 44px 0 44px;
+    border-width: 0;
+    vertical-align: middle;
+    text-align: left;
+    background-color: #fff;
+    overflow: auto;
+    box-sizing: border-box;
 }
 
 .fancybox-slide > title,
@@ -190,101 +196,100 @@ body.fancybox-iosfix {
 .fancybox-slide > link,
 .fancybox-slide > script,
 .fancybox-slide > base {
-	display: none;
+    display: none;
 }
 
 .fancybox-slide .fancybox-image-wrap {
-	position: absolute;
-	top: 0;
-	left: 0;
-	margin: 0;
-	padding: 0;
-	border: 0;
-	z-index: 99995;
-	background: transparent;
-	cursor: default;
-	overflow: visible;
-	transform-origin: top left;
-	background-size: 100% 100%;
-	background-repeat: no-repeat;
-	backface-visibility: hidden;
-	user-select: none;
-	transition-property: transform, opacity;
+    position: absolute;
+    top: 0;
+    left: 0;
+    margin: 0;
+    padding: 0;
+    border: 0;
+    z-index: 99995;
+    background: transparent;
+    cursor: default;
+    overflow: visible;
+    transform-origin: top left;
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+    backface-visibility: hidden;
+    user-select: none;
+    transition-property: transform, opacity;
 }
 
 .fancybox-can-zoomOut .fancybox-image-wrap {
-	cursor: zoom-out;
+    cursor: zoom-out;
 }
 
 .fancybox-can-zoomIn .fancybox-image-wrap {
-	cursor: zoom-in;
+    cursor: zoom-in;
 }
 
 .fancybox-can-drag .fancybox-image-wrap {
-	cursor: grab;
+    cursor: grab;
 }
 
 .fancybox-is-dragging .fancybox-image-wrap {
-	cursor: grabbing;
+    cursor: grabbing;
 }
 
 .fancybox-image,
 .fancybox-spaceball {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	margin: 0;
-	padding: 0;
-	border: 0;
-	max-width: none;
-	max-height: none;
-	user-select: none;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    border: 0;
+    max-width: none;
+    max-height: none;
+    user-select: none;
 }
 
- .fancybox-spaceball {
-	z-index: 1;
+.fancybox-spaceball {
+    z-index: 1;
 }
 
 .fancybox-slide--iframe .fancybox-content {
-	padding: 0;
-	width: 80%;
-	height: 80%;
-	max-width: calc(100% - 100px);
-	max-height: calc(100% - 88px);
-	overflow: visible;
-	background: #fff;
+    padding: 0;
+    width: 80%;
+    height: 80%;
+    max-width: calc(100% - 100px);
+    max-height: calc(100% - 88px);
+    overflow: visible;
+    background: #fff;
 }
 
 .fancybox-iframe {
-	display: block;
-	margin: 0;
-	padding: 0;
-	border: 0;
-	width: 100%;
-	height: 100%;
-	background: #fff;
+    display: block;
+    margin: 0;
+    padding: 0;
+    border: 0;
+    width: 100%;
+    height: 100%;
+    background: #fff;
 }
 
 .fancybox-error {
-	margin: 0;
-	padding: 40px;
-	width: 100%;
-	max-width: 380px;
-	background: #fff;
-	cursor: default;
+    margin: 0;
+    padding: 40px;
+    width: 100%;
+    max-width: 380px;
+    background: #fff;
+    cursor: default;
 }
 
 .fancybox-error p {
-	margin: 0;
-	padding: 0;
-	color: #444;
-	font-size: 16px;
-	line-height: 20px;
+    margin: 0;
+    padding: 0;
+    color: #444;
+    font-size: 16px;
+    line-height: 20px;
 }
 
-
 /* Buttons */
 
 .fancybox-button {
@@ -297,32 +302,32 @@ body.fancybox-iosfix {
     padding: 10px;
     border: 0;
     border-radius: 0;
-    background: rgba(30,30,30,0.6);
-    transition: color .3s ease;
+    background: rgba(30, 30, 30, 0.6);
+    transition: color 0.3s ease;
     cursor: pointer;
-	outline: none;
+    outline: none;
 }
 
 .fancybox-button,
 .fancybox-button:visited,
 .fancybox-button:link {
-	color: #ccc;
+    color: #ccc;
 }
 
 .fancybox-button:focus,
 .fancybox-button:hover {
-	color: #fff;
+    color: #fff;
 }
 
 .fancybox-button[disabled] {
-	color: #ccc;
-	cursor: default;
-    opacity: .6;
+    color: #ccc;
+    cursor: default;
+    opacity: 0.6;
 }
 
 .fancybox-button svg {
     display: block;
-	position: relative;
+    position: relative;
     overflow: visible;
     shape-rendering: geometricPrecision;
 }
@@ -335,7 +340,7 @@ body.fancybox-iosfix {
 }
 
 .fancybox-button--share svg path {
-	stroke-width: 1;
+    stroke-width: 1;
 }
 
 .fancybox-button--play svg path:nth-child(2) {
@@ -347,10 +352,9 @@ body.fancybox-iosfix {
 }
 
 .fancybox-button--zoom svg path {
-	fill: transparent;
+    fill: transparent;
 }
 
-
 /* Navigation arrows */
 
 .fancybox-navigation {
@@ -366,236 +370,245 @@ body.fancybox-iosfix {
     top: 50%;
     margin: -50px 0 0 0;
     z-index: 99997;
-	background: transparent;
-	width: 60px;
-	height: 100px;
-	padding: 17px;
+    background: transparent;
+    width: 60px;
+    height: 100px;
+    padding: 17px;
 }
 
 .fancybox-navigation button:before {
-	content: "";
-	position: absolute;
-	top: 30px;
-	right: 10px;
-	width: 40px;
-	height: 40px;
-	background: rgba(30,30,30,0.6);
+    content: "";
+    position: absolute;
+    top: 30px;
+    right: 10px;
+    width: 40px;
+    height: 40px;
+    background: rgba(30, 30, 30, 0.6);
 }
 
 .fancybox-navigation .fancybox-button--arrow_left {
-	left: 0;
+    left: 0;
 }
 
 .fancybox-navigation .fancybox-button--arrow_right {
-	right: 0;
+    right: 0;
 }
 
 /* Close button on the top right corner of html content */
 
 .fancybox-close-small {
-	position: absolute;
-	top: 5px;
-	right: 5px;
-	width: 40px;
-	height: 40px;
-	padding: 0;
-	margin: 0;
-	border: 0;
-	border-radius: 0;
-	background: transparent;
-	z-index: 10;
-	cursor: pointer;
+    position: absolute;
+    top: 5px;
+    right: 5px;
+    width: 40px;
+    height: 40px;
+    padding: 0;
+    margin: 0;
+    border: 0;
+    border-radius: 0;
+    background: transparent;
+    z-index: 10;
+    cursor: pointer;
 }
 
 .fancybox-close-small:focus {
-	outline: none;
+    outline: none;
 }
 
 .fancybox-close-small:focus:after {
-	outline: 1px dotted #888;
+    outline: 1px dotted #888;
 }
 
 .fancybox-close-small:hover:after {
-	color: #555;
-	background: #eee;
+    color: #555;
+    background: #eee;
 }
 
 .fancybox-slide--image .fancybox-close-small,
 .fancybox-slide--iframe .fancybox-close-small {
-	top: 0;
-	right: -40px;
+    top: 0;
+    right: -40px;
 }
 
 .fancybox-slide--image .fancybox-close-small:after,
 .fancybox-slide--iframe .fancybox-close-small:after {
-	font-size: 35px;
-	color: #aaa;
+    font-size: 35px;
+    color: #aaa;
 }
 
 .fancybox-slide--image .fancybox-close-small:hover:after,
 .fancybox-slide--iframe .fancybox-close-small:hover:after {
-	color: #fff;
-	background: transparent;
+    color: #fff;
+    background: transparent;
 }
 
 .fancybox-is-scaling .fancybox-close-small,
 .fancybox-is-zoomable.fancybox-can-drag .fancybox-close-small {
-	display: none;
+    display: none;
 }
 
 /* Caption */
 
 .fancybox-caption-wrap {
-	bottom: 0;
-	left: 0;
-	right: 0;
-	padding: 60px 2vw 0 2vw;
-	background: linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.1) 20%, rgba(0,0,0,0.2) 40%,rgba(0,0,0,0.6) 80%, rgba(0,0,0,0.8) 100%);
-	pointer-events: none;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    padding: 60px 2vw 0 2vw;
+    background: linear-gradient(
+        to bottom,
+        rgba(0, 0, 0, 0) 0%,
+        rgba(0, 0, 0, 0.1) 20%,
+        rgba(0, 0, 0, 0.2) 40%,
+        rgba(0, 0, 0, 0.6) 80%,
+        rgba(0, 0, 0, 0.8) 100%
+    );
+    pointer-events: none;
 }
 
 .fancybox-caption {
-	padding: 30px 0;
-	border-top: 1px solid rgba(255,255,255,0.4);
-	font-size: 14px;
-	color: #fff;
-	line-height: 20px;
-	-webkit-text-size-adjust: none;
+    padding: 30px 0;
+    border-top: 1px solid rgba(255, 255, 255, 0.4);
+    font-size: 14px;
+    color: #fff;
+    line-height: 20px;
+    -webkit-text-size-adjust: none;
 }
 
 .fancybox-caption a,
 .fancybox-caption button,
 .fancybox-caption select {
-	pointer-events: all;
-	position: relative; /* Fix IE11 */
+    pointer-events: all;
+    position: relative; /* Fix IE11 */
 }
 
 .fancybox-caption a {
-	color: #fff;
-	text-decoration: underline;
+    color: #fff;
+    text-decoration: underline;
 }
 
-
 /* Loading indicator */
 
 .fancybox-slide > .fancybox-loading {
-	border: 6px solid rgba(100, 100, 100, .4);
-	border-top: 6px solid rgba(255, 255, 255, .6);
-	border-radius: 100%;
-	height: 50px;
-	width: 50px;
-	animation: fancybox-rotate .8s infinite linear;
-	background: transparent;
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	margin-top: -30px;
-	margin-left: -30px;
-	z-index: 99999;
+    border: 6px solid rgba(100, 100, 100, 0.4);
+    border-top: 6px solid rgba(255, 255, 255, 0.6);
+    border-radius: 100%;
+    height: 50px;
+    width: 50px;
+    animation: fancybox-rotate 0.8s infinite linear;
+    background: transparent;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    margin-top: -30px;
+    margin-left: -30px;
+    z-index: 99999;
 }
 
 @keyframes fancybox-rotate {
-	from { transform: rotate( 0deg ); }
-	to   { transform: rotate( 359deg ); }
+    from {
+        transform: rotate(0deg);
+    }
+    to {
+        transform: rotate(359deg);
+    }
 }
 
-
 /* Transition effects */
 
 .fancybox-animated {
-	transition-timing-function: cubic-bezier(0, 0, .25, 1);
+    transition-timing-function: cubic-bezier(0, 0, 0.25, 1);
 }
 
 /* transitionEffect: slide */
 
 .fancybox-fx-slide.fancybox-slide--previous {
-	transform: translate3d(-100%, 0, 0);
-	opacity: 0;
+    transform: translate3d(-100%, 0, 0);
+    opacity: 0;
 }
 
 .fancybox-fx-slide.fancybox-slide--next {
-	transform: translate3d(100%, 0, 0);
-	opacity: 0;
+    transform: translate3d(100%, 0, 0);
+    opacity: 0;
 }
 
 .fancybox-fx-slide.fancybox-slide--current {
-	transform: translate3d(0, 0, 0);
-	opacity: 1;
+    transform: translate3d(0, 0, 0);
+    opacity: 1;
 }
 
 /* transitionEffect: fade */
 
 .fancybox-fx-fade.fancybox-slide--previous,
 .fancybox-fx-fade.fancybox-slide--next {
-	opacity: 0;
-	transition-timing-function: cubic-bezier(.19,1,.22,1);
+    opacity: 0;
+    transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1);
 }
 
 .fancybox-fx-fade.fancybox-slide--current {
-	opacity: 1;
+    opacity: 1;
 }
 
 /* transitionEffect: zoom-in-out */
 
 .fancybox-fx-zoom-in-out.fancybox-slide--previous {
-	transform: scale3d(1.5, 1.5, 1.5);
-	opacity: 0;
+    transform: scale3d(1.5, 1.5, 1.5);
+    opacity: 0;
 }
 
 .fancybox-fx-zoom-in-out.fancybox-slide--next {
-	transform: scale3d(0.5, .5, .5);
-	opacity: 0;
+    transform: scale3d(0.5, 0.5, 0.5);
+    opacity: 0;
 }
 
 .fancybox-fx-zoom-in-out.fancybox-slide--current {
-	transform: scale3d(1, 1, 1);
-	opacity: 1;
+    transform: scale3d(1, 1, 1);
+    opacity: 1;
 }
 
 /* transitionEffect: rotate */
 
 .fancybox-fx-rotate.fancybox-slide--previous {
-	transform: rotate(-360deg);
-	opacity: 0;
+    transform: rotate(-360deg);
+    opacity: 0;
 }
 
 .fancybox-fx-rotate.fancybox-slide--next {
-	transform: rotate(360deg);
-	opacity: 0;
+    transform: rotate(360deg);
+    opacity: 0;
 }
 
 .fancybox-fx-rotate.fancybox-slide--current {
-	transform: rotate(0deg);
-	opacity: 1;
+    transform: rotate(0deg);
+    opacity: 1;
 }
 
 /* transitionEffect: circular */
 
 .fancybox-fx-circular.fancybox-slide--previous {
-	transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
-	opacity: 0;
+    transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
+    opacity: 0;
 }
 
 .fancybox-fx-circular.fancybox-slide--next {
-	transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
-	opacity: 0;
+    transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
+    opacity: 0;
 }
 
 .fancybox-fx-circular.fancybox-slide--current {
-	transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-	opacity: 1;
+    transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
+    opacity: 1;
 }
 
 /* transitionEffect: tube */
 
 .fancybox-fx-tube.fancybox-slide--previous {
-	transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
+    transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
 }
 
 .fancybox-fx-tube.fancybox-slide--next {
-	transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg);
+    transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg);
 }
 
 .fancybox-fx-tube.fancybox-slide--current {
-	transform: translate3d(0, 0, 0) scale(1);
+    transform: translate3d(0, 0, 0) scale(1);
 }
diff --git a/hypha/static_src/src/sass/apply/layout/_header.scss b/hypha/static_src/src/sass/apply/layout/_header.scss
index a7e29b41294aee14dae839a6543c03ca4172d0bb..cbdb7d25d496128dcce225dd268083b827d745fd 100644
--- a/hypha/static_src/src/sass/apply/layout/_header.scss
+++ b/hypha/static_src/src/sass/apply/layout/_header.scss
@@ -1,7 +1,8 @@
 .header {
     position: relative;
     padding: 20px;
-    background-color: $color--white;
+    background-color: var(--color-header-bg);
+    border-bottom: 1px solid rgb(136 146 171 / 10%);
 
     &__inner {
         position: relative;
@@ -94,9 +95,9 @@
             background: $color--dark-grey;
             opacity: 0;
             transform: translate3d(0, -100%, 0);
-            transition-duration: .25s;
+            transition-duration: 0.25s;
             transition-property: transform, opacity;
-            transition-timing-function: cubic-bezier(.65, .05, .36, 1);
+            transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);
 
             &.is-visible {
                 opacity: 1;
diff --git a/hypha/static_src/src/sass/apply/main.scss b/hypha/static_src/src/sass/apply/main.scss
index 44f37e26a0ce00f7e1b943d612454d1f5c7d400b..2f7b7945dfc4385e9e292f432d1432dd89088a42 100644
--- a/hypha/static_src/src/sass/apply/main.scss
+++ b/hypha/static_src/src/sass/apply/main.scss
@@ -1,81 +1,80 @@
 // Abstracts
-@import 'abstracts/functions';
-@import 'abstracts/mixins';
-@import 'abstracts/variables';
+@import "abstracts/functions";
+@import "abstracts/mixins";
+@import "abstracts/variables";
 
 // Custom overrides
-@import 'custom/extra';
+@import "custom/extra";
 
 // Base
-@import 'base/base';
-@import 'base/typography';
+@import "base/base";
+@import "base/typography";
 
 // Components
-@import 'components/nprogress';
-@import 'components/alert';
-@import 'components/all-submissions-table';
-@import 'components/all-reviews-table';
-@import 'components/admin-bar';
-@import 'components/actions-bar';
-@import 'components/card';
-@import 'components/cookieconsent';
-@import 'components/comment';
-@import 'components/button';
-@import 'components/editor';
-@import 'components/error-bar';
-@import 'components/feed';
-@import 'components/filters';
-@import 'components/grid';
-@import 'components/heading';
-@import 'components/icon';
-@import 'components/link';
-@import 'components/list';
-@import 'components/list-reveal';
-@import 'components/modal';
-@import 'components/rich-text';
-@import 'components/section';
-@import 'components/sidebar';
-@import 'components/tabs';
-@import 'components/status-bar';
-@import 'components/form';
-@import 'components/input';
-@import 'components/nav';
-@import 'components/pagination';
-@import 'components/profile';
-@import 'components/projects-table';
-@import 'components/related-sidebar';
-@import 'components/responsive-table';
-@import 'components/reviewer-dash-box';
-@import 'components/reviews-list';
-@import 'components/reviews-summary';
-@import 'components/reviews-sidebar';
-@import 'components/round-block';
-@import 'components/select2';
-@import 'components/simplified';
-@import 'components/status-block';
-@import 'components/submission-meta';
-@import 'components/revision';
-@import 'components/table';
-@import 'components/tooltip';
-@import 'components/traffic-light';
-@import 'components/wrapper';
-@import 'components/revisions';
-@import 'components/messages';
-@import 'components/stat-block';
-@import 'components/docs-block';
-@import 'components/funding-block';
-@import 'components/data-block';
-@import 'components/invoice-block';
-@import 'components/reminder-sidebar';
-@import 'components/two-factor';
-@import 'components/determination';
-@import 'components/activity-notifications';
-@import 'components/dropdown';
-@import 'components/banner';
-@import 'components/file-form';
+@import "components/nprogress";
+@import "components/alert";
+@import "components/all-submissions-table";
+@import "components/all-reviews-table";
+@import "components/admin-bar";
+@import "components/actions-bar";
+@import "components/card";
+@import "components/cookieconsent";
+@import "components/comment";
+@import "components/button";
+@import "components/editor";
+@import "components/error-bar";
+@import "components/feed";
+@import "components/filters";
+@import "components/grid";
+@import "components/heading";
+@import "components/icon";
+@import "components/link";
+@import "components/list";
+@import "components/list-reveal";
+@import "components/modal";
+@import "components/rich-text";
+@import "components/section";
+@import "components/sidebar";
+@import "components/tabs";
+@import "components/status-bar";
+@import "components/form";
+@import "components/nav";
+@import "components/pagination";
+@import "components/profile";
+@import "components/projects-table";
+@import "components/related-sidebar";
+@import "components/responsive-table";
+@import "components/reviewer-dash-box";
+@import "components/reviews-list";
+@import "components/reviews-summary";
+@import "components/reviews-sidebar";
+@import "components/round-block";
+@import "components/select2";
+@import "components/simplified";
+@import "components/status-block";
+@import "components/submission-meta";
+@import "components/revision";
+@import "components/table";
+@import "components/tooltip";
+@import "components/traffic-light";
+@import "components/wrapper";
+@import "components/revisions";
+@import "components/messages";
+@import "components/stat-block";
+@import "components/docs-block";
+@import "components/funding-block";
+@import "components/data-block";
+@import "components/invoice-block";
+@import "components/reminder-sidebar";
+@import "components/two-factor";
+@import "components/determination";
+@import "components/activity-notifications";
+@import "components/dropdown";
+@import "components/banner";
+@import "components/file-form";
 
 // Layout
-@import 'layout/header';
+@import "layout/header";
 
 // Custom overrides
-@import 'custom/custom';
+@import "custom/custom";
diff --git a/hypha/static_src/src/sass/apply/styleguide.scss b/hypha/static_src/src/sass/apply/styleguide.scss
index 9d4ea4ea4eb0daec822b866cc039b910304f4f15..6667c9202f6c24cfefb8cdd9700e9fbd982b6751 100644
--- a/hypha/static_src/src/sass/apply/styleguide.scss
+++ b/hypha/static_src/src/sass/apply/styleguide.scss
@@ -1,74 +1,73 @@
 // Abstracts
-@import 'abstracts/functions';
-@import 'abstracts/mixins';
-@import 'abstracts/variables';
+@import "abstracts/functions";
+@import "abstracts/mixins";
+@import "abstracts/variables";
 
 // Base
-@import 'base/base';
-@import 'base/typography';
+@import "base/base";
+@import "base/typography";
 
 // Components
-@import 'components/alert';
-@import 'components/all-submissions-table';
-@import 'components/all-reviews-table';
-@import 'components/admin-bar';
-@import 'components/actions-bar';
-@import 'components/card';
-@import 'components/cookieconsent';
-@import 'components/comment';
-@import 'components/button';
-@import 'components/editor';
-@import 'components/error-bar';
-@import 'components/feed';
-@import 'components/filters';
-@import 'components/grid';
-@import 'components/heading';
-@import 'components/icon';
-@import 'components/link';
-@import 'components/list';
-@import 'components/list-reveal';
-@import 'components/modal';
-@import 'components/rich-text';
-@import 'components/section';
-@import 'components/sidebar';
-@import 'components/tabs';
-@import 'components/status-bar';
-@import 'components/form';
-@import 'components/input';
-@import 'components/nav';
-@import 'components/pagination';
-@import 'components/profile';
-@import 'components/projects-table';
-@import 'components/related-sidebar';
-@import 'components/responsive-table';
-@import 'components/reviewer-dash-box';
-@import 'components/reviews-list';
-@import 'components/reviews-summary';
-@import 'components/reviews-sidebar';
-@import 'components/round-block';
-@import 'components/select2';
-@import 'components/simplified';
-@import 'components/status-block';
-@import 'components/submission-meta';
-@import 'components/revision';
-@import 'components/table';
-@import 'components/tooltip';
-@import 'components/traffic-light';
-@import 'components/wrapper';
-@import 'components/revisions';
-@import 'components/messages';
-@import 'components/stat-block';
-@import 'components/docs-block';
-@import 'components/funding-block';
-@import 'components/data-block';
-@import 'components/invoice-block';
-@import 'components/reminder-sidebar';
-@import 'components/two-factor';
-@import 'components/determination';
-@import 'components/dropdown';
+@import "components/alert";
+@import "components/all-submissions-table";
+@import "components/all-reviews-table";
+@import "components/admin-bar";
+@import "components/actions-bar";
+@import "components/card";
+@import "components/cookieconsent";
+@import "components/comment";
+@import "components/button";
+@import "components/editor";
+@import "components/error-bar";
+@import "components/feed";
+@import "components/filters";
+@import "components/grid";
+@import "components/heading";
+@import "components/icon";
+@import "components/link";
+@import "components/list";
+@import "components/list-reveal";
+@import "components/modal";
+@import "components/rich-text";
+@import "components/section";
+@import "components/sidebar";
+@import "components/tabs";
+@import "components/status-bar";
+@import "components/form";
+@import "components/nav";
+@import "components/pagination";
+@import "components/profile";
+@import "components/projects-table";
+@import "components/related-sidebar";
+@import "components/responsive-table";
+@import "components/reviewer-dash-box";
+@import "components/reviews-list";
+@import "components/reviews-summary";
+@import "components/reviews-sidebar";
+@import "components/round-block";
+@import "components/select2";
+@import "components/simplified";
+@import "components/status-block";
+@import "components/submission-meta";
+@import "components/revision";
+@import "components/table";
+@import "components/tooltip";
+@import "components/traffic-light";
+@import "components/wrapper";
+@import "components/revisions";
+@import "components/messages";
+@import "components/stat-block";
+@import "components/docs-block";
+@import "components/funding-block";
+@import "components/data-block";
+@import "components/invoice-block";
+@import "components/reminder-sidebar";
+@import "components/two-factor";
+@import "components/determination";
+@import "components/dropdown";
 
 // Layout
-@import 'layout/header';
+@import "layout/header";
 
 // Styleguide
 
diff --git a/hypha/static_src/src/sass/apply/wagtail_editor.scss b/hypha/static_src/src/sass/apply/wagtail_editor.scss
index dc1df5f210176b15003125f1b250202bbfdbf8e2..06c93c0986fd7d4ad5d0f9c36c6b98a8dc31acf5 100644
--- a/hypha/static_src/src/sass/apply/wagtail_editor.scss
+++ b/hypha/static_src/src/sass/apply/wagtail_editor.scss
@@ -1,9 +1,9 @@
 // stylelint-disable block-no-empty
 
 // Abstracts
-@import 'abstracts/functions';
-@import 'abstracts/mixins';
-@import 'abstracts/variables';
+@import "abstracts/functions";
+@import "abstracts/mixins";
+@import "abstracts/variables";
 
 .wmd-panel {
 }
@@ -67,7 +67,7 @@
 
     & > span {
         display: inline-block;
-        background-image: url('./../../images/editor-buttons.png');
+        background-image: url("./../../images/editor-buttons.png");
         background-repeat: no-repeat;
         background-position: 0 0;
         width: 20px;
@@ -93,6 +93,6 @@
 
 .wmd-prompt-dialog {
     background-color: $color--light-grey;
-    padding: .5em;
+    padding: 0.5em;
     border: 4px solid $color--primary;
 }
diff --git a/hypha/static_src/src/sass/apply/wagtail_users_list.scss b/hypha/static_src/src/sass/apply/wagtail_users_list.scss
index 62ec24d11d2d388e8b914e80df12d3e6cfd48864..cf37aa6d988afdcd185528e1a62439116b25ad16 100644
--- a/hypha/static_src/src/sass/apply/wagtail_users_list.scss
+++ b/hypha/static_src/src/sass/apply/wagtail_users_list.scss
@@ -1,7 +1,7 @@
 // Abstracts
-@import 'abstracts/functions';
-@import 'abstracts/mixins';
-@import 'abstracts/variables';
+@import "abstracts/functions";
+@import "abstracts/mixins";
+@import "abstracts/variables";
 
 .users-list {
     display: grid;
@@ -19,7 +19,7 @@
     &__filters {
         grid-column-start: col-start -2 col-end -1;
 
-        button[type='submit'] {
+        button[type="submit"] {
             display: block;
             margin-top: 20px;
         }
diff --git a/hypha/static_src/src/sass/normalize.scss b/hypha/static_src/src/sass/normalize.scss
index 806998fd27f41d7b641db2096fbdee0d61565565..0d0e1539f828553d69a5916443b986976fb70597 100644
--- a/hypha/static_src/src/sass/normalize.scss
+++ b/hypha/static_src/src/sass/normalize.scss
@@ -4,7 +4,7 @@
 /* Document
    ========================================================================== */
 
-@import 'apply/abstracts/variables';
+@import "apply/abstracts/variables";
 
 /**
  * 1. Correct the line height in all browsers.
@@ -12,8 +12,8 @@
  */
 
 html {
-  line-height: 1.15; /* 1 */
-  -webkit-text-size-adjust: 100%; /* 2 */
+    line-height: 1.15; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
 }
 
 /* Sections
@@ -24,7 +24,7 @@ html {
  */
 
 body {
-  margin: 0;
+    margin: 0;
 }
 
 /**
@@ -32,7 +32,7 @@ body {
  */
 
 main {
-  display: block;
+    display: block;
 }
 
 /**
@@ -41,8 +41,8 @@ main {
  */
 
 h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
+    font-size: 2em;
+    margin: 0.67em 0;
 }
 
 /* Grouping content
@@ -54,9 +54,9 @@ h1 {
  */
 
 hr {
-  box-sizing: content-box; /* 1 */
-  height: 0; /* 1 */
-  overflow: visible; /* 2 */
+    box-sizing: content-box; /* 1 */
+    height: 0; /* 1 */
+    overflow: visible; /* 2 */
 }
 
 /**
@@ -65,8 +65,8 @@ hr {
  */
 
 pre {
-  font-family: monospace, monospace; /* 1 */
-  font-size: 1em; /* 2 */
+    font-family: monospace, monospace; /* 1 */
+    font-size: 1em; /* 2 */
 }
 
 /* Text-level semantics
@@ -77,7 +77,7 @@ pre {
  */
 
 a {
-  background-color: transparent;
+    background-color: transparent;
 }
 
 /**
@@ -86,9 +86,9 @@ a {
  */
 
 abbr[title] {
-  border-bottom: none; /* 1 */
-  text-decoration: underline; /* 2 */
-  text-decoration: underline dotted; /* 2 */
+    border-bottom: none; /* 1 */
+    text-decoration: underline; /* 2 */
+    text-decoration: underline dotted; /* 2 */
 }
 
 /**
@@ -97,7 +97,7 @@ abbr[title] {
 
 b,
 strong {
-  font-weight: bolder;
+    font-weight: bolder;
 }
 
 /**
@@ -108,8 +108,8 @@ strong {
 code,
 kbd,
 samp {
-  font-family: monospace, monospace; /* 1 */
-  font-size: 1em; /* 2 */
+    font-family: monospace, monospace; /* 1 */
+    font-size: 1em; /* 2 */
 }
 
 /**
@@ -117,7 +117,7 @@ samp {
  */
 
 small {
-  font-size: 80%;
+    font-size: 80%;
 }
 
 /**
@@ -127,18 +127,18 @@ small {
 
 sub,
 sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
 }
 
 sub {
-  bottom: -0.25em;
+    bottom: -0.25em;
 }
 
 sup {
-  top: -0.5em;
+    top: -0.5em;
 }
 
 /* Embedded content
@@ -149,7 +149,7 @@ sup {
  */
 
 img {
-  border-style: none;
+    border-style: none;
 }
 
 /* Forms
@@ -165,10 +165,10 @@ input,
 optgroup,
 select,
 textarea {
-  font-family: inherit; /* 1 */
-  font-size: 100%; /* 1 */
-  line-height: 1.15; /* 1 */
-  margin: 0; /* 2 */
+    font-family: inherit; /* 1 */
+    font-size: 100%; /* 1 */
+    line-height: 1.15; /* 1 */
+    margin: 0; /* 2 */
 }
 
 /**
@@ -177,8 +177,9 @@ textarea {
  */
 
 button,
-input { /* 1 */
-  overflow: visible;
+input {
+    /* 1 */
+    overflow: visible;
 }
 
 /**
@@ -187,8 +188,9 @@ input { /* 1 */
  */
 
 button,
-select { /* 1 */
-  text-transform: none;
+select {
+    /* 1 */
+    text-transform: none;
 }
 
 /**
@@ -199,7 +201,7 @@ button,
 [type="button"],
 [type="reset"],
 [type="submit"] {
-  -webkit-appearance: button;
+    -webkit-appearance: button;
 }
 
 /**
@@ -210,8 +212,8 @@ button::-moz-focus-inner,
 [type="button"]::-moz-focus-inner,
 [type="reset"]::-moz-focus-inner,
 [type="submit"]::-moz-focus-inner {
-  border-style: none;
-  padding: 0;
+    border-style: none;
+    padding: 0;
 }
 
 /**
@@ -222,7 +224,7 @@ button:-moz-focusring,
 [type="button"]:-moz-focusring,
 [type="reset"]:-moz-focusring,
 [type="submit"]:-moz-focusring {
-  outline: 1px dotted ButtonText;
+    outline: 1px dotted ButtonText;
 }
 
 /**
@@ -230,10 +232,10 @@ button:-moz-focusring,
  */
 
 fieldset {
-  padding: 0.35em 0.75em 0.625em;
-  border-width: 1px;
-  border-style: solid;
-  border-color: $color--mid-grey;
+    padding: 0.35em 0.75em 0.625em;
+    border-width: 1px;
+    border-style: solid;
+    border-color: $color--mid-grey;
 }
 
 /**
@@ -244,12 +246,12 @@ fieldset {
  */
 
 legend {
-  box-sizing: border-box; /* 1 */
-  color: inherit; /* 2 */
-  display: table; /* 1 */
-  max-width: 100%; /* 1 */
-  padding: 0; /* 3 */
-  white-space: normal; /* 1 */
+    box-sizing: border-box; /* 1 */
+    color: inherit; /* 2 */
+    display: table; /* 1 */
+    max-width: 100%; /* 1 */
+    padding: 0; /* 3 */
+    white-space: normal; /* 1 */
 }
 
 /**
@@ -257,7 +259,7 @@ legend {
  */
 
 progress {
-  vertical-align: baseline;
+    vertical-align: baseline;
 }
 
 /**
@@ -265,7 +267,7 @@ progress {
  */
 
 textarea {
-  overflow: auto;
+    overflow: auto;
 }
 
 /**
@@ -275,8 +277,8 @@ textarea {
 
 [type="checkbox"],
 [type="radio"] {
-  box-sizing: border-box; /* 1 */
-  padding: 0; /* 2 */
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
 }
 
 /**
@@ -285,7 +287,7 @@ textarea {
 
 [type="number"]::-webkit-inner-spin-button,
 [type="number"]::-webkit-outer-spin-button {
-  height: auto;
+    height: auto;
 }
 
 /**
@@ -294,8 +296,8 @@ textarea {
  */
 
 [type="search"] {
-  -webkit-appearance: textfield; /* 1 */
-  outline-offset: -2px; /* 2 */
+    -webkit-appearance: textfield; /* 1 */
+    outline-offset: -2px; /* 2 */
 }
 
 /**
@@ -303,7 +305,7 @@ textarea {
  */
 
 [type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
+    -webkit-appearance: none;
 }
 
 /**
@@ -312,8 +314,8 @@ textarea {
  */
 
 ::-webkit-file-upload-button {
-  -webkit-appearance: button; /* 1 */
-  font: inherit; /* 2 */
+    -webkit-appearance: button; /* 1 */
+    font: inherit; /* 2 */
 }
 
 /* Interactive
@@ -324,7 +326,7 @@ textarea {
  */
 
 details {
-  display: block;
+    display: block;
 }
 
 /*
@@ -332,7 +334,7 @@ details {
  */
 
 summary {
-  display: list-item;
+    display: list-item;
 }
 
 /* Misc
@@ -343,7 +345,7 @@ summary {
  */
 
 template {
-  display: none;
+    display: none;
 }
 
 /**
@@ -351,5 +353,5 @@ template {
  */
 
 [hidden] {
-  display: none;
+    display: none;
 }
diff --git a/hypha/static_src/src/sass/print.scss b/hypha/static_src/src/sass/print.scss
index fcb769fc5ce8e1ce2d93d297140ff48ed70721e1..57454e09697151907cc1024369c5f556eca04737 100644
--- a/hypha/static_src/src/sass/print.scss
+++ b/hypha/static_src/src/sass/print.scss
@@ -7,7 +7,7 @@
     text-shadow: none !important;
     filter: none !important;
     -ms-filter: none !important;
-    font-family: 'Garamond Premier Pro', serif !important;
+    font-family: "Garamond Premier Pro", serif !important;
     font-style: normal !important;
     letter-spacing: normal !important;
     text-align: left !important;
@@ -37,15 +37,15 @@ body {
 }
 
 // Add visible URL after links.
-a[href^='http:']::after,
-a[href^='https:']::after {
-    content: ' (' attr(href) ')';
+a[href^="http:"]::after,
+a[href^="https:"]::after {
+    content: " (" attr(href) ")";
 }
 
 abbr[title] {
     // Add visible title after abbreviations.
     &::after {
-        content: ' (' attr(title) ')';
+        content: " (" attr(title) ")";
     }
 }
 
diff --git a/hypha/static_src/src/sass/public/abstracts/_functions.scss b/hypha/static_src/src/sass/public/abstracts/_functions.scss
index bc9d71f89d259a35b9e0455fb348ccae3028a7a2..89b4f08abf25fd4d95be2cea5237d6d39f540a40 100644
--- a/hypha/static_src/src/sass/public/abstracts/_functions.scss
+++ b/hypha/static_src/src/sass/public/abstracts/_functions.scss
@@ -1,6 +1,6 @@
 // stylelint-disable scss/function-unquote-no-unquoted-strings-inside
 
-@use 'sass:math';
+@use "sass:math";
 
 // Strip the unit from the given value and return the value
 @function strip-unit($value) {
@@ -18,20 +18,23 @@
 @function opposite-direction($directions) {
     $opposite-directions: ();
     $direction-map: (
-        'top':    'bottom',
-        'right':  'left',
-        'bottom': 'top',
-        'left':   'right',
-        'center': 'center',
-        'ltr':    'rtl',
-        'rtl':    'ltr'
+        "top": "bottom",
+        "right": "left",
+        "bottom": "top",
+        "left": "right",
+        "center": "center",
+        "ltr": "rtl",
+        "rtl": "ltr",
     );
 
     @each $direction in $directions {
         $direction: to-lower-case($direction);
 
         @if map-has-key($direction-map, $direction) {
-            $opposite-directions: append($opposite-directions, unquote(map-get($direction-map, $direction)));
+            $opposite-directions: append(
+                $opposite-directions,
+                unquote(map-get($direction-map, $direction))
+            );
         } @else {
             @warn 'No opposite direction can be found for `#{$direction}`. Direction omitted.';
         }
diff --git a/hypha/static_src/src/sass/public/abstracts/_mixins.scss b/hypha/static_src/src/sass/public/abstracts/_mixins.scss
index 51e804cebcee9cc8fc4a45419f84ba55e3120601..e53122dc4377e734fc7d6aa9b4b31f4937389e2f 100644
--- a/hypha/static_src/src/sass/public/abstracts/_mixins.scss
+++ b/hypha/static_src/src/sass/public/abstracts/_mixins.scss
@@ -1,12 +1,12 @@
 // stylelint-disable
 
-@use 'sass:math';
+@use "sass:math";
 
 // Media queries
 @mixin media-query($queries...) {
     @each $query in $queries {
         @each $breakpoint in $breakpoints {
-            $name:        nth($breakpoint, 1);
+            $name: nth($breakpoint, 1);
             $declaration: nth($breakpoint, 2);
 
             @if $query == $name and $declaration {
@@ -20,11 +20,21 @@
 
 //   Placeholder text
 @mixin placeholder-text {
-    &.placeholder { @content; }
-    &:-moz-placeholder { @content; }
-    &::-moz-placeholder { @content; }
-    &:-ms-input-placeholder { @content; }
-    &::-webkit-input-placeholder { @content; }
+    &.placeholder {
+        @content;
+    }
+    &:-moz-placeholder {
+        @content;
+    }
+    &::-moz-placeholder {
+        @content;
+    }
+    &:-ms-input-placeholder {
+        @content;
+    }
+    &::-webkit-input-placeholder {
+        @content;
+    }
 }
 
 // Hide text
@@ -45,14 +55,12 @@
 
 // Output a rem value for the given property
 @mixin rem($property, $values) {
-
     $rem: ();
 
     @each $value in $values {
         @if $value == 0 or $value == auto or $value == inherit {
             $rem: append($rem, $value);
-        }
-        @else {
+        } @else {
             $rem: append($rem, rem(strip-unit($value)));
         }
     }
@@ -70,15 +78,14 @@
 
     @if $size == null {
         @warn 'Font size ‘#{$keyword}’ does not exist';
-    }
-    @else {
+    } @else {
         @include rem-font-size($size);
     }
 }
 
 // Button mixin
 @mixin button($bg, $hover-bg) {
-    padding: .5em 60px;
+    padding: 0.5em 60px;
     font-weight: $weight--bold;
     color: $color--white;
     text-align: center;
@@ -106,18 +113,20 @@
 // Wide button mixin
 @mixin button--wide {
     @include media-query(tablet-landscape) {
-        padding: .5em 80px;
+        padding: 0.5em 80px;
     }
 }
 
 // Viewport sized typography mixin that takes a min and max pixel-based value
 @mixin responsive-font-sizes($min, $max) {
-
-    $vw-context: (1260 * .1) * 1px;
+    $vw-context: (1260 * 0.1) * 1px;
     $responsive: math.div($max, $vw-context) * 10vw;
 
-    $responsive-unitless: math.div($responsive, ($responsive - $responsive + 1));
-    $dimension: if(unit($responsive) == 'vh', 'height', 'width');
+    $responsive-unitless: math.div(
+        $responsive,
+        ($responsive - $responsive + 1)
+    );
+    $dimension: if(unit($responsive) == "vh", "height", "width");
     $min-breakpoint: math.div($min, $responsive-unitless) * 100;
 
     @media (max-#{$dimension}: #{$min-breakpoint}) {
@@ -149,7 +158,7 @@
         width: 100%;
         height: 1px;
         background-color: $color;
-        content: '';
+        content: "";
     }
 
     svg {
@@ -171,17 +180,16 @@
 
     width: 0;
     height: 0;
-    content: '';
+    content: "";
     border-#{opposite-direction($direction)}: ($size * 1.5) solid $color;
 
     $perpendicular-borders: $size solid transparent;
 
     @if $direction == top or $direction == bottom {
-        border-right:  $perpendicular-borders;
-        border-left:   $perpendicular-borders;
-    }
-    @else if $direction == right or $direction == left {
-        border-top:    $perpendicular-borders;
+        border-right: $perpendicular-borders;
+        border-left: $perpendicular-borders;
+    } @else if $direction == right or $direction == left {
+        border-top: $perpendicular-borders;
         border-bottom: $perpendicular-borders;
     }
 }
@@ -223,18 +231,20 @@
 
 @mixin column-scrolling {
     @include media-query(tablet-landscape) {
-        height: calc(100vh - var(--header-admin-height) - #{$listing-header-height});
+        height: calc(
+            100vh - var(--header-admin-height) - #{$listing-header-height}
+        );
         overflow-y: scroll;
     }
 
     @include media-query(laptop-short) {
         // allow for vertical scrolling on laptops
-        height: calc(100vh -  #{$listing-header-height});
+        height: calc(100vh - #{$listing-header-height});
     }
 }
 
 @mixin table-checkbox {
-    input[type='checkbox'] {
+    input[type="checkbox"] {
         margin: 0 auto;
         display: block;
         width: 20px;
@@ -246,7 +256,8 @@
         background-color: $color--white;
 
         &:checked {
-            background: url('./../../images/tick.svg') $color--dark-blue center no-repeat;
+            background: url("./../../images/tick.svg") $color--dark-blue center
+                no-repeat;
             background-size: 12px;
             border: 1px solid $color--dark-blue;
         }
diff --git a/hypha/static_src/src/sass/public/abstracts/_variables.scss b/hypha/static_src/src/sass/public/abstracts/_variables.scss
index 6db475986791a431a1da6ee8024c7eb5e4f7eacd..329513f39ff69d3c0f198e121c0dd77e7c4e56fa 100644
--- a/hypha/static_src/src/sass/public/abstracts/_variables.scss
+++ b/hypha/static_src/src/sass/public/abstracts/_variables.scss
@@ -13,7 +13,7 @@ $color--dark-grey: #404041;
 // Brand
 $color--lightest-blue: #24aae1;
 $color--light-blue: #1d79a8;
-$color--light-blue-90: transparentize($color--light-blue, .9);
+$color--light-blue-90: transparentize($color--light-blue, 0.9);
 $color--lighter-blue: #7ab8d4;
 $color--dark-blue: #0c72a0;
 $color--darkest-blue: #3d6bdb;
@@ -40,17 +40,17 @@ $color--linkedin: #137ab8;
 $color--facebook: #396ab5;
 
 // Transparent
-$color--black-60: rgba(0, 0, 0, .6);
-$color--black-50: rgba(0, 0, 0, .5);
-$color--black-40: rgba(0, 0, 0, .4);
-$color--black-25: rgba(0, 0, 0, .25);
-$color--black-20: rgba(0, 0, 0, .2);
-$color--black-10: rgba(0, 0, 0, .1);
-$color--white-50: rgba(255, 255, 255, .5);
-$color--white-40: rgba(255, 255, 255, .4);
-$color--white-25: rgba(255, 255, 255, .25);
-$color--white-20: rgba(255, 255, 255, .2);
-$color--white-10: rgba(255, 255, 255, .1);
+$color--black-60: rgba(0, 0, 0, 0.6);
+$color--black-50: rgba(0, 0, 0, 0.5);
+$color--black-40: rgba(0, 0, 0, 0.4);
+$color--black-25: rgba(0, 0, 0, 0.25);
+$color--black-20: rgba(0, 0, 0, 0.2);
+$color--black-10: rgba(0, 0, 0, 0.1);
+$color--white-50: rgba(255, 255, 255, 0.5);
+$color--white-40: rgba(255, 255, 255, 0.4);
+$color--white-25: rgba(255, 255, 255, 0.25);
+$color--white-20: rgba(255, 255, 255, 0.2);
+$color--white-10: rgba(255, 255, 255, 0.1);
 
 // Assignment
 $color--default: $color--dark-grey;
@@ -60,8 +60,8 @@ $color--correct: $color--mint;
 $color--button-disabled: $color--lighter-blue;
 
 // Fonts
-$font--primary: 'Source Sans Pro';
-$font--headings: 'Source Sans Pro';
+$font--primary: "Source Sans Pro";
+$font--headings: "Source Sans Pro";
 
 // Font weights
 $weight--black: 800;
@@ -76,13 +76,13 @@ $base-font-size-large: 19px;
 $base-line-height: 24px;
 $base-line-height-large: 29px;
 $font-sizes: (
-    alpha:   72px,
-    beta:    42px,
-    gamma:   36px,
-    delta:   24px,
+    alpha: 72px,
+    beta: 42px,
+    gamma: 36px,
+    delta: 24px,
     epsilon: 17px,
-    zeta:    15px,
-    milli:   13px
+    zeta: 15px,
+    milli: 13px,
 );
 
 // Wrappers
@@ -95,24 +95,24 @@ $max-text-line-length: 50em;
 
 // Breakpoints
 $breakpoints: (
-    'mob-portrait'      '(min-width: 320px)',
-    'mob-landscape'     '(min-width: 480px)',
-    'small-tablet'      '(min-width: 600px)',
-    'tablet-portrait'   '(min-width: 768px)',
-    'tablet-landscape'  '(min-width: 1024px)',
-    'laptop-short'      '(min-width: 1024px) and (max-height: 1280px)',
-    'desktop'           '(min-width: 1320px)',
-    'desktop-medium'    '(min-width: 1920px)',
-    'desktop-wide'      '(min-width: 2556px)'
+    "mob-portrait" "(min-width: 320px)",
+    "mob-landscape" "(min-width: 480px)",
+    "small-tablet" "(min-width: 600px)",
+    "tablet-portrait" "(min-width: 768px)",
+    "tablet-landscape" "(min-width: 1024px)",
+    "laptop-short" "(min-width: 1024px) and (max-height: 1280px)",
+    "desktop" "(min-width: 1320px)",
+    "desktop-medium" "(min-width: 1920px)",
+    "desktop-wide" "(min-width: 2556px)"
 );
 
 // Transition
-$transition: .25s ease-out;
-$quick-transition: .15s ease;
-$medium-transition: .5s ease;
+$transition: 0.25s ease-out;
+$quick-transition: 0.15s ease;
+$medium-transition: 0.5s ease;
 
 // Filters
-$filter-dropdown: '.select2 .select2-selection.select2-selection--single';
+$filter-dropdown: ".select2 .select2-selection.select2-selection--single";
 
 // Delays
 $base-delay: 30ms;
@@ -121,16 +121,16 @@ $base-delay: 30ms;
 $mobile-gutter: 20px;
 
 // Filters
-$filter-dropdown: '.select2 .select2-selection.select2-selection--single';
+$filter-dropdown: ".select2 .select2-selection.select2-selection--single";
 
 // listing header/spacer height
 $listing-header-height: 75px;
 
 // Table breakpoint
-$table-breakpoint: 'tablet-landscape';
+$table-breakpoint: "tablet-landscape";
 
 // Dropdown height
 $dropdown-height: 45px;
 
 // Table breakpoint
-$table-breakpoint: 'tablet-landscape';
+$table-breakpoint: "tablet-landscape";
diff --git a/hypha/static_src/src/sass/public/base/_base.scss b/hypha/static_src/src/sass/public/base/_base.scss
index 7b424ac784c7705690595ce2f1583ac277ccb3c9..c4964fea38f8b2f66dc0f7d9fa8e1f75e67b3146 100644
--- a/hypha/static_src/src/sass/public/base/_base.scss
+++ b/hypha/static_src/src/sass/public/base/_base.scss
@@ -116,10 +116,14 @@ ol {
     left: 0;
     z-index: 5;
     width: 100%;
-    background-image: linear-gradient(-180deg, rgba(0, 0, 0, .72) 0%, rgba(116, 116, 118, 0) 96%); // stylelint-disable-line color-function-notation, max-line-length
-
-    content: '';
-    opacity: .5;
+    background-image: linear-gradient(
+        -180deg,
+        rgba(#000, 0.72) 0%,
+        rgba(#747476, 0) 96%
+    );
+
+    content: "";
+    opacity: 0.5;
 }
 
 .light-grey-bg {
diff --git a/hypha/static_src/src/sass/public/base/_typography.scss b/hypha/static_src/src/sass/public/base/_typography.scss
index 74fee21b5c1e1a090aa256f8651a6a30b0e7f91e..fdad1505eaaf593a09bcabda08066c2c14126a8d 100644
--- a/hypha/static_src/src/sass/public/base/_typography.scss
+++ b/hypha/static_src/src/sass/public/base/_typography.scss
@@ -1,4 +1,4 @@
-@use 'sass:math';
+@use "sass:math";
 
 // $TYPOGRAPHY
 // Base font
@@ -47,28 +47,28 @@ h1,
 .alpha {
     @include responsive-font-sizes(40px, map-get($font-sizes, alpha));
     font-weight: $weight--black;
-    letter-spacing: -.02rem;
+    letter-spacing: -0.02rem;
 }
 
 h2,
 %h2,
 .beta {
     @include responsive-font-sizes(30px, map-get($font-sizes, beta));
-    letter-spacing: -.02rem;
+    letter-spacing: -0.02rem;
 }
 
 h3,
 %h3,
 .gamma {
     @include responsive-font-sizes(20px, map-get($font-sizes, gamma));
-    letter-spacing: -.02rem;
+    letter-spacing: -0.02rem;
 }
 
 h4,
 %h4,
 .delta {
     @include responsive-font-sizes(18px, map-get($font-sizes, delta));
-    letter-spacing: -.02rem;
+    letter-spacing: -0.02rem;
 }
 
 h5,
@@ -90,63 +90,63 @@ small,
 
 // thin
 @font-face {
-    font-family: 'montserrat';
+    font-family: "montserrat";
     font-style: normal;
     font-weight: 200;
-    src: url('../../fonts/montserrat/Montserrat-Light.woff') format('woff');
+    src: url("../../fonts/montserrat/Montserrat-Light.woff") format("woff");
     text-rendering: optimizelegibility;
 }
 
 // regular
 @font-face {
-    font-family: 'montserrat';
+    font-family: "montserrat";
     font-style: normal;
     font-weight: 400;
-    src: url('../../fonts/montserrat/Montserrat-Regular.woff') format('woff');
+    src: url("../../fonts/montserrat/Montserrat-Regular.woff") format("woff");
     text-rendering: optimizelegibility;
 }
 
 // semibold
 @font-face {
-    font-family: 'montserrat';
+    font-family: "montserrat";
     font-style: normal;
     font-weight: 600;
-    src: url('../../fonts/montserrat/Montserrat-SemiBold.woff') format('woff');
+    src: url("../../fonts/montserrat/Montserrat-SemiBold.woff") format("woff");
     text-rendering: optimizelegibility;
 }
 
 // bold
 @font-face {
-    font-family: 'montserrat';
+    font-family: "montserrat";
     font-style: normal;
     font-weight: 700;
-    src: url('../../fonts/montserrat/Montserrat-Bold.woff') format('woff');
+    src: url("../../fonts/montserrat/Montserrat-Bold.woff") format("woff");
     text-rendering: optimizelegibility;
 }
 
 // black
 @font-face {
-    font-family: 'montserrat';
+    font-family: "montserrat";
     font-style: normal;
     font-weight: 800;
-    src: url('../../fonts/montserrat/Montserrat-Black.woff') format('woff');
+    src: url("../../fonts/montserrat/Montserrat-Black.woff") format("woff");
     text-rendering: optimizelegibility;
 }
 
 // regular
 @font-face {
-    font-family: 'noto-sans';
+    font-family: "noto-sans";
     font-style: normal;
     font-weight: 400;
-    src: url('../../fonts/noto-sans/NotoSans.woff') format('woff');
+    src: url("../../fonts/noto-sans/NotoSans.woff") format("woff");
     text-rendering: optimizelegibility;
 }
 
 // bold
 @font-face {
-    font-family: 'noto-sans';
+    font-family: "noto-sans";
     font-style: normal;
     font-weight: 700;
-    src: url('../../fonts/noto-sans/NotoSans-Bold.woff') format('woff');
+    src: url("../../fonts/noto-sans/NotoSans-Bold.woff") format("woff");
     text-rendering: optimizelegibility;
 }
diff --git a/hypha/static_src/src/sass/public/components/_all-investments-table.scss b/hypha/static_src/src/sass/public/components/_all-investments-table.scss
index bdfb25a5325dbfc8cd302da3edd3f1fe89799885..0eaed843366158b7d7e82c6882fd2a185f284039 100644
--- a/hypha/static_src/src/sass/public/components/_all-investments-table.scss
+++ b/hypha/static_src/src/sass/public/components/_all-investments-table.scss
@@ -1,4 +1,4 @@
-// stylelint-disable selector-max-compound-selectors
+// stylelint-disable selector-max-compound-selectors, selector-class-pattern
 
 .all-investments-table {
     @include table-ordering-styles;
@@ -14,7 +14,7 @@
         }
 
         th {
-            &.reviews_stats { // stylelint-disable-line selector-class-pattern
+            &.reviews_stats {
                 color: $color--black-60;
 
                 div {
@@ -142,12 +142,13 @@
                     font-size: 13px;
                     text-align: center;
                     vertical-align: middle;
-                    background: url('./../../images/quote-outline.svg') transparent no-repeat center center;
+                    background: url("./../../images/quote-outline.svg")
+                        transparent no-repeat center center;
                     background-size: 24px;
                 }
             }
 
-            &.reviews_stats { // stylelint-disable-line selector-class-pattern
+            &.reviews_stats {
                 display: none;
 
                 @include media-query($table-breakpoint) {
@@ -168,9 +169,7 @@
 
             &.fund,
             &.round,
-            &.screening_status { // stylelint-disable-line selector-class-pattern
-                -webkit-hyphens: auto; // stylelint-disable-line property-no-vendor-prefix
-                -ms-hyphens: auto; // stylelint-disable-line property-no-vendor-prefix
+            &.screening_status {
                 hyphens: auto;
             }
 
@@ -190,7 +189,8 @@
                 }
             }
 
-            > span.mobile-label { // stylelint-disable-line force-element-nesting
+            // stylelint-disable-next-line force-element-nesting
+            > span.mobile-label {
                 display: inline-block;
                 width: 90px;
 
diff --git a/hypha/static_src/src/sass/public/components/_apply-bar.scss b/hypha/static_src/src/sass/public/components/_apply-bar.scss
index 898a0d97f26618446836daac9205c296573c233f..a89784142e4e622eb702096239d208b1baf1b22e 100644
--- a/hypha/static_src/src/sass/public/components/_apply-bar.scss
+++ b/hypha/static_src/src/sass/public/components/_apply-bar.scss
@@ -31,6 +31,7 @@
 }
 
 // TODO Temp fix. Remove when no longer needed.
-a[href='https://apply.opentech.fund/sua-lab/'] {
+a[href='https://apply.opentech.fund/sua-lab/']
+{
     display: none;
 }
diff --git a/hypha/static_src/src/sass/public/components/_button.scss b/hypha/static_src/src/sass/public/components/_button.scss
index dbefa5b7d905501b64d0af01673c95d2be85e5a7..53b6146c9a3b3e510d5f574169f7885250a8d1a7 100644
--- a/hypha/static_src/src/sass/public/components/_button.scss
+++ b/hypha/static_src/src/sass/public/components/_button.scss
@@ -14,7 +14,7 @@
     &:disabled,
     &.is-disabled {
         pointer-events: none;
-        opacity: .5;
+        opacity: 0.5;
     }
 
     &--primary {
@@ -35,7 +35,8 @@
         padding: 15px 20px;
         font-weight: $weight--normal;
         color: $color--default;
-        background: url('./../../images/filters.svg') $color--white no-repeat 93% center;
+        background: url("./../../images/filters.svg") $color--white no-repeat
+            93% center;
         border: 1px solid $color--light-mid-grey;
         transition: none;
         width: 100%;
@@ -46,11 +47,11 @@
             border: 0;
             justify-content: flex-start;
             width: auto;
-            opacity: .7;
+            opacity: 0.7;
 
             &::before {
-                content: '';
-                background-image: url('./../../images/filters.svg');
+                content: "";
+                background-image: url("./../../images/filters.svg");
                 transform: rotate(90deg);
                 background-color: transparent;
                 background-position: left center;
@@ -69,7 +70,7 @@
 
     &--search {
         position: absolute;
-        top: .65em;
+        top: 0.65em;
         right: 10px;
 
         svg {
@@ -169,7 +170,7 @@
                 span {
                     // color of the arrow is inlined hence !important
                     color: $color--white !important; // stylelint-disable-line declaration-no-important
-                    transition: color  $transition;
+                    transition: color $transition;
 
                     .header--light-bg & {
                         color: $color--black !important; // stylelint-disable-line declaration-no-important
diff --git a/hypha/static_src/src/sass/public/components/_editor.scss b/hypha/static_src/src/sass/public/components/_editor.scss
index eb3aea65b7016c0c41a0b9facc9032f6eb31de73..42ccdd8f4357b6457077c4419568b4c2579e9c31 100644
--- a/hypha/static_src/src/sass/public/components/_editor.scss
+++ b/hypha/static_src/src/sass/public/components/_editor.scss
@@ -37,7 +37,7 @@
 
     & > span {
         display: inline-block;
-        background-image: url('./../../images/editor-buttons.png');
+        background-image: url("./../../images/editor-buttons.png");
         background-repeat: no-repeat;
         background-position: 0 0;
         width: 20px;
@@ -51,6 +51,6 @@
 
 .wmd-prompt-dialog {
     background-color: $color--light-grey;
-    padding: .5em;
+    padding: 0.5em;
     border: 4px solid $color--primary;
 }
diff --git a/hypha/static_src/src/sass/public/components/_filters.scss b/hypha/static_src/src/sass/public/components/_filters.scss
index 089c17d1fc9b5db0bbc3f3f5f6c03407cd4694c0..14b0abc4ea27d3341b4d7bbb40445ace70a6865a 100644
--- a/hypha/static_src/src/sass/public/components/_filters.scss
+++ b/hypha/static_src/src/sass/public/components/_filters.scss
@@ -44,7 +44,7 @@
             display: none;
         }
 
-        > div[class^='js-'] {
+        > div[class^="js-"] {
             color: $color--primary;
 
             &:hover {
diff --git a/hypha/static_src/src/sass/public/components/_form.scss b/hypha/static_src/src/sass/public/components/_form.scss
index 8fc713b35f4dccbd707c6fe79be0ac868f3dd279..a36bf4793eeb2c910d06d975d6dce8b412797ede 100644
--- a/hypha/static_src/src/sass/public/components/_form.scss
+++ b/hypha/static_src/src/sass/public/components/_form.scss
@@ -1,6 +1,6 @@
 // stylelint-disable selector-max-compound-selectors,
 
-@use 'sass:math';
+@use "sass:math";
 
 .form {
     &--header-search-desktop {
@@ -14,7 +14,7 @@
 
             label {
                 display: block;
-                margin-bottom: .5em;
+                margin-bottom: 0.5em;
                 font-weight: $weight--bold;
             }
         }
@@ -73,18 +73,18 @@
                 &__item {
                     display: flex;
                     align-items: center;
-                    gap: .5em;
+                    gap: 0.5em;
                 }
             }
         }
 
-        input[type='date']:last-child {
+        input[type="date"]:last-child {
             max-width: 385px;
         }
     }
 
     .field-group-wrapper {
-        padding: .5rem;
+        padding: 0.5rem;
         margin-bottom: 1rem;
         border: 1px solid $color--mid-grey;
 
@@ -105,7 +105,7 @@
 
     &__question {
         display: block;
-        margin-bottom: .5em;
+        margin-bottom: 0.5em;
         font-weight: $weight--bold;
 
         // stylelint-disable selector-class-pattern
@@ -116,7 +116,8 @@
             @include button($color--light-blue, $color--darkest-blue);
             max-width: 290px;
             text-align: center;
-            background: url('./../../images/upload.svg') $color--light-blue no-repeat 50px center;
+            background: url("./../../images/upload.svg") $color--light-blue
+                no-repeat 50px center;
             border: 0;
 
             .no-js & {
@@ -124,7 +125,8 @@
             }
 
             &:hover {
-                background: url('./../../images/upload.svg') $color--darkest-blue no-repeat 50px center;
+                background: url("./../../images/upload.svg")
+                    $color--darkest-blue no-repeat 50px center;
 
                 .no-js & {
                     background: none;
@@ -142,7 +144,7 @@
 
     &__file-list {
         ul {
-            margin: .5rem 0;
+            margin: 0.5rem 0;
         }
     }
 
@@ -163,7 +165,7 @@
 
             &.is-active {
                 font-weight: $weight--normal;
-                background-color: transparentize($color--primary, .9);
+                background-color: transparentize($color--primary, 0.9);
                 border-color: $color--mid-grey;
             }
 
@@ -240,7 +242,7 @@
                     @supports (display: grid) {
                         display: grid;
                         grid-template-columns: 1fr 1fr;
-                        grid-gap: 5px;
+                        gap: 5px;
                     }
                 }
 
@@ -257,7 +259,8 @@
                 }
 
                 input {
-                    &:first-of-type { // stylelint-disable-line max-nesting-depth
+                    // stylelint-disable-next-line max-nesting-depth
+                    &:first-of-type {
                         @supports (display: grid) {
                             grid-column: 1;
                         }
@@ -303,7 +306,8 @@
 
     &__select {
         max-width: 385px;
-        background: url('./../../images/dropdown.svg') $color--white no-repeat 95% center;
+        background: url("./../../images/dropdown.svg") $color--white no-repeat
+            95% center;
         background-size: 8px;
 
         .form--scoreable & {
@@ -320,7 +324,7 @@
             }
         }
 
-        select[multiple='multiple'] {
+        select[multiple="multiple"] {
             display: block;
         }
 
@@ -328,8 +332,6 @@
             background: transparent;
             border-radius: 0;
             appearance: none;
-            -webkit-appearance: none; // stylelint-disable-line property-no-vendor-prefix
-            -moz-appearance: none; // stylelint-disable-line property-no-vendor-prefix
 
             option {
                 background-color: $color--white;
@@ -350,17 +352,17 @@
     }
 
     select,
-    input[type='url'],
-    input[type='text']:not(.input--secondary),
-    input[type='date'],
-    input[type='time'],
-    input[type='email']:not(.input--secondary),
-    input[type='number'],
-    input[type='password'],
-    input[type='datetime-local'] {
+    input[type="url"],
+    input[type="text"]:not(.input--secondary),
+    input[type="date"],
+    input[type="time"],
+    input[type="email"]:not(.input--secondary),
+    input[type="number"],
+    input[type="password"],
+    input[type="datetime-local"] {
         width: 100%;
         max-width: 385px;
-        padding: .4em;
+        padding: 0.4em;
         border: 1px solid $color--mid-grey;
 
         &:disabled {
@@ -377,14 +379,14 @@
     &__error {
         select,
         textarea,
-        input[type='url'],
-        input[type='text'],
-        input[type='date'],
-        input[type='time'],
-        input[type='email'],
-        input[type='number'],
-        input[type='password'],
-        input[type='datetime-local'] {
+        input[type="url"],
+        input[type="text"],
+        input[type="date"],
+        input[type="time"],
+        input[type="email"],
+        input[type="number"],
+        input[type="password"],
+        input[type="datetime-local"] {
             border: 2px solid $color--error;
         }
     }
@@ -411,21 +413,21 @@
                 border-color: transparent $color--error transparent transparent;
                 border-style: solid;
                 border-width: 5px 10px 5px 0;
-                content: '';
+                content: "";
             }
         }
     }
 
     // make date & time input siblings inline
-    input[type='date'] {
+    input[type="date"] {
         max-width: calc(385px - 100px);
     }
 
-    input[type='date'] + input[type='time'] {
+    input[type="date"] + input[type="time"] {
         width: 100px;
     }
 
-    input[type='file'] {
+    input[type="file"] {
         @extend %off-screen;
 
         .no-js & {
@@ -435,22 +437,22 @@
 
     textarea {
         width: 100%;
-        padding: .4em;
+        padding: 0.4em;
         border: 1px solid $color--mid-grey;
         line-height: math.div($base-line-height, $base-font-size);
     }
 
     // Radio + Checkbox
-    [type='radio'],
-    [type='checkbox'] {
+    [type="radio"],
+    [type="checkbox"] {
         appearance: none;
         accent-color: $color--dark-blue;
-        height: .7em;
-        width: .7em;
+        height: 0.7em;
+        width: 0.7em;
         outline: 2px solid $color--dark-blue;
 
         & + label {
-            padding-inline-start: .5em;
+            padding-inline-start: 0.5em;
 
             &:hover {
                 font-weight: bold;
@@ -463,33 +465,33 @@
     }
 
     // Radio specific
-    [type='radio'] {
+    [type="radio"] {
         border-radius: 50%;
         outline-offset: 2px;
     }
 
     // Checkbox specific
-    input[type='checkbox'] {
+    input[type="checkbox"] {
         height: 1em;
         width: 1em;
         background-position: center;
         background-repeat: no-repeat;
-        background-size: .8em;
+        background-size: 0.8em;
 
         &:checked {
-            background-image: url('./../../images/tick.svg');
+            background-image: url("./../../images/tick.svg");
         }
     }
 
     .errorlist {
         padding: 5px;
-        margin-bottom: .2em;
+        margin-bottom: 0.2em;
         background: $color--light-pink;
         border: 1px solid $color--tomato;
     }
 
     .address {
-        padding: .4em;
+        padding: 0.4em;
         border: 1px solid $color--mid-grey;
         max-width: 410px;
     }
@@ -508,5 +510,7 @@
 }
 
 @keyframes flash {
-    50% { background-color: $color--mustard; }
+    50% {
+        background-color: $color--mustard;
+    }
 }
diff --git a/hypha/static_src/src/sass/public/components/_grid.scss b/hypha/static_src/src/sass/public/components/_grid.scss
index 8cd72df371f1d75705f48a644e073558d528b1b4..7363ff6a2ca0a92f775da17a5a405dfbea9c36e5 100644
--- a/hypha/static_src/src/sass/public/components/_grid.scss
+++ b/hypha/static_src/src/sass/public/components/_grid.scss
@@ -60,7 +60,7 @@
     .grid {
         display: grid;
         margin: 30px 0;
-        grid-gap: 10px;
+        gap: 10px;
         grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
 
         > * {
@@ -82,12 +82,12 @@
 
         &--one {
             grid-template-columns: 1fr;
-            grid-gap: 30px;
+            gap: 30px;
         }
 
         &--two {
             grid-template-columns: 100%;
-            grid-gap: 0;
+            gap: 0;
 
             @include media-query(tablet-portrait) {
                 grid-template-columns: 1fr 1fr;
@@ -96,7 +96,7 @@
 
         &--max-three {
             grid-template-columns: 1fr;
-            grid-gap: 30px;
+            gap: 30px;
 
             @include media-query(small-tablet) {
                 grid-template-columns: repeat(2, 1fr);
@@ -108,11 +108,11 @@
         }
 
         &--medium-gap {
-            grid-gap: 35px;
+            gap: 35px;
         }
 
         &--small-gap {
-            grid-gap: 20px;
+            gap: 20px;
         }
 
         &--no-margin {
@@ -124,7 +124,7 @@
             margin: 0 0 30px;
             border-bottom: 1px solid $color--mid-grey;
             grid-template-columns: 100%;
-            grid-gap: 10px;
+            gap: 10px;
 
             @include media-query(mob-landscape) {
                 margin: 0 0 30px;
@@ -138,7 +138,7 @@
 
         &--focus-areas {
             margin: 20px 0;
-            grid-gap: 20px;
+            gap: 20px;
             grid-template-columns: 1fr;
 
             @include media-query(small-tablet) {
@@ -150,7 +150,7 @@
                 margin: 3rem 0;
                 text-align: center;
                 grid-template-columns: repeat(4, 1fr);
-                grid-gap: 35px;
+                gap: 35px;
             }
         }
     }
diff --git a/hypha/static_src/src/sass/public/components/_icon.scss b/hypha/static_src/src/sass/public/components/_icon.scss
index 41993b344e52a5ec53b1129c3a0982b4d4d9f8cb..14a561720997471591651abd1f03e86fc1ac466c 100644
--- a/hypha/static_src/src/sass/public/components/_icon.scss
+++ b/hypha/static_src/src/sass/public/components/_icon.scss
@@ -8,7 +8,8 @@
         fill: $color--dark-grey;
     }
 
-    .header__menus--mobile.is-visible & { // stylelint-disable-line selector-class-pattern
+    // stylelint-disable-next-line selector-class-pattern
+    .header__menus--mobile.is-visible & {
         fill: $color--white;
     }
 
@@ -53,7 +54,8 @@
             fill: $color--white;
         }
 
-        .header--light-bg.search-open & { // stylelint-disable-line force-element-nesting
+        .header--light-bg.search-open & {
+            // stylelint-disable-line force-element-nesting
             fill: $color--dark-grey;
         }
     }
@@ -111,7 +113,8 @@
     }
 
     &--search {
-        .header--light-bg.search-open & { // stylelint-disable-line force-element-nesting
+        .header--light-bg.search-open & {
+            // stylelint-disable-line force-element-nesting
             fill: $color--white;
         }
     }
diff --git a/hypha/static_src/src/sass/public/components/_investment-meta.scss b/hypha/static_src/src/sass/public/components/_investment-meta.scss
index 22970821a10a6c9c27f3fee24adef4b65f0f4f73..7c5db8a68da318da0ff3550089ed73cc2645e577 100644
--- a/hypha/static_src/src/sass/public/components/_investment-meta.scss
+++ b/hypha/static_src/src/sass/public/components/_investment-meta.scss
@@ -4,7 +4,8 @@
     tbody {
         td {
             &.phase {
-                span { // stylelint-disable-line selector-max-compound-selectors
+                // stylelint-disable-next-line selector-max-compound-selectors
+                span {
                     display: inline-block;
                     padding: 10px;
                     font-size: 13px;
diff --git a/hypha/static_src/src/sass/public/components/_link.scss b/hypha/static_src/src/sass/public/components/_link.scss
index e545e5a7123d26ca475f721ec6ae6cfc7e0b6b59..2e2d0b8121aea5137fde85b39c395be0af64b102 100644
--- a/hypha/static_src/src/sass/public/components/_link.scss
+++ b/hypha/static_src/src/sass/public/components/_link.scss
@@ -2,7 +2,7 @@
     &:disabled,
     &.is-disabled {
         pointer-events: none;
-        opacity: .5;
+        opacity: 0.5;
     }
 
     &--button {
diff --git a/hypha/static_src/src/sass/public/components/_list_straight_left.scss b/hypha/static_src/src/sass/public/components/_list_straight_left.scss
index 474ec4d90a724ecdfa78eb7941ce1a9a86825ae0..09528c21338959ec7e18431c4b2a917458d755c5 100644
--- a/hypha/static_src/src/sass/public/components/_list_straight_left.scss
+++ b/hypha/static_src/src/sass/public/components/_list_straight_left.scss
@@ -12,7 +12,7 @@
 
         &::before {
             display: table-cell;
-            content: '\2022';
+            content: "\2022";
             padding-right: 1rem;
         }
     }
@@ -29,7 +29,7 @@
 
         &::before {
             display: table-cell;
-            content: counter(table-ol) '.';
+            content: counter(table-ol) ".";
             padding-right: 1rem;
             text-align: right;
         }
@@ -44,7 +44,7 @@
         display: list-item;
 
         &::before {
-            content: '';
+            content: "";
             display: inline;
             padding: inherit;
         }
diff --git a/hypha/static_src/src/sass/public/components/_media-box.scss b/hypha/static_src/src/sass/public/components/_media-box.scss
index 1502b5f099f6144f51abb33e2954815889edbe63..7bcb6722d93fffb69e46c2d6e3ae4b2451444777 100644
--- a/hypha/static_src/src/sass/public/components/_media-box.scss
+++ b/hypha/static_src/src/sass/public/components/_media-box.scss
@@ -116,7 +116,10 @@
             display: block;
 
             &--projectpage-introduction {
-                @include responsive-font-sizes(18px, map-get($font-sizes, delta));
+                @include responsive-font-sizes(
+                    18px,
+                    map-get($font-sizes, delta)
+                );
             }
         }
 
diff --git a/hypha/static_src/src/sass/public/components/_nav.scss b/hypha/static_src/src/sass/public/components/_nav.scss
index 0172c09f07d2723c098de97945ac4feaa6bb510a..07babc112a56a983b58e12d69085e5d6687ec175 100644
--- a/hypha/static_src/src/sass/public/components/_nav.scss
+++ b/hypha/static_src/src/sass/public/components/_nav.scss
@@ -121,7 +121,7 @@
                 border-top: 5px solid transparent;
                 border-bottom: 5px solid transparent;
                 border-left: 5px solid $color--white;
-                content: '';
+                content: "";
 
                 .listing & {
                     margin-left: 0;
@@ -150,13 +150,16 @@
         padding: 20px 10px;
         color: $color--white;
         border-bottom: 1px solid transparent;
-        transition: color, border $transition;
+        transition:
+            color,
+            border $transition;
 
         .header--light-bg & {
             color: $color--default;
         }
 
-        .header__menus--mobile & { // stylelint-disable-line selector-class-pattern
+        // stylelint-disable-next-line selector-class-pattern
+        .header__menus--mobile & {
             color: $color--white;
         }
 
diff --git a/hypha/static_src/src/sass/public/components/_page-box.scss b/hypha/static_src/src/sass/public/components/_page-box.scss
index 0d85ac01c81e7edf4e7ff6bc525c7798ccdd062d..20b1f372a8439669f47db47a827634939140d328 100644
--- a/hypha/static_src/src/sass/public/components/_page-box.scss
+++ b/hypha/static_src/src/sass/public/components/_page-box.scss
@@ -18,7 +18,7 @@
         position: relative;
 
         &::before {
-            content: '';
+            content: "";
             position: absolute;
             top: 0;
             right: 0;
@@ -30,25 +30,25 @@
 
     .otf-icon-red {
         &::before {
-            background-image: url('./../../images/learnings/otf-icon-red.svg');
+            background-image: url("./../../images/learnings/otf-icon-red.svg");
         }
     }
 
     .bullhorn-icon-red {
         &::before {
-            background-image: url('./../../images/learnings/bullhorn-icon-red.svg');
+            background-image: url("./../../images/learnings/bullhorn-icon-red.svg");
         }
     }
 
     .potion-icon-red {
         &::before {
-            background-image: url('./../../images/learnings/potion-icon-red.svg');
+            background-image: url("./../../images/learnings/potion-icon-red.svg");
         }
     }
 
     .user-friends-icon-red {
         &::before {
-            background-image: url('./../../images/learnings/user-friends-icon-red.svg');
+            background-image: url("./../../images/learnings/user-friends-icon-red.svg");
         }
     }
 
diff --git a/hypha/static_src/src/sass/public/components/_rich-text.scss b/hypha/static_src/src/sass/public/components/_rich-text.scss
index 7e258c736f4ec612e704166d7fbc3f400f014745..fc2d317fd4c5d3a4ce11b2bf50c40d968de0bf7d 100644
--- a/hypha/static_src/src/sass/public/components/_rich-text.scss
+++ b/hypha/static_src/src/sass/public/components/_rich-text.scss
@@ -27,7 +27,10 @@
     a {
         font-weight: $weight--bold;
         border-bottom: 1px solid transparent;
-        transition: border, color, .15s ease-in-out;
+        transition:
+            border,
+            color,
+            0.15s ease-in-out;
 
         &:hover {
             border-bottom: 1px solid $color--primary;
diff --git a/hypha/static_src/src/sass/public/components/_select2.scss b/hypha/static_src/src/sass/public/components/_select2.scss
index c4d63956d9ac6a7cb66c68765888f472014cb1bf..cfd43b21798f099b8ee85a5ed3e553af2a95ed81 100644
--- a/hypha/static_src/src/sass/public/components/_select2.scss
+++ b/hypha/static_src/src/sass/public/components/_select2.scss
@@ -33,11 +33,12 @@
                 right: 15px;
                 height: $dropdown-height;
                 pointer-events: none;
-                background: url('./../../images/dropdown.svg') transparent no-repeat 95% center;
+                background: url("./../../images/dropdown.svg") transparent
+                    no-repeat 95% center;
                 background-size: 8px;
                 width: 8px;
 
-                b[role='presentation'] {
+                b[role="presentation"] {
                     display: none;
                 }
             }
@@ -49,11 +50,14 @@
     }
 }
 
-.select2-container { // stylelint-disable-line no-duplicate-selectors
+// stylelint-disable-next-line no-duplicate-selectors
+.select2-container {
     &--default {
         .select2-results__option--highlighted[aria-selected] {
-            color: $color--default !important; // stylelint-disable-line declaration-no-important
-            background-color: transparentize($color--primary, .9) !important; // stylelint-disable-line declaration-no-important, max-line-length
+            // stylelint-disable-next-line declaration-no-important
+            color: $color--default !important;
+            // stylelint-disable-next-line declaration-no-important
+            background-color: transparentize($color--primary, 0.9) !important;
         }
     }
 
@@ -78,15 +82,16 @@
             margin-right: 10px;
             background: $color--white;
             border: 1px solid $color--mid-grey;
-            content: '';
+            content: "";
         }
 
-        &[aria-selected='true'] {
+        &[aria-selected="true"] {
             &::before {
-                background: url('./../../images/tick.svg') $color--dark-blue center no-repeat;
+                background: url("./../../images/tick.svg") $color--dark-blue
+                    center no-repeat;
                 background-size: 12px;
                 border: 1px solid $color--dark-blue;
-                content: '';
+                content: "";
             }
         }
     }
diff --git a/hypha/static_src/src/sass/public/components/_table.scss b/hypha/static_src/src/sass/public/components/_table.scss
index 3759c2fb1b8e5b4337acc00d83c76688d52747a2..e3e0186c8de4d7f7951430bfb4c009d5cedd3c2e 100644
--- a/hypha/static_src/src/sass/public/components/_table.scss
+++ b/hypha/static_src/src/sass/public/components/_table.scss
@@ -16,14 +16,14 @@ table {
 
         a {
             color: $color--black-60;
-            transition: color .25s ease-out;
+            transition: color 0.25s ease-out;
         }
     }
 
     // table rows
     tr {
         border: 1px solid $color--light-mid-grey;
-        transition: box-shadow .15s ease;
+        transition: box-shadow 0.15s ease;
 
         @include media-query($table-breakpoint) {
             border-top: 0;
@@ -45,7 +45,8 @@ table {
                 box-shadow: 0 6px 35px -13px $color--black-50;
             }
 
-            &.reviews-summary__tr { // stylelint-disable-line selector-class-pattern
+            // stylelint-disable-next-line selector-class-pattern
+            &.reviews-summary__tr {
                 box-shadow: none;
             }
         }
diff --git a/hypha/static_src/src/sass/public/layout/_footer.scss b/hypha/static_src/src/sass/public/layout/_footer.scss
index 0a4f08b214b31875ac1f1176cc9da88391381998..9a8cabebe7d76d33765d8d3c2bd3bd8acf606c94 100644
--- a/hypha/static_src/src/sass/public/layout/_footer.scss
+++ b/hypha/static_src/src/sass/public/layout/_footer.scss
@@ -2,7 +2,11 @@
     color: $color--white;
 
     @include media-query(tablet-portrait) {
-        background: linear-gradient(to right, $color--dark-blue 50%, $color--light-blue 50%);
+        background: linear-gradient(
+            to right,
+            $color--dark-blue 50%,
+            $color--light-blue 50%
+        );
     }
 
     a {
@@ -46,8 +50,8 @@
     }
 
     input {
-        &[type='text'],
-        &[type='email'] {
+        &[type="text"],
+        &[type="email"] {
             width: 100%;
             max-width: 390px;
             margin-bottom: 1rem;
diff --git a/hypha/static_src/src/sass/public/layout/_header.scss b/hypha/static_src/src/sass/public/layout/_header.scss
index 5668fb05de6994c4156d667fff7e86d3e3c0c735..c360d3eb9139c4f220f2b98f3d0003cfb2715479 100644
--- a/hypha/static_src/src/sass/public/layout/_header.scss
+++ b/hypha/static_src/src/sass/public/layout/_header.scss
@@ -98,8 +98,11 @@
                 margin-left: 5px;
                 background: $color--primary;
                 border-radius: 50%;
-                content: '';
-                transition: height, width, 10s ease;
+                content: "";
+                transition:
+                    height,
+                    width,
+                    10s ease;
             }
         }
     }
@@ -147,9 +150,9 @@
             background: $color--dark-grey;
             opacity: 0;
             transform: translate3d(0, -100%, 0);
-            transition-duration: .25s;
+            transition-duration: 0.25s;
             transition-property: transform, opacity;
-            transition-timing-function: cubic-bezier(.65, .05, .36, 1);
+            transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);
 
             &.is-visible {
                 opacity: 1;
@@ -181,7 +184,8 @@
                 fill: $color--dark-grey;
             }
 
-            .header__menus--mobile.is-visible & { // stylelint-disable-line selector-class-pattern
+            // stylelint-disable-next-line selector-class-pattern
+            .header__menus--mobile.is-visible & {
                 fill: $color--white;
             }
         }
diff --git a/hypha/static_src/src/sass/public/main.scss b/hypha/static_src/src/sass/public/main.scss
index 1b076da4ae7755b4b4bf609af46a1460eb1f0155..beb04231d5fcacdfb48f9187864c81ec2c9c4190 100644
--- a/hypha/static_src/src/sass/public/main.scss
+++ b/hypha/static_src/src/sass/public/main.scss
@@ -1,58 +1,58 @@
 // Abstracts
-@import 'abstracts/functions';
-@import 'abstracts/mixins';
-@import 'abstracts/variables';
+@import "abstracts/functions";
+@import "abstracts/mixins";
+@import "abstracts/variables";
 
 // Custom overrides
-@import 'custom/extra';
+@import "custom/extra";
 
 // Base
-@import 'base/base';
-@import 'base/typography';
+@import "base/base";
+@import "base/typography";
 
 // Components
-@import 'components/apply-bar';
-@import 'components/all-investments-table';
-@import 'components/button';
-@import 'components/actions-bar';
-@import 'components/blockquote';
-@import 'components/editor';
-@import 'components/card';
-@import 'components/call-to-action';
-@import 'components/cookieconsent';
-@import 'components/form';
-@import 'components/heading';
-@import 'components/focus-area';
-@import 'components/fund-box';
-@import 'components/grid';
-@import 'components/icon';
-@import 'components/image';
-@import 'components/investment-meta';
-@import 'components/input';
-@import 'components/link';
-@import 'components/list';
-@import 'components/list_straight_left';
-@import 'components/listing';
-@import 'components/media-box';
-@import 'components/messages';
-@import 'components/nav';
-@import 'components/page-box';
-@import 'components/pagination';
-@import 'components/responsive-object';
-@import 'components/rich-text';
-@import 'components/section';
-@import 'components/select2';
-@import 'components/show-more';
-@import 'components/table';
-@import 'components/filters';
-@import 'components/wrapper';
+@import "components/apply-bar";
+@import "components/all-investments-table";
+@import "components/button";
+@import "components/actions-bar";
+@import "components/blockquote";
+@import "components/editor";
+@import "components/card";
+@import "components/call-to-action";
+@import "components/cookieconsent";
+@import "components/form";
+@import "components/heading";
+@import "components/focus-area";
+@import "components/fund-box";
+@import "components/grid";
+@import "components/icon";
+@import "components/image";
+@import "components/investment-meta";
+@import "components/input";
+@import "components/link";
+@import "components/list";
+@import "components/list_straight_left";
+@import "components/listing";
+@import "components/media-box";
+@import "components/messages";
+@import "components/nav";
+@import "components/page-box";
+@import "components/pagination";
+@import "components/responsive-object";
+@import "components/rich-text";
+@import "components/section";
+@import "components/select2";
+@import "components/show-more";
+@import "components/table";
+@import "components/filters";
+@import "components/wrapper";
 
 // Layout
-@import 'layout/footer';
-@import 'layout/header';
-@import 'layout/sidebar';
+@import "layout/footer";
+@import "layout/header";
+@import "layout/sidebar";
 
 // Pages
 
 // Custom overrides
-@import 'custom/custom';
+@import "custom/custom";
diff --git a/hypha/static_src/src/tailwind/base/core.css b/hypha/static_src/src/tailwind/base/core.css
new file mode 100644
index 0000000000000000000000000000000000000000..3706ec8894e483ec5094376284f4484e0eb01ceb
--- /dev/null
+++ b/hypha/static_src/src/tailwind/base/core.css
@@ -0,0 +1,4 @@
+body {
+    color: var(--color-fg-default);
+    background-color: var(--color-bg-default);
+}
diff --git a/hypha/static_src/src/tailwind/base/forms.css b/hypha/static_src/src/tailwind/base/forms.css
new file mode 100644
index 0000000000000000000000000000000000000000..af550b303fb6de2cb856e39db64131386c5025cb
--- /dev/null
+++ b/hypha/static_src/src/tailwind/base/forms.css
@@ -0,0 +1,21 @@
+[type="text"],
+[type="email"],
+[type="url"],
+[type="password"],
+[type="number"],
+[type="date"],
+[type="datetime-local"],
+[type="month"],
+[type="search"],
+[type="tel"],
+[type="time"],
+[type="week"],
+[multiple],
+textarea,
+select {
+    @apply border-gray-300 focus:ring-dark-blue disabled:opacity-75 disabled:cursor-not-allowed;
+}
+[type="checkbox"],
+[type="radio"] {
+    @apply w-5 h-5 border-dark-blue text-dark-blue focus:ring-dark-blue;
+}
diff --git a/hypha/static_src/src/tailwind/base/variables.css b/hypha/static_src/src/tailwind/base/variables.css
new file mode 100644
index 0000000000000000000000000000000000000000..79b54abfa4094bd5e559d26f1d541cec43e06430
--- /dev/null
+++ b/hypha/static_src/src/tailwind/base/variables.css
@@ -0,0 +1,6 @@
+:root {
+    --color-fg-muted: #656d76;
+    --color-fg-default: #1f2328;
+    --color-bg-default: #fff;
+    --color-header-bg: #fff;
+}
diff --git a/hypha/static_src/src/tailwind/components/choices.css b/hypha/static_src/src/tailwind/components/choices.css
index 39da32782d3b118203585275fa05e2c8fca0b1a2..bdb572c81346b4bdbe1a5d8c31f53b4aa9f4464e 100644
--- a/hypha/static_src/src/tailwind/components/choices.css
+++ b/hypha/static_src/src/tailwind/components/choices.css
@@ -42,7 +42,7 @@
 
 .choices[data-type*="select-one"] .choices__button {
     background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg==");
-    background-size: .6em;
+    background-size: 0.6em;
 
     @apply w-5 h-5 absolute p-0 right-0 top-1/2 -mt-2 mr-6 opacity-25 focus:opacity-100 hover:opacity-100;
 }
@@ -259,7 +259,7 @@
 }
 
 .choices__heading {
-  @apply font-semibold text-sm py-2 border-b border-gray-300 text-gray-600;
+    @apply font-semibold text-sm py-2 border-b border-gray-300 text-gray-600;
 }
 
 .choices__button {
diff --git a/hypha/static_src/src/tailwind/components/daterangepicker.css b/hypha/static_src/src/tailwind/components/daterangepicker.css
index 24cdd8222d6b1c7266a84c92eb085d6ba9bbc6f4..e8728dd4f169e44f0bf26c731bd6e42b6cc6bbec 100644
--- a/hypha/static_src/src/tailwind/components/daterangepicker.css
+++ b/hypha/static_src/src/tailwind/components/daterangepicker.css
@@ -1,18 +1,18 @@
 .daterangepicker {
-  position: absolute;
-  color: inherit;
-  background-color: #fff;
-  width: 278px;
-  max-width: none;
-  padding: 0;
-  margin-top: 7px;
-  top: 100px;
-  left: 20px;
-  z-index: 3001;
-  display: none;
-  font-size: 15px;
-  line-height: 1em;
-  @apply rounded-lg shadow-lg border;
+    position: absolute;
+    color: inherit;
+    background-color: #fff;
+    width: 278px;
+    max-width: none;
+    padding: 0;
+    margin-top: 7px;
+    top: 100px;
+    left: 20px;
+    z-index: 3001;
+    display: none;
+    font-size: 15px;
+    line-height: 1em;
+    @apply rounded-lg shadow-lg border;
 }
 
 /* .daterangepicker:before, .daterangepicker:after {
@@ -37,363 +37,379 @@
 } */
 
 .daterangepicker.opensleft:before {
-  right: 9px;
+    right: 9px;
 }
 
 .daterangepicker.opensleft:after {
-  right: 10px;
+    right: 10px;
 }
 
 .daterangepicker.openscenter:before {
-  left: 0;
-  right: 0;
-  width: 0;
-  margin-left: auto;
-  margin-right: auto;
+    left: 0;
+    right: 0;
+    width: 0;
+    margin-left: auto;
+    margin-right: auto;
 }
 
 .daterangepicker.openscenter:after {
-  left: 0;
-  right: 0;
-  width: 0;
-  margin-left: auto;
-  margin-right: auto;
+    left: 0;
+    right: 0;
+    width: 0;
+    margin-left: auto;
+    margin-right: auto;
 }
 
 .daterangepicker.opensright:before {
-  left: 9px;
+    left: 9px;
 }
 
 .daterangepicker.opensright:after {
-  left: 10px;
+    left: 10px;
 }
 
 .daterangepicker.drop-up {
-  margin-top: -7px;
+    margin-top: -7px;
 }
 
 .daterangepicker.drop-up:before {
-  top: initial;
-  bottom: -7px;
-  border-bottom: initial;
-  border-top: 7px solid #ccc;
+    top: initial;
+    bottom: -7px;
+    border-bottom: initial;
+    border-top: 7px solid #ccc;
 }
 
 .daterangepicker.drop-up:after {
-  top: initial;
-  bottom: -6px;
-  border-bottom: initial;
-  border-top: 6px solid #fff;
+    top: initial;
+    bottom: -6px;
+    border-bottom: initial;
+    border-top: 6px solid #fff;
 }
 
-.daterangepicker.single .daterangepicker .ranges, .daterangepicker.single .drp-calendar {
-  float: none;
+.daterangepicker.single .daterangepicker .ranges,
+.daterangepicker.single .drp-calendar {
+    float: none;
 }
 
 .daterangepicker.single .drp-selected {
-  display: none;
+    display: none;
 }
 
 .daterangepicker.show-calendar .drp-calendar {
-  display: block;
+    display: block;
 }
 
 .daterangepicker.show-calendar .drp-buttons {
-  display: block;
+    display: block;
 }
 
 .daterangepicker.auto-apply .drp-buttons {
-  display: none;
+    display: none;
 }
 
 .daterangepicker .drp-calendar {
-  display: none;
-  max-width: 270px;
+    display: none;
+    max-width: 270px;
 }
 
 .daterangepicker .drp-calendar.left {
-  padding: 8px 0 8px 8px;
+    padding: 8px 0 8px 8px;
 }
 
 .daterangepicker .drp-calendar.right {
-  padding: 8px;
+    padding: 8px;
 }
 
 .daterangepicker .drp-calendar.single .calendar-table {
-  border: none;
+    border: none;
 }
 
-.daterangepicker .calendar-table .next span, .daterangepicker .calendar-table .prev span {
-  color: #fff;
-  border: solid black;
-  border-width: 0 2px 2px 0;
-  border-radius: 0;
-  display: inline-block;
-  padding: 3px;
+.daterangepicker .calendar-table .next span,
+.daterangepicker .calendar-table .prev span {
+    color: #fff;
+    border: solid black;
+    border-width: 0 2px 2px 0;
+    border-radius: 0;
+    display: inline-block;
+    padding: 3px;
 }
 
 .daterangepicker .calendar-table .next span {
-  transform: rotate(-45deg);
-  -webkit-transform: rotate(-45deg);
+    transform: rotate(-45deg);
+    -webkit-transform: rotate(-45deg);
 }
 
 .daterangepicker .calendar-table .prev span {
-  transform: rotate(135deg);
-  -webkit-transform: rotate(135deg);
+    transform: rotate(135deg);
+    -webkit-transform: rotate(135deg);
 }
 
-.daterangepicker .calendar-table th, .daterangepicker .calendar-table td {
-  white-space: nowrap;
-  text-align: center;
-  vertical-align: middle;
-  min-width: 32px;
-  width: 36px;
-  height: 32px;
-  border-radius: 4px;
-  border: 1px solid transparent;
-  white-space: nowrap;
-  @apply text-sm cursor-pointer;
+.daterangepicker .calendar-table th,
+.daterangepicker .calendar-table td {
+    white-space: nowrap;
+    text-align: center;
+    vertical-align: middle;
+    min-width: 32px;
+    width: 36px;
+    height: 32px;
+    border-radius: 4px;
+    border: 1px solid transparent;
+    white-space: nowrap;
+    @apply text-sm cursor-pointer;
 }
 
 .daterangepicker .calendar-table {
-  border: 1px solid #fff;
-  border-radius: 4px;
-  background-color: #fff;
+    border: 1px solid #fff;
+    border-radius: 4px;
+    background-color: #fff;
 }
 
 .daterangepicker .calendar-table table {
-  width: 100%;
-  margin: 0;
-  border-spacing: 0;
-  border-collapse: collapse;
+    width: 100%;
+    margin: 0;
+    border-spacing: 0;
+    border-collapse: collapse;
 }
 
-.daterangepicker td.available:hover, .daterangepicker th.available:hover {
-  background-color: #eee;
-  border-color: transparent;
-  color: inherit;
+.daterangepicker td.available:hover,
+.daterangepicker th.available:hover {
+    background-color: #eee;
+    border-color: transparent;
+    color: inherit;
 }
 
-.daterangepicker td.week, .daterangepicker th.week {
-  font-size: 80%;
-  color: #ccc;
+.daterangepicker td.week,
+.daterangepicker th.week {
+    font-size: 80%;
+    color: #ccc;
 }
 
-.daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
-  background-color: #fff;
-  border-color: transparent;
-  color: #999;
+.daterangepicker td.off,
+.daterangepicker td.off.in-range,
+.daterangepicker td.off.start-date,
+.daterangepicker td.off.end-date {
+    background-color: #fff;
+    border-color: transparent;
+    color: #999;
 }
 
 .daterangepicker td.in-range {
-  background-color: #ebf4f8;
-  border-color: transparent;
-  color: #000;
-  border-radius: 0;
+    background-color: #ebf4f8;
+    border-color: transparent;
+    color: #000;
+    border-radius: 0;
 }
 
 .daterangepicker td.start-date {
-  border-radius: 4px 0 0 4px;
+    border-radius: 4px 0 0 4px;
 }
 
 .daterangepicker td.end-date {
-  border-radius: 0 4px 4px 0;
+    border-radius: 0 4px 4px 0;
 }
 
 .daterangepicker td.start-date.end-date {
-  border-radius: 4px;
+    border-radius: 4px;
 }
 
-.daterangepicker td.active, .daterangepicker td.active:hover {
-  background-color: #357ebd;
-  border-color: transparent;
-  color: #fff;
+.daterangepicker td.active,
+.daterangepicker td.active:hover {
+    background-color: #357ebd;
+    border-color: transparent;
+    color: #fff;
 }
 
 .daterangepicker th.month {
-  width: auto;
+    width: auto;
 }
 
-.daterangepicker td.disabled, .daterangepicker option.disabled {
-  color: #999;
-  cursor: not-allowed;
-  text-decoration: line-through;
+.daterangepicker td.disabled,
+.daterangepicker option.disabled {
+    color: #999;
+    cursor: not-allowed;
+    text-decoration: line-through;
 }
 
-.daterangepicker select.monthselect, .daterangepicker select.yearselect {
-  font-size: 12px;
-  padding: 1px;
-  height: auto;
-  margin: 0;
-  cursor: default;
+.daterangepicker select.monthselect,
+.daterangepicker select.yearselect {
+    font-size: 12px;
+    padding: 1px;
+    height: auto;
+    margin: 0;
+    cursor: default;
 }
 
 .daterangepicker select.monthselect {
-  margin-right: 2%;
-  width: 56%;
+    margin-right: 2%;
+    width: 56%;
 }
 
 .daterangepicker select.yearselect {
-  width: 40%;
+    width: 40%;
 }
 
-.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
-  width: 50px;
-  margin: 0 auto;
-  background: #eee;
-  border: 1px solid #eee;
-  padding: 2px;
-  outline: 0;
-  font-size: 12px;
+.daterangepicker select.hourselect,
+.daterangepicker select.minuteselect,
+.daterangepicker select.secondselect,
+.daterangepicker select.ampmselect {
+    width: 50px;
+    margin: 0 auto;
+    background: #eee;
+    border: 1px solid #eee;
+    padding: 2px;
+    outline: 0;
+    font-size: 12px;
 }
 
 .daterangepicker .calendar-time {
-  text-align: center;
-  margin: 4px auto 0 auto;
-  line-height: 30px;
-  position: relative;
+    text-align: center;
+    margin: 4px auto 0 auto;
+    line-height: 30px;
+    position: relative;
 }
 
 .daterangepicker .calendar-time select.disabled {
-  color: #ccc;
-  cursor: not-allowed;
+    color: #ccc;
+    cursor: not-allowed;
 }
 
 .daterangepicker .drp-buttons {
-  clear: both;
-  text-align: right;
-  display: none;
-  line-height: 12px;
-  vertical-align: middle;
-  @apply border-t p-2;
+    clear: both;
+    text-align: right;
+    display: none;
+    line-height: 12px;
+    vertical-align: middle;
+    @apply border-t p-2;
 }
 
 .daterangepicker .drp-selected {
-  display: inline-block;
-  padding-right: 8px;
-  @apply text-sm;
+    display: inline-block;
+    padding-right: 8px;
+    @apply text-sm;
 }
 
 .daterangepicker .drp-buttons .btn {
-  margin-left: 8px;
-  padding: 4px 8px;
-  @apply font-medium text-sm
+    margin-left: 8px;
+    padding: 4px 8px;
+    @apply font-medium text-sm;
 }
 
 .daterangepicker.show-ranges.single.rtl .drp-calendar.left {
-  border-right: 1px solid #ddd;
+    border-right: 1px solid #ddd;
 }
 
 .daterangepicker.show-ranges.single.ltr .drp-calendar.left {
-  border-left: 1px solid #ddd;
+    border-left: 1px solid #ddd;
 }
 
 .daterangepicker.show-ranges.rtl .drp-calendar.right {
-  @apply border-r border-gray-200;
+    @apply border-r border-gray-200;
 }
 
 .daterangepicker.show-ranges.ltr .drp-calendar.left {
-  @apply border-l border-gray-200;
+    @apply border-l border-gray-200;
 }
 
 .daterangepicker .ranges {
-  float: none;
-  text-align: left;
-  margin: 0;
+    float: none;
+    text-align: left;
+    margin: 0;
 }
 
 .daterangepicker.show-calendar .ranges {
-  margin-top: 8px;
+    margin-top: 8px;
 }
 
 .daterangepicker .ranges ul {
-  list-style: none;
-  margin: 0 auto;
-  padding: 0;
-  width: 100%;
-  @apply divide-y divide-gray-100;
+    list-style: none;
+    margin: 0 auto;
+    padding: 0;
+    width: 100%;
+    @apply divide-y divide-gray-100;
 }
 
 .daterangepicker .ranges li {
-  @apply text-gray-700 md:text-sm font-medium px-3 py-2 cursor-pointer hover:bg-gray-100 focus:bg-gray-100;
+    @apply text-gray-700 md:text-sm font-medium px-3 py-2 cursor-pointer hover:bg-gray-100 focus:bg-gray-100;
 }
 
 .daterangepicker .ranges li.active {
-  background-color: #08c;
-  color: #fff;
+    background-color: #08c;
+    color: #fff;
 }
 
 /*  Larger Screen Styling */
 @media (min-width: 564px) {
-  .daterangepicker {
-    width: auto;
-  }
-
-  .daterangepicker .ranges ul {
-    width: 140px;
-  }
-
-  .daterangepicker.single .ranges ul {
-    width: 100%;
-  }
-
-  .daterangepicker.single .drp-calendar.left {
-    clear: none;
-  }
-
-  .daterangepicker.single .ranges, .daterangepicker.single .drp-calendar {
-    float: left;
-  }
-
-  .daterangepicker {
-    direction: ltr;
-    text-align: left;
-  }
-
-  .daterangepicker .drp-calendar.left {
-    clear: left;
-    margin-right: 0;
-  }
-
-  .daterangepicker .drp-calendar.left .calendar-table {
-    border-right: none;
-    border-top-right-radius: 0;
-    border-bottom-right-radius: 0;
-  }
-
-  .daterangepicker .drp-calendar.right {
-    margin-left: 0;
-  }
-
-  .daterangepicker .drp-calendar.right .calendar-table {
-    border-left: none;
-    border-top-left-radius: 0;
-    border-bottom-left-radius: 0;
-  }
-
-  .daterangepicker .drp-calendar.left .calendar-table {
-    padding-right: 8px;
-  }
-
-  .daterangepicker .ranges, .daterangepicker .drp-calendar {
-    float: left;
-  }
+    .daterangepicker {
+        width: auto;
+    }
+
+    .daterangepicker .ranges ul {
+        width: 140px;
+    }
+
+    .daterangepicker.single .ranges ul {
+        width: 100%;
+    }
+
+    .daterangepicker.single .drp-calendar.left {
+        clear: none;
+    }
+
+    .daterangepicker.single .ranges,
+    .daterangepicker.single .drp-calendar {
+        float: left;
+    }
+
+    .daterangepicker {
+        direction: ltr;
+        text-align: left;
+    }
+
+    .daterangepicker .drp-calendar.left {
+        clear: left;
+        margin-right: 0;
+    }
+
+    .daterangepicker .drp-calendar.left .calendar-table {
+        border-right: none;
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+    }
+
+    .daterangepicker .drp-calendar.right {
+        margin-left: 0;
+    }
+
+    .daterangepicker .drp-calendar.right .calendar-table {
+        border-left: none;
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+    }
+
+    .daterangepicker .drp-calendar.left .calendar-table {
+        padding-right: 8px;
+    }
+
+    .daterangepicker .ranges,
+    .daterangepicker .drp-calendar {
+        float: left;
+    }
 }
 
 @media (min-width: 730px) {
-  .daterangepicker .ranges {
-    width: auto;
-  }
+    .daterangepicker .ranges {
+        width: auto;
+    }
 
-  .daterangepicker .ranges {
-    float: left;
-  }
+    .daterangepicker .ranges {
+        float: left;
+    }
 
-  .daterangepicker.rtl .ranges {
-    float: right;
-  }
+    .daterangepicker.rtl .ranges {
+        float: right;
+    }
 
-  .daterangepicker .drp-calendar.left {
-    clear: none !important;
-  }
+    .daterangepicker .drp-calendar.left {
+        clear: none !important;
+    }
 }
diff --git a/hypha/static_src/src/tailwind/components/main.css b/hypha/static_src/src/tailwind/components/main.css
deleted file mode 100644
index 34003c61b3b0a4c01909d6a68012c9dd6a8006c5..0000000000000000000000000000000000000000
--- a/hypha/static_src/src/tailwind/components/main.css
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "./choices.css";
-@import "./daterangepicker.css";
diff --git a/hypha/static_src/src/tailwind/main.css b/hypha/static_src/src/tailwind/main.css
index 9710d4047864ea3d4d3288c6bd59bc4383518b55..ea30c4c211e6005b01d9cc797c6e57ed3bac61ef 100644
--- a/hypha/static_src/src/tailwind/main.css
+++ b/hypha/static_src/src/tailwind/main.css
@@ -1,8 +1,11 @@
 @import "tailwindcss/base";
-/* @import "./custom-base-styles.css"; */
+@import "./base/variables.css";
+@import "./base/core.css";
+@import "./base/forms.css";
 
 @import "tailwindcss/components";
-@import "./components/main.css";
+@import "./components/choices.css";
+@import "./components/daterangepicker.css";
 
 @import "tailwindcss/utilities";
 /* @import "./custom-utilities.css"; */
diff --git a/hypha/storage_backends.py b/hypha/storage_backends.py
index f05e4f12483f6eb3f2952726360f2409d11e054a..50c9f8b16638c1bc8237406339b5e15a84161920 100644
--- a/hypha/storage_backends.py
+++ b/hypha/storage_backends.py
@@ -21,33 +21,33 @@ PRIVATE_FILE_STORAGE
 
 
 class PublicMediaStorage(S3Boto3Storage):
-    if hasattr(settings, 'AWS_PUBLIC_BUCKET_NAME'):
+    if hasattr(settings, "AWS_PUBLIC_BUCKET_NAME"):
         bucket_name = settings.AWS_PUBLIC_BUCKET_NAME
 
-    if hasattr(settings, 'AWS_PUBLIC_CUSTOM_DOMAIN'):
+    if hasattr(settings, "AWS_PUBLIC_CUSTOM_DOMAIN"):
         custom_domain = settings.AWS_PUBLIC_CUSTOM_DOMAIN
 
     file_overwrite = False
     querystring_auth = False
-    url_protocol = 'https:'
+    url_protocol = "https:"
 
 
 class PrivateMediaStorage(S3Boto3Storage):
-    if hasattr(settings, 'AWS_PRIVATE_BUCKET_NAME'):
+    if hasattr(settings, "AWS_PRIVATE_BUCKET_NAME"):
         bucket_name = settings.AWS_PRIVATE_BUCKET_NAME
 
-    bucket_acl = 'private'
+    bucket_acl = "private"
     custom_domain = False
-    default_acl = 'private'
+    default_acl = "private"
     encryption = True
     file_overwrite = False
     querystring_auth = True
-    url_protocol = 'https:'
+    url_protocol = "https:"
 
     def url(self, name, parameters=None, expire=None):
         url = super().url(name, parameters, expire)
 
-        if hasattr(settings, 'AWS_PRIVATE_CUSTOM_DOMAIN'):
+        if hasattr(settings, "AWS_PRIVATE_CUSTOM_DOMAIN"):
             # Django storage doesn't handle custom domains with auth strings
             custom_domain = settings.AWS_PRIVATE_CUSTOM_DOMAIN
             parts = list(parse.urlsplit(url))
diff --git a/hypha/templates/404.html b/hypha/templates/404.html
index 0698fdaa530a3fa3f0ebce1b4aebea0e7de2da52..7807d6b1ecebbb47e3e07c27a896e189a851656b 100644
--- a/hypha/templates/404.html
+++ b/hypha/templates/404.html
@@ -6,8 +6,8 @@
 {% block body_class %}template-404{% endblock %}
 
 {% block content %}
-<div class="wrapper wrapper--small wrapper--inner-space-large">
-    <h1>{{ settings.utils.SystemMessagesSettings.title_404 }}</h1>
-    <div class="rich-text">{{ settings.utils.SystemMessagesSettings.body_404|richtext }}</div>
-</div>
+    <div class="wrapper wrapper--small wrapper--inner-space-large">
+        <h1>{{ settings.utils.SystemMessagesSettings.title_404 }}</h1>
+        <div class="rich-text">{{ settings.utils.SystemMessagesSettings.body_404|richtext }}</div>
+    </div>
 {% endblock %}
diff --git a/hypha/templates/base-apply.html b/hypha/templates/base-apply.html
index 6daa3b75d73868081b62989c403edfd5c49a83ef..4a77b1cb89232cefda582ca6b2c670ff7cdd93d4 100644
--- a/hypha/templates/base-apply.html
+++ b/hypha/templates/base-apply.html
@@ -61,7 +61,7 @@
     <body
         hx-ext="multi-swap"
         hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
-        class="{% block body_class %}light-grey-bg template-{{ page.get_verbose_name|slugify }}{% endblock %}"
+        class="antialiased {% block body_class %}template-{{ page.get_verbose_name|slugify }}{% endblock %}"
     >
 
         {% include "includes/sprites.html" %}
@@ -70,19 +70,28 @@
         <header class="header">
 
             <div class="header__inner wrapper wrapper--large">
-                <a href="{% site_logo_link current_site %}" aria-label="Home link">
+                <a href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" aria-label="Home link">
                     {% if settings.utils.SystemMessagesSettings.site_logo_default %}
                         {% image settings.utils.SystemMessagesSettings.site_logo_default width-215 as logo_default %}
-                        <img class="header__logo header__logo--desktop" src="{{ logo_default.url }}">
+                        <img class="header__logo header__logo--desktop"
+                             src="{{ logo_default.url }}"
+                             alt="{{ settings.utils.SystemMessagesSettings.site_logo_default.alt }}"
+                        >
                         {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
                             {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
-                            <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
+                            <img class="header__logo header__logo--mobile"
+                                 src="{{ logo_mobile.url }}"
+                                 alt="{{ settings.utils.SystemMessagesSettings.site_logo_mobile.alt }}"
+                            >
                         {% else %}
-                            <img class="header__logo header__logo--mobile" src="{{ logo_default.url }}">
+                            <img class="header__logo header__logo--mobile"
+                                 src="{{ logo_default.url }}"
+                                 alt="{{ settings.utils.SystemMessagesSettings.site_logo_default.alt }}"
+                            >
                         {% endif %}
                     {% else %}
-                        <svg class="header__logo header__logo--desktop"><use xlink:href="#logo-desktop--dark"></use></svg>
-                        <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile"></use></svg>
+                        <svg class="header__logo header__logo--desktop" aria-label="Site Logo"><use xlink:href="#logo-desktop--dark"></use></svg>
+                        <svg class="header__logo header__logo--mobile" aria-label="Site Logo"><use xlink:href="#logo-mobile"></use></svg>
                     {% endif %}
                 </a>
 
@@ -98,7 +107,7 @@
 
                 <section class="header__menus header__menus--mobile">
                     <div class="header__inner header__inner--menu-open">
-                        <a href="{% site_logo_link current_site %}" aria-label="Home link">
+                        <a href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" aria-label="Home link">
                             {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
                                 {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
                                 <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
@@ -112,37 +121,48 @@
                             </button>
                         </div>
                     </div>
+
                     {% include "navigation/primarynav-apply.html" %}
-                    <a href="{% url 'users:account' %}" class="link link--button-transparent link--mobile-standout">
-                        <svg class="icon"><use xlink:href="#person-icon"></use></svg>
-                        {{ request.user }}
-                    </a>
-                    <a href="{% url 'users_public:logout' %}" class="link link--button-transparent link--mobile-standout">{% trans "Log out" %}</a>
+
+                    {% if request.user.is_authenticated %}
+                        <a href="{% url 'users:account' %}" class="link link--button-transparent link--mobile-standout">
+                            <svg class="icon"><use xlink:href="#person-icon"></use></svg>
+                            {{ request.user }}
+                        </a>
+                        <a href="{% url 'users_public:logout' %}" class="link link--button-transparent link--mobile-standout">{% trans "Log out" %}</a>
+                    {% endif %}
                 </section>
 
                 <div class="header__button-container">
                     {% if latest_notifications %}
                         <div x-data="{open: false}">
                             <a href="{% url "activity:notifications" %}"
-                                class="button button--contains-icons notifications__bell"
-                                aria-label="{% trans "Notifications" %}"
-                                aria-haspopup="activity"
-                                aria-expanded="false"
-                                role="button"
-                                @click.prevent="open = ! open"
+                               class="button button--contains-icons notifications__bell"
+                               aria-label="{% trans "Notifications" %}"
+                               aria-haspopup="activity"
+                               aria-expanded="false"
+                               role="button"
+                               @click.prevent="open = ! open"
                             >
                                 <svg class="icon"><use xlink:href="#bell-icon"></use></svg>
                             </a>
                             <div x-cloak x-show="open" x-transition @click.outside="open = false">{% include "activity/include/notifications_dropdown.html" %}</div>
                         </div>
                     {% endif %}
-                    <a href="{% url 'users:account' %}" class="button button--transparent button--narrow button--contains-icons" hx-boost="true">
-                        <svg class="icon icon--person"><use xlink:href="#person-icon"></use></svg>
-                        {{ request.user }}
-                    </a>
-                    <a href="{% url 'users_public:logout' %}" class="button button--transparent button--narrow">
-                        {% trans "Log out" %}
-                    </a>
+                    {% if request.user.is_authenticated %}
+                        <a href="{% url 'users:account' %}" class="button button--transparent button--narrow button--contains-icons" hx-boost="true">
+                            <svg class="icon icon--person"><use xlink:href="#person-icon"></use></svg>
+                            {{ request.user }}
+                        </a>
+                        <a href="{% url 'users_public:logout' %}" class="button button--transparent button--narrow">
+                            {% trans "Log out" %}
+                        </a>
+                    {% else %}
+                        {% include "utils/includes/login_button.html" %}
+                        {% if ENABLE_REGISTRATION_WITHOUT_APPLICATION %}
+                            {% include "utils/includes/register_button.html" %}
+                        {% endif %}
+                    {% endif %}
                 </div>
             </div>
         </header>
@@ -176,23 +196,23 @@
         {% block extra_js %}{% endblock %}
 
         {% block sentry_sdk %}
-        {% if SENTRY_PUBLIC_KEY %}
-        <script
-            src="https://js.sentry-cdn.com/{{ SENTRY_PUBLIC_KEY }}.min.js"
-            crossorigin="anonymous"
-        ></script>
-        <script>
-            Sentry.onLoad(function() {
-                Sentry.init({
-                    environment: "{{ SENTRY_ENVIRONMENT }}",
-                    debug: {% if SENTRY_DEBUG %}true{% else %}false{% endif %},
-                    integrations: [new BrowserTracing()],
-                    denyUrls: {{ SENTRY_DENY_URLS|safe }},
-                    tracesSampleRate: {{ SENTRY_TRACES_SAMPLE_RATE }}
-                });
-             });
-        </script>
-        {% endif %}
+            {% if SENTRY_PUBLIC_KEY %}
+                <script
+                    src="https://js.sentry-cdn.com/{{ SENTRY_PUBLIC_KEY }}.min.js"
+                    crossorigin="anonymous"
+                ></script>
+                <script>
+                    Sentry.onLoad(function() {
+                        Sentry.init({
+                            environment: "{{ SENTRY_ENVIRONMENT }}",
+                            debug: {% if SENTRY_DEBUG %}true{% else %}false{% endif %},
+                            integrations: [new BrowserTracing()],
+                            denyUrls: {{ SENTRY_DENY_URLS|safe }},
+                            tracesSampleRate: {{ SENTRY_TRACES_SAMPLE_RATE }}
+                        });
+                    });
+                </script>
+            {% endif %}
         {% endblock sentry_sdk %}
     </body>
 </html>
diff --git a/hypha/templates/base.html b/hypha/templates/base.html
index beed24f8520a3ec513bc1b976943711163a704bb..ecdd09a67d83e47ea1a3cc9e77a154f8c5787957 100644
--- a/hypha/templates/base.html
+++ b/hypha/templates/base.html
@@ -1,4 +1,4 @@
-{% load static cache wagtailuserbar wagtailcore_tags wagtailimages_tags navigation_tags util_tags cookieconsent_tags %}<!doctype html>
+{% load static cache wagtailcore_tags wagtailimages_tags navigation_tags util_tags cookieconsent_tags %}<!doctype html>
 {% wagtail_site as current_site %}
 <html class="no-js" lang="en">
     <head>
@@ -31,10 +31,10 @@
         <meta name="twitter:title" content="{{ page.title }}" />
         <meta name="twitter:description" content="{{ page|social_text:current_site }}">
         {% if page.social_image  %}
-        {% image page.social_image width-320 as social_img %}
-        <meta name="twitter:image" content="{% if page.social_image.is_stored_locally %}{{ current_site.root_url }}{% endif %}{{ social_img.url }}">
+            {% image page.social_image width-320 as social_img %}
+            <meta name="twitter:image" content="{% if page.social_image.is_stored_locally %}{{ current_site.root_url }}{% endif %}{{ social_img.url }}">
         {% else %}
-        <meta name="twitter:image" content="{{ current_site.root_url }}{% static 'images/otf_social.jpg' %}">
+            <meta name="twitter:image" content="{{ current_site.root_url }}{% static 'images/otf_social.jpg' %}">
         {% endif %}
 
         <!--facebook opengraph tags-->
@@ -43,9 +43,9 @@
         <meta property="og:url" content="{{ page.url }}" />
         <meta property="og:title" content="{{ page.title }}" />
         {% if page.social_image %}
-        <meta property="og:image" content="{% if page.social_image.is_stored_locally %}{{ current_site.root_url }}{% endif %}{{ social_img.url }}" />
+            <meta property="og:image" content="{% if page.social_image.is_stored_locally %}{{ current_site.root_url }}{% endif %}{{ social_img.url }}" />
         {% else %}
-        <meta property="og:image" content="{{ current_site.root_url }}{% static 'images/otf_social.jpg' %}" />
+            <meta property="og:image" content="{{ current_site.root_url }}{% static 'images/otf_social.jpg' %}" />
         {% endif %}
         <meta property="og:description" content="{{ page|social_text:current_site }}" />
         <meta property="og:site_name" content="{{ settings.utils.SocialMediaSettings.site_name }}" />
@@ -69,8 +69,6 @@
 
         {% include "includes/sprites.html" %}
 
-        {% wagtailuserbar %}
-
         {% include 'includes/messages.html' %}
 
         {% block header %}
@@ -86,21 +84,21 @@
                 {% endblock %}
 
                 <div class="header__inner wrapper wrapper--large">
-                    <a href="{% site_logo_link current_site %}" aria-label="Home link">
-                    {% if settings.utils.SystemMessagesSettings.site_logo_default %}
-                        {% image settings.utils.SystemMessagesSettings.site_logo_default width-215 as logo_default %}
-                        <img class="header__logo header__logo--desktop" src="{{ logo_default.url }}">
-                        {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
-                            {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
-                            <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
+                    <a href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" aria-label="Home link">
+                        {% if settings.utils.SystemMessagesSettings.site_logo_default %}
+                            {% image settings.utils.SystemMessagesSettings.site_logo_default width-215 as logo_default %}
+                            <img class="header__logo header__logo--desktop" src="{{ logo_default.url }}">
+                            {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
+                                {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
+                                <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
+                            {% else %}
+                                <img class="header__logo header__logo--mobile" src="{{ logo_default.url }}">
+                            {% endif %}
                         {% else %}
-                            <img class="header__logo header__logo--mobile" src="{{ logo_default.url }}">
+                            <svg class="header__logo header__logo--desktop header__logo--desktop-light"><use xlink:href="#logo-desktop"></use></svg>
+                            <svg class="header__logo header__logo--desktop header__logo--desktop-dark"><use xlink:href="#logo-desktop--dark"></use></svg>
+                            <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile"></use></svg>
                         {% endif %}
-                    {% else %}
-                        <svg class="header__logo header__logo--desktop header__logo--desktop-light"><use xlink:href="#logo-desktop"></use></svg>
-                        <svg class="header__logo header__logo--desktop header__logo--desktop-dark"><use xlink:href="#logo-desktop--dark"></use></svg>
-                        <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile"></use></svg>
-                    {% endif %}
                     </a>
 
                     <div class="header__inner header__inner--mobile-buttons">
@@ -126,13 +124,13 @@
 
                     <section class="header__menus header__menus--mobile">
                         <div class="header__inner header__inner--menu-open">
-                            <a href="{% site_logo_link current_site %}" aria-label="Home link">
-                            {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
-                                {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
-                                <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
-                            {% else %}
-                                <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile"></use></svg>
-                            {% endif %}
+                            <a href="{{ settings.utils.SystemMessagesSettings.site_logo_link|default:"/" }}" aria-label="Home link">
+                                {% if settings.utils.SystemMessagesSettings.site_logo_mobile %}
+                                    {% image settings.utils.SystemMessagesSettings.site_logo_mobile width-60 as logo_mobile %}
+                                    <img class="header__logo header__logo--mobile" src="{{ logo_mobile.url }}">
+                                {% else %}
+                                    <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile"></use></svg>
+                                {% endif %}
                             </a>
                             <div class="header__inner header__inner--mobile-buttons">
                                 <button class="button js-mobile-search-toggle" aria-haspopup="true" aria-label="Toggle mobile search">
@@ -153,7 +151,9 @@
                         {% if not request.user.is_authenticated and ENABLE_REGISTRATION_WITHOUT_APPLICATION %}
                             {% include "utils/includes/register_button.html" %}
                         {% endif %}
-                        <div class="button button--google-translate" id="google_translate_element"></div>
+                        {% if ENABLE_GOOGLE_TRANSLATE %}
+                            <div class="button button--google-translate" id="google_translate_element"></div>
+                        {% endif %}
                     </div>
                 </div>
 
@@ -183,9 +183,15 @@
 
         <footer class="footer">
             <div class="grid grid--two wrapper wrapper--large">
-                <div class="footer__inner">
-                    {% include "mailchimp/newsletter_signup.html" %}
-                </div>
+                {% if newsletter_enabled %}
+                    <div class="footer__inner">
+                        {% include "mailchimp/newsletter_signup.html" %}
+                    </div>
+                {% else %}
+                    <div>
+                      <a href="https://www.leverforchange.org/bold-solutions-network/membership/small-grants/">Bold Solutions Network Small Grants & Awards</a>
+                    </div>
+                {% endif %}
 
                 <div class="footer__inner">
                     <div class="footer__social-links">
@@ -204,35 +210,38 @@
 
         {% cookie_banner %}
 
-        <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
-        <script>
-            function googleTranslateElementInit() {
-              new google.translate.TranslateElement({pageLanguage: 'en', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false}, 'google_translate_element');
-            }
-        </script>
+        {% if ENABLE_GOOGLE_TRANSLATE %}
+            <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
+            <script>
+                function googleTranslateElementInit() {
+                    new google.translate.TranslateElement({pageLanguage: 'en', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false}, 'google_translate_element');
+                }
+            </script>
+        {% endif %}
+
         <script src="{% static 'js/js.cookie.min.js' %}"></script>
         <script src="{% static 'js/main.js' %}"></script>
         <script src="{% static 'js/cookieconsent.js' %}"></script>
         {% block extra_js %}{% endblock %}
 
         {% block sentry_sdk %}
-        {% if SENTRY_PUBLIC_KEY %}
-        <script
-            src="https://js.sentry-cdn.com/{{ SENTRY_PUBLIC_KEY }}.min.js"
-            crossorigin="anonymous"
-        ></script>
-        <script>
-            Sentry.onLoad(function() {
-                Sentry.init({
-                    environment: "{{ SENTRY_ENVIRONMENT }}",
-                    debug: {% if SENTRY_DEBUG %}true{% else %}false{% endif %},
-                    integrations: [new BrowserTracing()],
-                    denyUrls: {{ SENTRY_DENY_URLS|safe }},
-                    tracesSampleRate: {{ SENTRY_TRACES_SAMPLE_RATE }}
-                });
-             });
-        </script>
-        {% endif %}
+            {% if SENTRY_PUBLIC_KEY %}
+                <script
+                    src="https://js.sentry-cdn.com/{{ SENTRY_PUBLIC_KEY }}.min.js"
+                    crossorigin="anonymous"
+                ></script>
+                <script>
+                    Sentry.onLoad(function() {
+                        Sentry.init({
+                            environment: "{{ SENTRY_ENVIRONMENT }}",
+                            debug: {% if SENTRY_DEBUG %}true{% else %}false{% endif %},
+                            integrations: [new BrowserTracing()],
+                            denyUrls: {{ SENTRY_DENY_URLS|safe }},
+                            tracesSampleRate: {{ SENTRY_TRACES_SAMPLE_RATE }}
+                        });
+                    });
+                </script>
+            {% endif %}
         {% endblock sentry_sdk %}
     </body>
 </html>
diff --git a/hypha/templates/blocks/apply_link_block.html b/hypha/templates/blocks/apply_link_block.html
index 43286110244efa3b3fc5192aae9cbe6f4dc384e3..158a0014dbcb6cc5e118bc3107fb593b91537ded 100644
--- a/hypha/templates/blocks/apply_link_block.html
+++ b/hypha/templates/blocks/apply_link_block.html
@@ -1,6 +1,6 @@
 {% load i18n %}
 <div class="wrapper wrapper--outer-space-medium">
-<a class="link link--button-secondary" href="{{ value.application.url }}">
-    {% trans "Apply for the" %} {{ value.application.title }}
-</a>
+    <a class="link link--button-secondary" href="{{ value.application.url }}">
+        {% trans "Apply for the" %} {{ value.application.title }}
+    </a>
 </div>
diff --git a/hypha/templates/django/forms/widgets/input_option.html b/hypha/templates/django/forms/widgets/input_option.html
index bc4b421a36710f3368b5ac1fdeb09b7188010c7d..73c64ff464a4b9f3fd73c1e499a8464618d81059 100644
--- a/hypha/templates/django/forms/widgets/input_option.html
+++ b/hypha/templates/django/forms/widgets/input_option.html
@@ -1,4 +1,4 @@
 {% include "django/forms/widgets/input.html" %}
 {% if widget.wrap_label %}
     <label class="form__label" {% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %}>{% endif %}{% if widget.wrap_label %} {{ widget.label }}</label>
-{% endif %}
+    {% endif %}
diff --git a/hypha/templates/django/forms/widgets/multiple_input.html b/hypha/templates/django/forms/widgets/multiple_input.html
index 7917a4ca075aba58e64911ef2bb084f9352c261f..765e63d6d9517834a6672f4d78df7df43e0e0abd 100644
--- a/hypha/templates/django/forms/widgets/multiple_input.html
+++ b/hypha/templates/django/forms/widgets/multiple_input.html
@@ -1,15 +1,18 @@
 {% with id=widget.attrs.id %}
-  <ul{% if id %} id="{{ id }}"{% endif %} class="grid grid--no-margin grid--two{% if widget.attrs.class %} {{ widget.attrs.class }} {% endif %}">
+  <ul
+    class="!mb-0 grid grid--two {% if widget.attrs.class %} {{ widget.attrs.class }} {% endif %}"
+    {% if id %} id="{{ id }}"{% endif %}
+  >
     {% for group, options, index in widget.optgroups %}
       {% if group %}
         <li>{{ group }}<ul{% if id %} id="{{ id }}_{{ index }}"{% endif %}>
       {% endif %}
       {% for option in options %}
-        <li class="form__item">{% include option.template_name with widget=option %}</li>
+        <li>{% include option.template_name with widget=option %}</li>
       {% endfor %}
       {% if group %}
         </ul>
         </li>
       {% endif %}
     {% endfor %}
-</ul>{% endwith %}
+  </ul>{% endwith %}
diff --git a/hypha/templates/django/forms/widgets/number.html b/hypha/templates/django/forms/widgets/number.html
index 921aa643eebc08ee5d66497890bfffa8efbc3167..817cdd7378a547b8492d3715f4a82834ce5ddff8 100644
--- a/hypha/templates/django/forms/widgets/number.html
+++ b/hypha/templates/django/forms/widgets/number.html
@@ -6,18 +6,18 @@ It upgrades default '<input type=number>' that doesn't allow user to enter any v
 With this user can enter any text and get a feedback why it's wrong.
 {% endcomment %}
 <span x-data="{
-    value: '{% if widget.value != None %}{{ widget.value|stringformat:'s' }}{% endif %}',
-    get error() {
-        return this.value !== '' && isNaN(this.value) ? '{% trans "This must be a number" %}': ''
-    }
-}">
+              value: '{% if widget.value != None %}{{ widget.value|stringformat:'s' }}{% endif %}',
+              get error() {
+              return this.value !== '' && isNaN(this.value) ? '{% trans "This must be a number" %}': ''
+              }
+              }">
     <input x-model='value'
-        :class="error ? 'invalid': ''"
-        type="text"
-        inputmode="numeric"
-        pattern="[0-9.]*"  {% comment %} Allow for digit with a decimal{% endcomment %}
-        name="{{ widget.name }}"
-        {% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}
-        {% include "django/forms/widgets/attrs.html" %}>
-        <span x-cloak x-show="error" x-text="error" class="form__error-text"></span>
+           :class="error ? 'invalid': ''"
+           type="text"
+           inputmode="numeric"
+           pattern="[0-9.]*"  {% comment %} Allow for digit with a decimal{% endcomment %}
+           name="{{ widget.name }}"
+           {% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}
+           {% include "django/forms/widgets/attrs.html" %}>
+    <span x-cloak x-show="error" x-text="error" class="form__error-text"></span>
 </span>
diff --git a/hypha/templates/includes/pagination.html b/hypha/templates/includes/pagination.html
index b8481c45dc25468d1353fabc5c4579b6497025cd..d650375f6429314ea39aad170d40d29681c15c3d 100644
--- a/hypha/templates/includes/pagination.html
+++ b/hypha/templates/includes/pagination.html
@@ -1,17 +1,17 @@
 {% load i18n %}
 {% if paginator_page.paginator.num_pages > 1 %}
-<nav role="navigation" aria-label="Pagination">
-    <ul class="pagination">
-        {% if paginator_page.has_previous %}
-            <li class="previous"><a href="?page={{ paginator_page.previous_page_number }}{% for param, value in request.GET.items %}{% if param != "page" %}&{{param}}={{value|urlencode}}{% endif %}{% endfor %}">{% trans "previous" %}</a></li>
-        {% endif %}
+    <nav role="navigation" aria-label="Pagination">
+        <ul class="pagination">
+            {% if paginator_page.has_previous %}
+                <li class="previous"><a href="?page={{ paginator_page.previous_page_number }}{% for param, value in request.GET.items %}{% if param != "page" %}&{{param}}={{value|urlencode}}{% endif %}{% endfor %}">{% trans "previous" %}</a></li>
+            {% endif %}
 
-        <li class="cardinality">
-            {{ paginator_page.number }}/{{ paginator_page.paginator.num_pages }}
-        </li>
+            <li class="cardinality">
+                {{ paginator_page.number }}/{{ paginator_page.paginator.num_pages }}
+            </li>
 
-        {% if paginator_page.has_next %}
-            <li class="next"><a href="?page={{ paginator_page.next_page_number }}{% for param, value in request.GET.items %}{% if param != "page" %}&{{param}}={{value|urlencode}}{% endif %}{% endfor %}">{% trans "next" %}</a></li>
-        {% endif %}
-    </ul>
-</nav>{% endif %}
+            {% if paginator_page.has_next %}
+                <li class="next"><a href="?page={{ paginator_page.next_page_number }}{% for param, value in request.GET.items %}{% if param != "page" %}&{{param}}={{value|urlencode}}{% endif %}{% endfor %}">{% trans "next" %}</a></li>
+            {% endif %}
+        </ul>
+    </nav>{% endif %}
diff --git a/hypha/templates/includes/relatedcontent.html b/hypha/templates/includes/relatedcontent.html
index 62fe5c6a56d02742c44c345d9e66b49e17d53ad9..523e0e11cc2ca152dea044d43f0d4f965fcdd475 100644
--- a/hypha/templates/includes/relatedcontent.html
+++ b/hypha/templates/includes/relatedcontent.html
@@ -5,33 +5,33 @@
         <div class="wrapper wrapper--medium">
             <h2>{{ title|default:default_title }}</h2>
             <section class="grid grid--max-three">
-                    {% for related_document in related_documents %}
-                        {% with document=related_document.document %}
-                            <div class="card">
-                                <a href="{{ document.url }}">
-                                    <h2>
-                                        {% if related_document.title %}
-                                            {{ related_document.title }}
-                                            ({{ document.file_extension }})
-                                        {% else %}
-                                            {{ document.filename }}
-                                        {% endif %}
-                                    </h2>
-                                </a>
-                            </div>
-                        {% endwith %}
-                    {% endfor %}
+                {% for related_document in related_documents %}
+                    {% with document=related_document.document %}
+                        <div class="card">
+                            <a href="{{ document.url }}">
+                                <h2>
+                                    {% if related_document.title %}
+                                        {{ related_document.title }}
+                                        ({{ document.file_extension }})
+                                    {% else %}
+                                        {{ document.filename }}
+                                    {% endif %}
+                                </h2>
+                            </a>
+                        </div>
+                    {% endwith %}
+                {% endfor %}
 
-                    {% for related in related_pages %}
+                {% for related in related_pages %}
                         {# a related object links to the original page (related.source_page) and a related one (related.page) #}
-                        {% if related.page.live %}
-                            {% with specific_related_page=related.page.specific %}
-                                {% include "includes/relatedcontent_card.html" with page=specific_related_page %}
-                            {% endwith %}
-                        {% else %}
-                            {% include "includes/relatedcontent_card.html" with page=related %}
-                        {% endif %}
-                    {% endfor %}
+                    {% if related.page.live %}
+                        {% with specific_related_page=related.page.specific %}
+                            {% include "includes/relatedcontent_card.html" with page=specific_related_page %}
+                        {% endwith %}
+                    {% else %}
+                        {% include "includes/relatedcontent_card.html" with page=related %}
+                    {% endif %}
+                {% endfor %}
             </section>
         </div>
     </div>
diff --git a/hypha/templates/includes/relatedcontent_card.html b/hypha/templates/includes/relatedcontent_card.html
index b797d299a8c9f49635666201ec509482d1b21e66..dbad987a82e8a6676182d8a9450649a12528a18c 100644
--- a/hypha/templates/includes/relatedcontent_card.html
+++ b/hypha/templates/includes/relatedcontent_card.html
@@ -1,25 +1,25 @@
 {% load i18n wagtailcore_tags wagtailimages_tags %}
 
 {% with page=page.specific %}
-{% if page %}
-<a class="card" href="{% pageurl page %}">
-    <h6 class="card__subheading">
-        {% if page.is_open %}
-            {% trans "Open" %}
-        {% elif page.can_open %}
-            {% trans "Closed" %}
-        {% endif %}
-    </h6>
-    {% if page.listing_image %}
-        {% image page.listing_image fill-450x300 %}
+    {% if page %}
+        <a class="card" href="{% pageurl page %}">
+            <h6 class="card__subheading">
+                {% if page.is_open %}
+                    {% trans "Open" %}
+                {% elif page.can_open %}
+                    {% trans "Closed" %}
+                {% endif %}
+            </h6>
+            {% if page.listing_image %}
+                {% image page.listing_image fill-450x300 %}
+            {% endif %}
+            <h4>
+                {{ page.listing_title|default:page.title }}
+            </h4>
+            {% if page.listing_summary or page.introduction %}
+                <p class="card__teaser">{{ page.listing_summary|default:page.introduction|truncatechars_html:130  }}</p>
+            {% endif %}
+            <svg class="icon icon--card-pixels"><use xlink:href="#arrow-head-pixels--transparent"></use></svg>
+        </a>
     {% endif %}
-    <h4>
-        {{ page.listing_title|default:page.title }}
-    </h4>
-    {% if page.listing_summary or page.introduction %}
-        <p class="card__teaser">{{ page.listing_summary|default:page.introduction|truncatechars_html:130  }}</p>
-    {% endif %}
-    <svg class="icon icon--card-pixels"><use xlink:href="#arrow-head-pixels--transparent"></use></svg>
-</a>
-{% endif %}
 {% endwith %}
diff --git a/hypha/templates/includes/share.html b/hypha/templates/includes/share.html
index 303846e105477e939bece3b9aa6247ec98cc72a6..fa189d7f2f03c42ee5c4b3d8c8263bdf7377328a 100644
--- a/hypha/templates/includes/share.html
+++ b/hypha/templates/includes/share.html
@@ -11,16 +11,16 @@
 
         <!-- see https://developer.linkedin.com/docs/share-on-linkedin -->
         <a href="https://www.linkedin.com/shareArticle?mini=true&amp;url={{ page.full_url|urlencode }}&amp;title={{ page.title|urlencode }}&amp;summary={{ page|social_text:current_site|urlencode }}&amp;source={{ social_media_settings.site_name|urlencode }}"
-            title="{% trans "Share on LinkedIn" %}">
+           title="{% trans "Share on LinkedIn" %}">
             <svg class="icon icon--social-share icon--linkedin-share"><use xlink:href="#linkedin"></use></svg>
         </a>
 
         <!-- see https://developers.facebook.com/docs/sharing/reference/feed-dialog/v2.5 -->
         <!-- Add a default image to use for social sharing here in case one is not provided on the page. -->
         {% if social_media_settings.facebook_app_id %}
-        <a href="https://www.facebook.com/dialog/feed?app_id={{ social_media_settings.facebook_app_id }}&amp;link={{ page.full_url|urlencode }}&amp;picture={% if social_img %}{{ 'http://'|add:current_site.hostname|add:social_img.url|urlencode }}{% endif %}&amp;name={{ page.title|urlencode }}&amp;description={{ page|social_text:current_site|urlencode }}&amp;redirect_uri={{ page.full_url|urlencode }}" title="{% trans "Share on Facebook" %}">
-            <svg class="icon icon--social-share icon--facebook-share"><use xlink:href="#facebook"></use></svg>
-        </a>
+            <a href="https://www.facebook.com/dialog/feed?app_id={{ social_media_settings.facebook_app_id }}&amp;link={{ page.full_url|urlencode }}&amp;picture={% if social_img %}{{ 'http://'|add:current_site.hostname|add:social_img.url|urlencode }}{% endif %}&amp;name={{ page.title|urlencode }}&amp;description={{ page|social_text:current_site|urlencode }}&amp;redirect_uri={{ page.full_url|urlencode }}" title="{% trans "Share on Facebook" %}">
+                <svg class="icon icon--social-share icon--facebook-share"><use xlink:href="#facebook"></use></svg>
+            </a>
         {% endif %}
     {% endwith %}
 </section>
diff --git a/hypha/templates/includes/sprites.html b/hypha/templates/includes/sprites.html
index 4c6274b956376562f38283f545a3b3d2109fca2d..159e4efee2464776ff580cd9ec63c7ed11aea06f 100644
--- a/hypha/templates/includes/sprites.html
+++ b/hypha/templates/includes/sprites.html
@@ -236,10 +236,18 @@
         <path d="M15 8.5L8 1.5L1 8.5" stroke-width="2"/>
     </symbol>
 
-    <symbol id="arrow-up" viewBox="0 0 15 15">
-        <path fill-rule="evenodd" d="M8 10a.5.5 0 0 0 .5-.5V3.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 3.707V9.5a.5.5 0 0 0 .5.5zm-7 2.5a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5z"/>
+    <symbol id="arrow-up" viewBox="0 0 16 17" fill="none">
+        <path d="M8 16.5L8 2.5" stroke-width="2"/>
+        <path d="M15 8L8 2L1 8" stroke-width="2"/>
     </symbol>
 
+
+    <symbol id="arrow-down" viewBox="0 0 16 17" fill="none">
+        <path d="M8 0.5L8 14.5" stroke-width="2"/>
+        <path d="M1 9L8 15L15 9" stroke-width="2"/>
+    </symbol>
+
+
     <svg id="arrow-up-short-bar" viewBox="0 0 16 17" fill="none">
         <path d="M8 3L8 13" stroke-width="2"/>
         <path d="M3 15H13" stroke-width="2"/>
@@ -337,8 +345,14 @@
         <path fill="none" d="M0 0h24v24H0V0z"/><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/>
     </symbol>
 
+    <symbol id="request-changes" viewBox="0 0 16 16" fill="none">
+        <path d="M8 15.2875C11.9764 15.2875 15.2 12.064 15.2 8.08751C15.2 4.11106 11.9764 0.887512 8 0.887512C4.02355 0.887512 0.799999 4.11106 0.799999 8.08751C0.799999 12.064 4.02355 15.2875 8 15.2875Z" stroke="#F05E54"/>
+        <path d="M7.54625 9.5375L7.54625 4.11249L8.47594 4.11249L8.47594 9.5375L7.54625 9.5375ZM8.64 11.4937C8.64 11.6354 8.58531 11.7542 8.47594 11.85C8.36135 11.95 8.2051 12 8.00719 12C7.80927 12 7.65302 11.95 7.53844 11.85C7.41865 11.7542 7.35875 11.6354 7.35875 11.4937C7.35875 11.3562 7.41865 11.2375 7.53844 11.1375C7.65302 11.0417 7.80927 10.9937 8.00719 10.9937C8.2051 10.9937 8.36135 11.0417 8.47594 11.1375C8.58531 11.2375 8.64 11.3562 8.64 11.4937Z" fill="#F05E54"/>
+    </symbol>
+
+
     <symbol fill="currentColor" id="info-circle-fill" viewBox="0 0 16 16">
-      <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
+        <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
     </symbol>
 
     <symbol id="open-in-new-tab" viewbox="0 0 24 24">
diff --git a/hypha/templates/styleguide.html b/hypha/templates/styleguide.html
index e605f3c562e1ea88046733dfa78b0c9d05ca3ade..ab9713e31d2e00fe4ed366f76fdca32058547499 100644
--- a/hypha/templates/styleguide.html
+++ b/hypha/templates/styleguide.html
@@ -60,208 +60,208 @@
         <main class="wrapper wrapper--large wrapper--main">
             {% block content_wrapper %}
 
-{% block content %}
-<h1 class="styleguide">Style Guide</h1>
-
-<section id="palette">
-    <h2 class="styleguide">Colour palette default</h2>
-    <ul>
-        <li class="color--white">color--white</li>
-        <li class="color--black">color--black</li>
-        <li class="color--light-grey">color--light-grey</li>
-        <li class="color--light-mid-grey">color--light-mid-grey</li>
-        <li class="color--mid-grey">color--mid-grey</li>
-        <li class="color--mid-dark-grey">color--mid-dark-grey</li>
-        <li class="color--dark-grey">color--dark-grey</li>
-    </ul>
-
-    <h2 class="styleguide">Colour palette brand</h2>
-    <ul>
-        <li class="color--lightest-blue">color--lightest-blue</li>
-        <li class="color--light-blue">color--light-blue</li>
-        <li class="color--light-blue-90">color--light-blue-90</li>
-        <li class="color--lighter-blue">color--lighter-blue</li>
-        <li class="color--dark-blue">color--dark-blue</li>
-        <li class="color--darkest-blue">color--darkest-blue</li>
-        <li class="color--mustard">color--mustard</li>
-        <li class="color--purple">color--purple</li>
-        <li class="color--pink">color--pink</li>
-        <li class="color--light-pink">color--light-pink</li>
-        <li class="color--light-green">color--light-green</li>
-        <li class="color--tomato">color--tomato</li>
-        <li class="color--mint">color--mint</li>
-        <li class="color--grass">color--grass</li>
-        <li class="color--ocean">color--ocean</li>
-        <li class="color--sky-blue">color--sky-blue</li>
-        <li class="color--marine">color--marine</li>
-        <li class="color--mist">color--mist</li>
-        <li class="color--green">color--green</li>
-        <li class="color--pastel-red">color--pastel-red</li>
-        <li class="color--pastel-green">color--pastel-green</li>
-        <li class="color--fog">color--fog</li>
-    </ul>
-
-    <h2 class="styleguide">Colour palette social</h2>
-    <ul>
-        <li class="color--twitter">color--twitter</li>
-        <li class="color--linkedin">color--linkedin</li>
-        <li class="color--facebook">color--facebook</li>
-    </ul>
-
-    <h2 class="styleguide">Colour palette transparent</h2>
-    <ul>
-        <li class="color--black-60">color--black-60</li>
-        <li class="color--black-50">color--black-50</li>
-        <li class="color--black-40">color--black-40</li>
-        <li class="color--black-25">color--black-25</li>
-        <li class="color--black-20">color--black-20</li>
-        <li class="color--black-10">color--black-10</li>
-        <li class="color--white-50">color--white-50</li>
-        <li class="color--white-40">color--white-40</li>
-        <li class="color--white-25">color--white-25</li>
-        <li class="color--white-20">color--white-20</li>
-        <li class="color--white-10">color--white-10</li>
-    </ul>
-
-    <h2 class="styleguide">Colour palette assignment</h2>
-    <ul>
-        <li class="color--default">color--default (color--dark-grey)</li>
-        <li class="color--primary">color--primary (color--light-blue)</li>
-        <li class="color--error">color--error (color--tomato)</li>
-        <li class="color--correct">color--correct (color--mint)</li>
-        <li class="color--button-disabled">color--button-disabled (color--lighter-blue)</li>
-    </ul>
-
-</section>
-
-<section id="typography">
-    <h2 class="styleguide">Typography</h2>
-
-    <h1>This is an h1</h1>
-    <h2>This is an h2</h2>
-    <h3>This is an h3</h3>
-    <h4>This is an h4</h4>
-    <h5>This is an h5</h5>
-
-    <p>This is a paragraph of text. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
-
-    <code>This is an example of code</code>
-
-    <h3 class="styleguide">Lists</h3>
-
-
-    <ul>
-        <li>These are</li>
-        <li>items in an</li>
-        <li>unordered list</li>
-    </ul>
-
-    <br>
-
-    <ol>
-        <li>These are</li>
-        <li>items in an</li>
-        <li>ordered list</li>
-    </ol>
-
-    <h2 class="styleguide">Typography in submissions</h2>
-
-    <article>
-        <div class="rich-text rich-text--answers">
-            <h1>This is an h1</h1>
-            <h2>This is an h2</h2>
-            <h3>This is an h3</h3>
-            <h4>This is an h4</h4>
-            <h5>This is an h5</h5>
-
-            <p>This is a paragraph of text. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
-
-            <code>This is an example of code</code>
-
-            <h3 class="styleguide">Lists</h3>
-
+                {% block content %}
+                    <h1 class="styleguide">Style Guide</h1>
+
+                    <section id="palette">
+                        <h2 class="styleguide">Colour palette default</h2>
+                        <ul>
+                            <li class="color--white">color--white</li>
+                            <li class="color--black">color--black</li>
+                            <li class="color--light-grey">color--light-grey</li>
+                            <li class="color--light-mid-grey">color--light-mid-grey</li>
+                            <li class="color--mid-grey">color--mid-grey</li>
+                            <li class="color--mid-dark-grey">color--mid-dark-grey</li>
+                            <li class="color--dark-grey">color--dark-grey</li>
+                        </ul>
+
+                        <h2 class="styleguide">Colour palette brand</h2>
+                        <ul>
+                            <li class="color--lightest-blue">color--lightest-blue</li>
+                            <li class="color--light-blue">color--light-blue</li>
+                            <li class="color--light-blue-90">color--light-blue-90</li>
+                            <li class="color--lighter-blue">color--lighter-blue</li>
+                            <li class="color--dark-blue">color--dark-blue</li>
+                            <li class="color--darkest-blue">color--darkest-blue</li>
+                            <li class="color--mustard">color--mustard</li>
+                            <li class="color--purple">color--purple</li>
+                            <li class="color--pink">color--pink</li>
+                            <li class="color--light-pink">color--light-pink</li>
+                            <li class="color--light-green">color--light-green</li>
+                            <li class="color--tomato">color--tomato</li>
+                            <li class="color--mint">color--mint</li>
+                            <li class="color--grass">color--grass</li>
+                            <li class="color--ocean">color--ocean</li>
+                            <li class="color--sky-blue">color--sky-blue</li>
+                            <li class="color--marine">color--marine</li>
+                            <li class="color--mist">color--mist</li>
+                            <li class="color--green">color--green</li>
+                            <li class="color--pastel-red">color--pastel-red</li>
+                            <li class="color--pastel-green">color--pastel-green</li>
+                            <li class="color--fog">color--fog</li>
+                        </ul>
+
+                        <h2 class="styleguide">Colour palette social</h2>
+                        <ul>
+                            <li class="color--twitter">color--twitter</li>
+                            <li class="color--linkedin">color--linkedin</li>
+                            <li class="color--facebook">color--facebook</li>
+                        </ul>
+
+                        <h2 class="styleguide">Colour palette transparent</h2>
+                        <ul>
+                            <li class="color--black-60">color--black-60</li>
+                            <li class="color--black-50">color--black-50</li>
+                            <li class="color--black-40">color--black-40</li>
+                            <li class="color--black-25">color--black-25</li>
+                            <li class="color--black-20">color--black-20</li>
+                            <li class="color--black-10">color--black-10</li>
+                            <li class="color--white-50">color--white-50</li>
+                            <li class="color--white-40">color--white-40</li>
+                            <li class="color--white-25">color--white-25</li>
+                            <li class="color--white-20">color--white-20</li>
+                            <li class="color--white-10">color--white-10</li>
+                        </ul>
+
+                        <h2 class="styleguide">Colour palette assignment</h2>
+                        <ul>
+                            <li class="color--default">color--default (color--dark-grey)</li>
+                            <li class="color--primary">color--primary (color--light-blue)</li>
+                            <li class="color--error">color--error (color--tomato)</li>
+                            <li class="color--correct">color--correct (color--mint)</li>
+                            <li class="color--button-disabled">color--button-disabled (color--lighter-blue)</li>
+                        </ul>
+
+                    </section>
+
+                    <section id="typography">
+                        <h2 class="styleguide">Typography</h2>
+
+                        <h1>This is an h1</h1>
+                        <h2>This is an h2</h2>
+                        <h3>This is an h3</h3>
+                        <h4>This is an h4</h4>
+                        <h5>This is an h5</h5>
+
+                        <p>This is a paragraph of text. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+
+                        <code>This is an example of code</code>
+
+                        <h3 class="styleguide">Lists</h3>
+
+
+                        <ul>
+                            <li>These are</li>
+                            <li>items in an</li>
+                            <li>unordered list</li>
+                        </ul>
+
+                        <br>
+
+                        <ol>
+                            <li>These are</li>
+                            <li>items in an</li>
+                            <li>ordered list</li>
+                        </ol>
+
+                        <h2 class="styleguide">Typography in submissions</h2>
+
+                        <article>
+                            <div class="rich-text rich-text--answers">
+                                <h1>This is an h1</h1>
+                                <h2>This is an h2</h2>
+                                <h3>This is an h3</h3>
+                                <h4>This is an h4</h4>
+                                <h5>This is an h5</h5>
+
+                                <p>This is a paragraph of text. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+
+                                <code>This is an example of code</code>
+
+                                <h3 class="styleguide">Lists</h3>
+
 
-            <ul>
-                <li>These are</li>
-                <li>items in an</li>
-                <li>unordered list</li>
-            </ul>
+                                <ul>
+                                    <li>These are</li>
+                                    <li>items in an</li>
+                                    <li>unordered list</li>
+                                </ul>
 
-            <br>
+                                <br>
 
-            <ol>
-                <li>These are</li>
-                <li>items in an</li>
-                <li>ordered list</li>
-            </ol>
-        </div>
-    </article>
-</section>
+                                <ol>
+                                    <li>These are</li>
+                                    <li>items in an</li>
+                                    <li>ordered list</li>
+                                </ol>
+                            </div>
+                        </article>
+                    </section>
 
-<section id="button">
-    <h2 class="styleguide">Links and button</h2>
+                    <section id="button">
+                        <h2 class="styleguide">Links and button</h2>
 
-    <button class="button button--primary">button--primary</button><br>
+                        <button class="button button--primary">button--primary</button><br>
 
-    <button class="button button--primary button--half-width">button--half-width</button><br>
+                        <button class="button button--primary button--half-width">button--half-width</button><br>
 
-    <button class="button button--primary button--full-width">button--full-width</button><br>
+                        <button class="button button--primary button--full-width">button--full-width</button><br>
 
-    <button class="button button--primary button--arrow-pixels-white">
-        button--arrow-pixels-white
-        <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
-    </button><br>
+                        <button class="button button--primary button--arrow-pixels-white">
+                            button--arrow-pixels-white
+                            <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg>
+                        </button><br>
 
 
-    <button class="button button--white">button--white</button><br>
+                        <button class="button button--white">button--white</button><br>
 
-    <button class="button button--white button--half-width">button--half-width</button><br>
+                        <button class="button button--white button--half-width">button--half-width</button><br>
 
-    <button class="button button--white button--full-width">button--full-width</button><br><br>
+                        <button class="button button--white button--full-width">button--full-width</button><br><br>
 
 
-    <button class="link link--button">link--button</button><br>
+                        <button class="link link--button">link--button</button><br>
 
-    <button class="link link--button link--button--narrow">link--button--narrow</button><br><br>
+                        <button class="link link--button link--button--narrow">link--button--narrow</button><br><br>
 
-</section>
+                    </section>
 
-<section id="form">
-    <h2 class="styleguide">Form</h2>
+                    <section id="form">
+                        <h2 class="styleguide">Form</h2>
 
-    <form class="form">
-        <div class="form__group">
-            <label for="text_input" class="form__question form__question--char_field text_input"><span>Text input</span></label>
-            <div class="form__item"><input id="text_input" type="text"></div>
-        </div>
+                        <form class="form">
+                            <div class="form__group">
+                                <label for="text_input" class="form__question form__question--char_field text_input"><span>Text input</span></label>
+                                <div class="form__item"><input id="text_input" type="text"></div>
+                            </div>
 
-        <div class="form__group">
-            <label for="text_input" class="form__question form__question--char_field text_input" required=""><span>Text input required</span><span class="form__required">*</span></label>
-            <div class="form__item"><input id="text_input" type="text"></div>
-        </div>
+                            <div class="form__group">
+                                <label for="text_input" class="form__question form__question--char_field text_input" required=""><span>Text input required</span><span class="form__required">*</span></label>
+                                <div class="form__item"><input id="text_input" type="text"></div>
+                            </div>
 
 
-        <button class="button button--submit button--top-space button--primary" type="submit">Button submit</button>
+                            <button class="button button--submit button--top-space button--primary" type="submit">Button submit</button>
 
-        <button class="button button--submit button--top-space button--white" type="submit">Button white submit</button>
-    </form>
-</section>
+                            <button class="button button--submit button--top-space button--white" type="submit">Button white submit</button>
+                        </form>
+                    </section>
 
-<section id="sidebar">
-    <h2 class="styleguide">Sidebar</h2>
+                    <section id="sidebar">
+                        <h2 class="styleguide">Sidebar</h2>
 
-     <div class="sidebar">
-        <div class="sidebar__inner">
-            <h5>Header</h5>
-            <p>Some text here.</p>
-            <button class="button button--primary button--full-width ">Button</a>
-        </div>
-    </div>
-</section>
+                        <div class="sidebar">
+                            <div class="sidebar__inner">
+                                <h5>Header</h5>
+                                <p>Some text here.</p>
+                                <button class="button button--primary button--full-width ">Button</a>
+                            </div>
+                        </div>
+                    </section>
 
 {# Insert more style guide elements here #}
 
-{% endblock %}
+                {% endblock %}
             {% endblock %}
         </main>
 
diff --git a/hypha/urls.py b/hypha/urls.py
index 59fbaada3945d939d06859134c7ad950d10f33fa..b1f6284348cdc5d72ab1e0e528cd06c1f7da8316 100644
--- a/hypha/urls.py
+++ b/hypha/urls.py
@@ -15,26 +15,24 @@ from hypha.apply.utils.views import custom_wagtail_page_delete
 from hypha.public import urls as public_urls
 
 urlpatterns = [
-    path('django-admin/', admin.site.urls),
+    path("django-admin/", admin.site.urls),
     path(
-        'admin/login/',
+        "admin/login/",
         LoginView.as_view(
-            template_name='users/login.html',
-            redirect_authenticated_user=True
+            template_name="users/login.html", redirect_authenticated_user=True
         ),
-        name='wagtailadmin_login'
+        name="wagtailadmin_login",
     ),
-    path('admin/pages/<int:page_id>/delete/', custom_wagtail_page_delete),
-    path('admin/', include(wagtailadmin_urls)),
-
-    path('documents/', include(wagtaildocs_urls)),
-    path('sitemap.xml', sitemap),
-    path('upload/', include(django_file_form_urls)),
-    path('', include((user_urls, 'users_public'))),
-    path('', include(public_urls)),
-    path('', include('social_django.urls', namespace='social')),
-    path('tinymce/', include('tinymce.urls')),
-    path('select2/', include('django_select2.urls')),
+    path("admin/pages/<int:page_id>/delete/", custom_wagtail_page_delete),
+    path("admin/", include(wagtailadmin_urls)),
+    path("documents/", include(wagtaildocs_urls)),
+    path("sitemap.xml", sitemap),
+    path("upload/", include(django_file_form_urls)),
+    path("", include((user_urls, "users_public"))),
+    path("", include(public_urls)),
+    path("", include("social_django.urls", namespace="social")),
+    path("tinymce/", include("tinymce.urls")),
+    path("select2/", include("django_select2.urls")),
 ]
 
 
@@ -48,29 +46,34 @@ if settings.DEBUG:
 
     urlpatterns += [
         # Add views for testing 404 and 500 templates
-        path('test404/', TemplateView.as_view(template_name='404.html')),
-        path('test500/', TemplateView.as_view(template_name='500.html')),
+        path("test404/", TemplateView.as_view(template_name="404.html")),
+        path("test500/", TemplateView.as_view(template_name="500.html")),
     ]
 
 if settings.DEBUG or settings.ENABLE_STYLEGUIDE:
     urlpatterns += [
         # Add styleguide
-        path('styleguide/', TemplateView.as_view(template_name='styleguide.html')),
+        path("styleguide/", TemplateView.as_view(template_name="styleguide.html")),
     ]
 
 urlpatterns += [
-    re_path(r'^images/([^/]*)/(\d*)/([^/]*)/[^/]*$', ServeView.as_view(), name='wagtailimages_serve'),
+    re_path(
+        r"^images/([^/]*)/(\d*)/([^/]*)/[^/]*$",
+        ServeView.as_view(),
+        name="wagtailimages_serve",
+    ),
 ]
 
 urlpatterns += [
-    path('', include(wagtail_urls)),
+    path("", include(wagtail_urls)),
 ]
 
 
 if settings.DEBUG:
     import debug_toolbar
+
     urlpatterns = [
-        path('__debug__/', include(debug_toolbar.urls)),
+        path("__debug__/", include(debug_toolbar.urls)),
         path("__reload__/", include("django_browser_reload.urls")),
     ] + urlpatterns
 
diff --git a/mkdocs.yml b/mkdocs.yml
index 1b690a61c17d18a0fe422bd324cbdae38634b550..3683b649747a136bcfd4e482ca9dc49a6d0de8e6 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,6 +1,6 @@
 site_name: Hypha Documentation
 site_url: https://docs.hypha.app/
-site_description: 'Documentation for Hypha, an open source submission management platform.'
+site_description: "Documentation for Hypha, an open source submission management platform."
 copyright: Copyright &copy; 2018 - 2023 - Open Technology Fund
 repo_name: HyphaApp/hypha
 repo_url: https://github.com/HyphaApp/hypha
@@ -17,9 +17,9 @@ theme:
   logo: data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgNTAwIDUwMCIgd2lkdGg9IjUwMCIgaGVpZ2h0PSI1MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgMSwgLTAuMTg4NzI4LCAwLjY4NjI4OCkiPgogICAgPHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjAiIGQ9Ik0uNiAxNDAuMmMuMiA3Ny41LjYgMTQzIDEgMTQ1LjYuMyAyLjYgMS4xIDcuMiAxLjcgMTAuM2wxLjYgOS44Yy4zIDIuMyAxLjggOC40IDMgMTMuNmEyNDEuNiAyNDEuNiAwIDAgMCAxNDkuNCAxNjQuOWMxMCAzLjcgMTAgMy43IDEwLjIgMS4zYTM1Ni42IDM1Ni42IDAgMCAxIDk5LjMtMjE1LjRBMzU1IDM1NSAwIDAgMSA0MjkuNCAxNzRsMTIuNC0zIDE0LTMuMWExNDg2LjYgMTQ4Ni42IDAgMCAxIDMyLTVjLjktMS0xMi40LTMxLTE5LTQyLjZhMjQxLjkgMjQxLjkgMCAwIDAtMTQ4LTExMy40Yy0xLjMtLjItNC4xLTEtNi40LTEuNS0yLjMtLjYtNS44LTEuNC03LjgtMS43bC02LjEtMWMtMS41LS4yLTQuNS0uOC02LjgtMS0yLjItLjUtNS40LTEtNy4yLTEuMi0xLjYtLjMtNjYuNy0uNy0xNDQuNy0uOEwuMy0uN3ptMjgyLjMtNDMuOGExNTggMTU4IDAgMCAxIDUyLjIgMTkuMmMxIDAgMTcgMTEuNyAxNyAxMi40IDAgLjUtMSAxLjItMi4zIDEuNWE0OTUuNiA0OTUuNiAwIDAgMC00OC4zIDIzLjQgNDk0LjkgNDk0LjkgMCAwIDAtNDEuMyAyNy4xIDMzNy44IDMzNy44IDAgMCAwLTQwLjggMzYgNzY2LjcgNzY2LjcgMCAwIDAtMTcuNSAxOC4ybC04LjggMTAuOWE0MDQuOCA0MDQuOCAwIDAgMC01NC43IDg5LjhjMCAuMy0xIDMuMS0yLjUgNi4yYTQzLjUgNDMuNSAwIDAgMC0zLjYgOS4yYy0xLjQgMy42LTIuNCAyLjgtOS43LTcuNi0xMi42LTE4LTIxLjEtMzguNy0yNS4yLTYxLjUtLjMtMS44LS43LTQ0LjQtMS05NC44TDk2IDk0LjhsOTEuNy40YzUwLjMuMiA5My4yLjcgOTUuMiAxLjJ6Ii8+CiAgICA8cGF0aCBkPSJNNDg4LjggMjM1YTMzNiAzMzYgMCAwIDAtNzguNSAyMC42Yy0yMC40IDguNS01MSAyNS45LTYwLjYgMzQuMy0xIC45IDQ5IDUxLjYgNTAuNiA1MS42YTMzIDMzIDAgMCAwIDYtMy40IDIxNi42IDIxNi42IDAgMCAxIDcxLTMwLjFsNy4zLTEuNWEzMzYuNiAzMzYuNiAwIDAgMSAxNC45LTIuNmMuNC0uMi42LTE1LjguNi0zNC44di0zNC40SDQ5NmMtMi4zIDAtNS41LjEtNy4yLjN6TTI4OSAzNTMuMWEzMDEuMiAzMDEuMiAwIDAgMC01MCAxMzkuMmwtLjcgNi43aDcwLjJsLjYtNi4yYzIuOC0yNS4zIDE1LTYwLjUgMjktODMuNyAyLjctNC41IDUuMi04LjUgNS4zLTkgLjQtLjYtNDkuOS01MS4zLTUwLjgtNTEuMy0uMiAwLTEuOCAyLTMuNiA0LjN6bTIwMS44IDIzLjJjLTU0LjMgMTIuNi05Mi4xIDQ4LjEtMTA3LjMgMTAxLTIuNiA5LTMuMiAxMS43LTQgMTguNmwtLjQgMy4xaDYwLjVsNjAuNS0uMXYtNjEuOGMwLTU0LjItLjItNjEuOC0xLjUtNjItLjgtLjEtNC40LjQtNy44IDEuMnoiLz4KICA8L2c+Cjwvc3ZnPg==
   icon:
     repo: fontawesome/brands/github
-#   palette:
-#     primary: black
-#     accent: deep purple
+  #   palette:
+  #     primary: black
+  #     accent: deep purple
   font: false
   features:
     - content.action.edit
@@ -86,14 +86,14 @@ nav:
 
 extra:
   social:
-  - icon: material/chat
-    link: https://chat.hypha.app/
-    name: Hypha Chat
+    - icon: material/chat
+      link: https://chat.hypha.app/
+      name: Hypha Chat
 
-  - icon: material/forum
-    link: https://we.hypha.app/
-    name: Hypha Forum
+    - icon: material/forum
+      link: https://we.hypha.app/
+      name: Hypha Forum
 
-  - icon: material/github
-    link: https://github.com/HyphaApp/
-    name: GitHub Org
+    - icon: material/github
+      link: https://github.com/HyphaApp/
+      name: GitHub Org
diff --git a/package-lock.json b/package-lock.json
index 4d66d0c59ec08f0fb43cc1df960e698c75bd9cb8..853ea3238ecb056bb54763c741295162d524a398 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5824 +1,6138 @@
 {
-    "name": "Hypha",
-    "version": "1.0.0",
-    "lockfileVersion": 3,
-    "requires": true,
-    "packages": {
-        "": {
-            "name": "Hypha",
-            "version": "1.0.0",
-            "hasInstallScript": true,
-            "license": "GPL-2.0",
-            "devDependencies": {
-                "@alpinejs/focus": "^3.12.0",
-                "@babel/cli": "^7.20.7",
-                "@babel/core": "^7.20.12",
-                "@babel/preset-env": "^7.20.2",
-                "@tailwindcss/forms": "^0.5.3",
-                "alpinejs": "^3.12.0",
-                "core-js": "^3.27.2",
-                "daterangepicker": "^3.1.0",
-                "eslint": "^8.33.0",
-                "eslint-plugin-template": "^0.7.0",
-                "htmx.org": "^1.8.6",
-                "nodemon": "^2.0.20",
-                "npm-run-all2": "^6.0.4",
-                "sass": "^1.57.1",
-                "stylelint-config-standard-scss": "^6.1.0",
-                "stylelint-scss": "^4.3.0",
-                "tailwindcss": "^3.3.2"
-            },
-            "engines": {
-                "node": "18.x"
-            }
-        },
-        "node_modules/@alloc/quick-lru": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
-            "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/@alpinejs/focus": {
-            "version": "3.12.2",
-            "resolved": "https://registry.npmjs.org/@alpinejs/focus/-/focus-3.12.2.tgz",
-            "integrity": "sha512-Uhu/0uSwgYSyzAeNT/kzrxiVKJQezwhUM1VxYwCpfOMT0OvKJ80Wl+M4R+5JJhsf+15B65rQnsE7no+TxpV5bg==",
-            "dev": true,
-            "dependencies": {
-                "focus-trap": "^6.6.1"
-            }
-        },
-        "node_modules/@ampproject/remapping": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
-            "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
-            "dev": true,
-            "dependencies": {
-                "@jridgewell/gen-mapping": "^0.3.0",
-                "@jridgewell/trace-mapping": "^0.3.9"
-            },
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/@babel/cli": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.21.5.tgz",
-            "integrity": "sha512-TOKytQ9uQW9c4np8F+P7ZfPINy5Kv+pizDIUwSVH8X5zHgYHV4AA8HE5LA450xXeu4jEfmUckTYvv1I4S26M/g==",
-            "dev": true,
-            "dependencies": {
-                "@jridgewell/trace-mapping": "^0.3.17",
-                "commander": "^4.0.1",
-                "convert-source-map": "^1.1.0",
-                "fs-readdir-recursive": "^1.1.0",
-                "glob": "^7.2.0",
-                "make-dir": "^2.1.0",
-                "slash": "^2.0.0"
-            },
-            "bin": {
-                "babel": "bin/babel.js",
-                "babel-external-helpers": "bin/babel-external-helpers.js"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "optionalDependencies": {
-                "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
-                "chokidar": "^3.4.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/code-frame": {
-            "version": "7.21.4",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
-            "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/highlight": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/compat-data": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz",
-            "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/core": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz",
-            "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==",
-            "dev": true,
-            "dependencies": {
-                "@ampproject/remapping": "^2.2.0",
-                "@babel/code-frame": "^7.21.4",
-                "@babel/generator": "^7.22.0",
-                "@babel/helper-compilation-targets": "^7.22.1",
-                "@babel/helper-module-transforms": "^7.22.1",
-                "@babel/helpers": "^7.22.0",
-                "@babel/parser": "^7.22.0",
-                "@babel/template": "^7.21.9",
-                "@babel/traverse": "^7.22.1",
-                "@babel/types": "^7.22.0",
-                "convert-source-map": "^1.7.0",
-                "debug": "^4.1.0",
-                "gensync": "^1.0.0-beta.2",
-                "json5": "^2.2.2",
-                "semver": "^6.3.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/babel"
-            }
-        },
-        "node_modules/@babel/generator": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz",
-            "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.22.3",
-                "@jridgewell/gen-mapping": "^0.3.2",
-                "@jridgewell/trace-mapping": "^0.3.17",
-                "jsesc": "^2.5.1"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-annotate-as-pure": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-            "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz",
-            "integrity": "sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.22.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-compilation-targets": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz",
-            "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/compat-data": "^7.22.0",
-                "@babel/helper-validator-option": "^7.21.0",
-                "browserslist": "^4.21.3",
-                "lru-cache": "^5.1.1",
-                "semver": "^6.3.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/helper-create-class-features-plugin": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz",
-            "integrity": "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.18.6",
-                "@babel/helper-environment-visitor": "^7.22.1",
-                "@babel/helper-function-name": "^7.21.0",
-                "@babel/helper-member-expression-to-functions": "^7.22.0",
-                "@babel/helper-optimise-call-expression": "^7.18.6",
-                "@babel/helper-replace-supers": "^7.22.1",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
-                "@babel/helper-split-export-declaration": "^7.18.6",
-                "semver": "^6.3.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/helper-create-regexp-features-plugin": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz",
-            "integrity": "sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.18.6",
-                "regexpu-core": "^5.3.1",
-                "semver": "^6.3.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/helper-define-polyfill-provider": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz",
-            "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-compilation-targets": "^7.17.7",
-                "@babel/helper-plugin-utils": "^7.16.7",
-                "debug": "^4.1.1",
-                "lodash.debounce": "^4.0.8",
-                "resolve": "^1.14.2",
-                "semver": "^6.1.2"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.4.0-0"
-            }
-        },
-        "node_modules/@babel/helper-environment-visitor": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz",
-            "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-function-name": {
-            "version": "7.21.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
-            "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/template": "^7.20.7",
-                "@babel/types": "^7.21.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-hoist-variables": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
-            "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-member-expression-to-functions": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz",
-            "integrity": "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.22.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-module-imports": {
-            "version": "7.21.4",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
-            "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.21.4"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-module-transforms": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz",
-            "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.1",
-                "@babel/helper-module-imports": "^7.21.4",
-                "@babel/helper-simple-access": "^7.21.5",
-                "@babel/helper-split-export-declaration": "^7.18.6",
-                "@babel/helper-validator-identifier": "^7.19.1",
-                "@babel/template": "^7.21.9",
-                "@babel/traverse": "^7.22.1",
-                "@babel/types": "^7.22.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-optimise-call-expression": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
-            "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-plugin-utils": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz",
-            "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-remap-async-to-generator": {
-            "version": "7.18.9",
-            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
-            "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.18.6",
-                "@babel/helper-environment-visitor": "^7.18.9",
-                "@babel/helper-wrap-function": "^7.18.9",
-                "@babel/types": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/helper-replace-supers": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz",
-            "integrity": "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.1",
-                "@babel/helper-member-expression-to-functions": "^7.22.0",
-                "@babel/helper-optimise-call-expression": "^7.18.6",
-                "@babel/template": "^7.21.9",
-                "@babel/traverse": "^7.22.1",
-                "@babel/types": "^7.22.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-simple-access": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz",
-            "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-            "version": "7.20.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
-            "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.20.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-split-export-declaration": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
-            "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/types": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-string-parser": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
-            "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-validator-identifier": {
-            "version": "7.19.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-            "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-validator-option": {
-            "version": "7.21.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
-            "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-wrap-function": {
-            "version": "7.20.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
-            "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-function-name": "^7.19.0",
-                "@babel/template": "^7.18.10",
-                "@babel/traverse": "^7.20.5",
-                "@babel/types": "^7.20.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helpers": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz",
-            "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==",
-            "dev": true,
-            "dependencies": {
-                "@babel/template": "^7.21.9",
-                "@babel/traverse": "^7.22.1",
-                "@babel/types": "^7.22.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/highlight": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-            "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-validator-identifier": "^7.18.6",
-                "chalk": "^2.0.0",
-                "js-tokens": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/parser": {
-            "version": "7.22.4",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz",
-            "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==",
-            "dev": true,
-            "bin": {
-                "parser": "bin/babel-parser.js"
-            },
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
-            "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.3.tgz",
-            "integrity": "sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
-                "@babel/plugin-transform-optional-chaining": "^7.22.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.13.0"
-            }
-        },
-        "node_modules/@babel/plugin-proposal-private-property-in-object": {
-            "version": "7.21.10",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.10.tgz",
-            "integrity": "sha512-3YybmT8FN4sZFXp0kTr9Gbu90wAIhC3feNung+qcRQ1wALGoSHgOz1c+fR3ZLGZ0LXqIpYmtE6Faua6tMDarUg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.18.6",
-                "@babel/helper-create-class-features-plugin": "^7.21.0",
-                "@babel/helper-plugin-utils": "^7.20.2",
-                "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-proposal-unicode-property-regex": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
-            "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=4"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-async-generators": {
-            "version": "7.8.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-            "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-class-properties": {
-            "version": "7.12.13",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-            "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.12.13"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-class-static-block": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
-            "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-dynamic-import": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-            "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-export-namespace-from": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-            "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.3"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-import-assertions": {
-            "version": "7.20.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
-            "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.19.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-import-attributes": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.3.tgz",
-            "integrity": "sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-import-meta": {
-            "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-            "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.10.4"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-json-strings": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-            "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
-            "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-            "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.10.4"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-            "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-numeric-separator": {
-            "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-            "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.10.4"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-object-rest-spread": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-            "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-optional-catch-binding": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-            "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-optional-chaining": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-            "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.8.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-private-property-in-object": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
-            "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-top-level-await": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-            "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
-            "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-arrow-functions": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz",
-            "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-async-generator-functions": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.3.tgz",
-            "integrity": "sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-environment-visitor": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/helper-remap-async-to-generator": "^7.18.9",
-                "@babel/plugin-syntax-async-generators": "^7.8.4"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-async-to-generator": {
-            "version": "7.20.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz",
-            "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-module-imports": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.20.2",
-                "@babel/helper-remap-async-to-generator": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-block-scoped-functions": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
-            "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-block-scoping": {
-            "version": "7.21.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz",
-            "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.20.2"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-class-properties": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.3.tgz",
-            "integrity": "sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-class-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-class-static-block": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.3.tgz",
-            "integrity": "sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-class-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-class-static-block": "^7.14.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.12.0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-classes": {
-            "version": "7.21.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz",
-            "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.18.6",
-                "@babel/helper-compilation-targets": "^7.20.7",
-                "@babel/helper-environment-visitor": "^7.18.9",
-                "@babel/helper-function-name": "^7.21.0",
-                "@babel/helper-optimise-call-expression": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.20.2",
-                "@babel/helper-replace-supers": "^7.20.7",
-                "@babel/helper-split-export-declaration": "^7.18.6",
-                "globals": "^11.1.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-computed-properties": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz",
-            "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/template": "^7.20.7"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-destructuring": {
-            "version": "7.21.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz",
-            "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.20.2"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-dotall-regex": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
-            "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-duplicate-keys": {
-            "version": "7.18.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
-            "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-dynamic-import": {
-            "version": "7.22.1",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.1.tgz",
-            "integrity": "sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-dynamic-import": "^7.8.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-exponentiation-operator": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
-            "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-export-namespace-from": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz",
-            "integrity": "sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-for-of": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz",
-            "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-function-name": {
-            "version": "7.18.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
-            "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-compilation-targets": "^7.18.9",
-                "@babel/helper-function-name": "^7.18.9",
-                "@babel/helper-plugin-utils": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-json-strings": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.3.tgz",
-            "integrity": "sha512-IuvOMdeOOY2X4hRNAT6kwbePtK21BUyrAEgLKviL8pL6AEEVUVcqtRdN/HJXBLGIbt9T3ETmXRnFedRRmQNTYw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-json-strings": "^7.8.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-literals": {
-            "version": "7.18.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
-            "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.3.tgz",
-            "integrity": "sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-member-expression-literals": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
-            "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-modules-amd": {
-            "version": "7.20.11",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz",
-            "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-module-transforms": "^7.20.11",
-                "@babel/helper-plugin-utils": "^7.20.2"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-modules-commonjs": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz",
-            "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-module-transforms": "^7.21.5",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/helper-simple-access": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-modules-systemjs": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.3.tgz",
-            "integrity": "sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-hoist-variables": "^7.18.6",
-                "@babel/helper-module-transforms": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/helper-validator-identifier": "^7.19.1"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-modules-umd": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
-            "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-module-transforms": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.3.tgz",
-            "integrity": "sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-new-target": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.3.tgz",
-            "integrity": "sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.3.tgz",
-            "integrity": "sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-numeric-separator": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.3.tgz",
-            "integrity": "sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-numeric-separator": "^7.10.4"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-object-rest-spread": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.3.tgz",
-            "integrity": "sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/compat-data": "^7.22.3",
-                "@babel/helper-compilation-targets": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-                "@babel/plugin-transform-parameters": "^7.22.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-object-super": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
-            "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6",
-                "@babel/helper-replace-supers": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-optional-catch-binding": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.3.tgz",
-            "integrity": "sha512-bnDFWXFzWY0BsOyqaoSXvMQ2F35zutQipugog/rqotL2S4ciFOKlRYUu9djt4iq09oh2/34hqfRR2k1dIvuu4g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-optional-chaining": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.3.tgz",
-            "integrity": "sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
-                "@babel/plugin-syntax-optional-chaining": "^7.8.3"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-parameters": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz",
-            "integrity": "sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-private-methods": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz",
-            "integrity": "sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-class-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-private-property-in-object": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz",
-            "integrity": "sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-annotate-as-pure": "^7.18.6",
-                "@babel/helper-create-class-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-property-literals": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
-            "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-regenerator": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz",
-            "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "regenerator-transform": "^0.15.1"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-reserved-words": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
-            "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-shorthand-properties": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
-            "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-spread": {
-            "version": "7.20.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz",
-            "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.20.2",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-sticky-regex": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
-            "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-template-literals": {
-            "version": "7.18.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
-            "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-typeof-symbol": {
-            "version": "7.18.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
-            "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.18.9"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-unicode-escapes": {
-            "version": "7.21.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz",
-            "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-unicode-property-regex": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.3.tgz",
-            "integrity": "sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-unicode-regex": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
-            "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-                "@babel/helper-plugin-utils": "^7.18.6"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.3.tgz",
-            "integrity": "sha512-hNufLdkF8vqywRp+P55j4FHXqAX2LRUccoZHH7AFn1pq5ZOO2ISKW9w13bFZVjBoTqeve2HOgoJCcaziJVhGNw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-create-regexp-features-plugin": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0"
-            }
-        },
-        "node_modules/@babel/preset-env": {
-            "version": "7.22.4",
-            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.4.tgz",
-            "integrity": "sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/compat-data": "^7.22.3",
-                "@babel/helper-compilation-targets": "^7.22.1",
-                "@babel/helper-plugin-utils": "^7.21.5",
-                "@babel/helper-validator-option": "^7.21.0",
-                "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
-                "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.3",
-                "@babel/plugin-proposal-private-property-in-object": "^7.21.0",
-                "@babel/plugin-syntax-async-generators": "^7.8.4",
-                "@babel/plugin-syntax-class-properties": "^7.12.13",
-                "@babel/plugin-syntax-class-static-block": "^7.14.5",
-                "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-                "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-                "@babel/plugin-syntax-import-assertions": "^7.20.0",
-                "@babel/plugin-syntax-import-attributes": "^7.22.3",
-                "@babel/plugin-syntax-import-meta": "^7.10.4",
-                "@babel/plugin-syntax-json-strings": "^7.8.3",
-                "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-                "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-                "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-                "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-                "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-                "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-                "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-                "@babel/plugin-syntax-top-level-await": "^7.14.5",
-                "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-                "@babel/plugin-transform-arrow-functions": "^7.21.5",
-                "@babel/plugin-transform-async-generator-functions": "^7.22.3",
-                "@babel/plugin-transform-async-to-generator": "^7.20.7",
-                "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
-                "@babel/plugin-transform-block-scoping": "^7.21.0",
-                "@babel/plugin-transform-class-properties": "^7.22.3",
-                "@babel/plugin-transform-class-static-block": "^7.22.3",
-                "@babel/plugin-transform-classes": "^7.21.0",
-                "@babel/plugin-transform-computed-properties": "^7.21.5",
-                "@babel/plugin-transform-destructuring": "^7.21.3",
-                "@babel/plugin-transform-dotall-regex": "^7.18.6",
-                "@babel/plugin-transform-duplicate-keys": "^7.18.9",
-                "@babel/plugin-transform-dynamic-import": "^7.22.1",
-                "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
-                "@babel/plugin-transform-export-namespace-from": "^7.22.3",
-                "@babel/plugin-transform-for-of": "^7.21.5",
-                "@babel/plugin-transform-function-name": "^7.18.9",
-                "@babel/plugin-transform-json-strings": "^7.22.3",
-                "@babel/plugin-transform-literals": "^7.18.9",
-                "@babel/plugin-transform-logical-assignment-operators": "^7.22.3",
-                "@babel/plugin-transform-member-expression-literals": "^7.18.6",
-                "@babel/plugin-transform-modules-amd": "^7.20.11",
-                "@babel/plugin-transform-modules-commonjs": "^7.21.5",
-                "@babel/plugin-transform-modules-systemjs": "^7.22.3",
-                "@babel/plugin-transform-modules-umd": "^7.18.6",
-                "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.3",
-                "@babel/plugin-transform-new-target": "^7.22.3",
-                "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.3",
-                "@babel/plugin-transform-numeric-separator": "^7.22.3",
-                "@babel/plugin-transform-object-rest-spread": "^7.22.3",
-                "@babel/plugin-transform-object-super": "^7.18.6",
-                "@babel/plugin-transform-optional-catch-binding": "^7.22.3",
-                "@babel/plugin-transform-optional-chaining": "^7.22.3",
-                "@babel/plugin-transform-parameters": "^7.22.3",
-                "@babel/plugin-transform-private-methods": "^7.22.3",
-                "@babel/plugin-transform-private-property-in-object": "^7.22.3",
-                "@babel/plugin-transform-property-literals": "^7.18.6",
-                "@babel/plugin-transform-regenerator": "^7.21.5",
-                "@babel/plugin-transform-reserved-words": "^7.18.6",
-                "@babel/plugin-transform-shorthand-properties": "^7.18.6",
-                "@babel/plugin-transform-spread": "^7.20.7",
-                "@babel/plugin-transform-sticky-regex": "^7.18.6",
-                "@babel/plugin-transform-template-literals": "^7.18.9",
-                "@babel/plugin-transform-typeof-symbol": "^7.18.9",
-                "@babel/plugin-transform-unicode-escapes": "^7.21.5",
-                "@babel/plugin-transform-unicode-property-regex": "^7.22.3",
-                "@babel/plugin-transform-unicode-regex": "^7.18.6",
-                "@babel/plugin-transform-unicode-sets-regex": "^7.22.3",
-                "@babel/preset-modules": "^0.1.5",
-                "@babel/types": "^7.22.4",
-                "babel-plugin-polyfill-corejs2": "^0.4.3",
-                "babel-plugin-polyfill-corejs3": "^0.8.1",
-                "babel-plugin-polyfill-regenerator": "^0.5.0",
-                "core-js-compat": "^3.30.2",
-                "semver": "^6.3.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/preset-modules": {
-            "version": "0.1.5",
-            "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
-            "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
-                "@babel/plugin-transform-dotall-regex": "^7.4.4",
-                "@babel/types": "^7.4.4",
-                "esutils": "^2.0.2"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/@babel/regjsgen": {
-            "version": "0.8.0",
-            "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-            "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-            "dev": true
-        },
-        "node_modules/@babel/runtime": {
-            "version": "7.22.3",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz",
-            "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==",
-            "dev": true,
-            "dependencies": {
-                "regenerator-runtime": "^0.13.11"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/template": {
-            "version": "7.21.9",
-            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz",
-            "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/code-frame": "^7.21.4",
-                "@babel/parser": "^7.21.9",
-                "@babel/types": "^7.21.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/traverse": {
-            "version": "7.22.4",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz",
-            "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/code-frame": "^7.21.4",
-                "@babel/generator": "^7.22.3",
-                "@babel/helper-environment-visitor": "^7.22.1",
-                "@babel/helper-function-name": "^7.21.0",
-                "@babel/helper-hoist-variables": "^7.18.6",
-                "@babel/helper-split-export-declaration": "^7.18.6",
-                "@babel/parser": "^7.22.4",
-                "@babel/types": "^7.22.4",
-                "debug": "^4.1.0",
-                "globals": "^11.1.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/types": {
-            "version": "7.22.4",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz",
-            "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-string-parser": "^7.21.5",
-                "@babel/helper-validator-identifier": "^7.19.1",
-                "to-fast-properties": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@csstools/selector-specificity": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz",
-            "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": "^14 || ^16 || >=18"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/csstools"
-            },
-            "peerDependencies": {
-                "postcss-selector-parser": "^6.0.10"
-            }
-        },
-        "node_modules/@eslint-community/eslint-utils": {
-            "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
-            "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
-            "dev": true,
-            "dependencies": {
-                "eslint-visitor-keys": "^3.3.0"
-            },
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            },
-            "peerDependencies": {
-                "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
-            }
-        },
-        "node_modules/@eslint-community/regexpp": {
-            "version": "4.5.1",
-            "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
-            "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
-            "dev": true,
-            "engines": {
-                "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
-            }
-        },
-        "node_modules/@eslint/eslintrc": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
-            "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
-            "dev": true,
-            "dependencies": {
-                "ajv": "^6.12.4",
-                "debug": "^4.3.2",
-                "espree": "^9.5.2",
-                "globals": "^13.19.0",
-                "ignore": "^5.2.0",
-                "import-fresh": "^3.2.1",
-                "js-yaml": "^4.1.0",
-                "minimatch": "^3.1.2",
-                "strip-json-comments": "^3.1.1"
-            },
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
-        "node_modules/@eslint/eslintrc/node_modules/globals": {
-            "version": "13.20.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-            "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
-            "dev": true,
-            "dependencies": {
-                "type-fest": "^0.20.2"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/@eslint/eslintrc/node_modules/type-fest": {
-            "version": "0.20.2",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-            "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/@eslint/js": {
-            "version": "8.42.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz",
-            "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==",
-            "dev": true,
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            }
-        },
-        "node_modules/@humanwhocodes/config-array": {
-            "version": "0.11.10",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
-            "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
-            "dev": true,
-            "dependencies": {
-                "@humanwhocodes/object-schema": "^1.2.1",
-                "debug": "^4.1.1",
-                "minimatch": "^3.0.5"
-            },
-            "engines": {
-                "node": ">=10.10.0"
-            }
-        },
-        "node_modules/@humanwhocodes/module-importer": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-            "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-            "dev": true,
-            "engines": {
-                "node": ">=12.22"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/nzakas"
-            }
-        },
-        "node_modules/@humanwhocodes/object-schema": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-            "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
-            "dev": true
-        },
-        "node_modules/@jridgewell/gen-mapping": {
-            "version": "0.3.3",
-            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
-            "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
-            "dev": true,
-            "dependencies": {
-                "@jridgewell/set-array": "^1.0.1",
-                "@jridgewell/sourcemap-codec": "^1.4.10",
-                "@jridgewell/trace-mapping": "^0.3.9"
-            },
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/@jridgewell/resolve-uri": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-            "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/@jridgewell/set-array": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-            "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/@jridgewell/sourcemap-codec": {
-            "version": "1.4.15",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
-            "dev": true
-        },
-        "node_modules/@jridgewell/trace-mapping": {
-            "version": "0.3.18",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
-            "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
-            "dev": true,
-            "dependencies": {
-                "@jridgewell/resolve-uri": "3.1.0",
-                "@jridgewell/sourcemap-codec": "1.4.14"
-            }
-        },
-        "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
-            "version": "1.4.14",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-            "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
-            "dev": true
-        },
-        "node_modules/@nicolo-ribaudo/chokidar-2": {
-            "version": "2.1.8-no-fsevents.3",
-            "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
-            "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
-            "dev": true,
-            "optional": true
-        },
-        "node_modules/@nodelib/fs.scandir": {
-            "version": "2.1.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-            "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-            "dev": true,
-            "dependencies": {
-                "@nodelib/fs.stat": "2.0.5",
-                "run-parallel": "^1.1.9"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/@nodelib/fs.stat": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-            "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-            "dev": true,
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/@nodelib/fs.walk": {
-            "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-            "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-            "dev": true,
-            "dependencies": {
-                "@nodelib/fs.scandir": "2.1.5",
-                "fastq": "^1.6.0"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/@tailwindcss/forms": {
-            "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
-            "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
-            "dev": true,
-            "dependencies": {
-                "mini-svg-data-uri": "^1.2.3"
-            },
-            "peerDependencies": {
-                "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
-            }
-        },
-        "node_modules/@types/minimist": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
-            "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/@types/normalize-package-data": {
-            "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-            "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
-            "dev": true
-        },
-        "node_modules/@types/parse-json": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
-            "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/@vue/reactivity": {
-            "version": "3.1.5",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
-            "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
-            "dev": true,
-            "dependencies": {
-                "@vue/shared": "3.1.5"
-            }
-        },
-        "node_modules/@vue/shared": {
-            "version": "3.1.5",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
-            "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
-            "dev": true
-        },
-        "node_modules/abbrev": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-            "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-            "dev": true
-        },
-        "node_modules/acorn": {
-            "version": "8.8.2",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-            "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
-            "dev": true,
-            "bin": {
-                "acorn": "bin/acorn"
-            },
-            "engines": {
-                "node": ">=0.4.0"
-            }
-        },
-        "node_modules/acorn-jsx": {
-            "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-            "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-            "dev": true,
-            "peerDependencies": {
-                "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-            }
-        },
-        "node_modules/ajv": {
-            "version": "6.12.6",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-            "dev": true,
-            "dependencies": {
-                "fast-deep-equal": "^3.1.1",
-                "fast-json-stable-stringify": "^2.0.0",
-                "json-schema-traverse": "^0.4.1",
-                "uri-js": "^4.2.2"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/epoberezkin"
-            }
-        },
-        "node_modules/alpinejs": {
-            "version": "3.12.2",
-            "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.12.2.tgz",
-            "integrity": "sha512-wrUZULm9w6DYwWcUtB/anFLgRaF4riSuPgIJ3gcPUS8st9luAJnAxoIgro/Al97d2McSSz/JypWg/NlmKFIJJA==",
-            "dev": true,
-            "dependencies": {
-                "@vue/reactivity": "~3.1.1"
-            }
-        },
-        "node_modules/ansi-regex": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-            "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/ansi-styles": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-            "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^1.9.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/any-promise": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-            "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-            "dev": true
-        },
-        "node_modules/anymatch": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-            "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
-            "dev": true,
-            "dependencies": {
-                "normalize-path": "^3.0.0",
-                "picomatch": "^2.0.4"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/arg": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
-            "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
-            "dev": true
-        },
-        "node_modules/argparse": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-            "dev": true
-        },
-        "node_modules/array-union": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/arrify": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-            "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/astral-regex": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
-            "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/babel-plugin-polyfill-corejs2": {
-            "version": "0.4.3",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz",
-            "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==",
-            "dev": true,
-            "dependencies": {
-                "@babel/compat-data": "^7.17.7",
-                "@babel/helper-define-polyfill-provider": "^0.4.0",
-                "semver": "^6.1.1"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/babel-plugin-polyfill-corejs3": {
-            "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz",
-            "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-define-polyfill-provider": "^0.4.0",
-                "core-js-compat": "^3.30.1"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/babel-plugin-polyfill-regenerator": {
-            "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz",
-            "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==",
-            "dev": true,
-            "dependencies": {
-                "@babel/helper-define-polyfill-provider": "^0.4.0"
-            },
-            "peerDependencies": {
-                "@babel/core": "^7.0.0-0"
-            }
-        },
-        "node_modules/balanced-match": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-            "dev": true
-        },
-        "node_modules/binary-extensions": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "node_modules/braces": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-            "dev": true,
-            "dependencies": {
-                "fill-range": "^7.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/browserslist": {
-            "version": "4.21.7",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz",
-            "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/browserslist"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/browserslist"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "dependencies": {
-                "caniuse-lite": "^1.0.30001489",
-                "electron-to-chromium": "^1.4.411",
-                "node-releases": "^2.0.12",
-                "update-browserslist-db": "^1.0.11"
-            },
-            "bin": {
-                "browserslist": "cli.js"
-            },
-            "engines": {
-                "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-            }
-        },
-        "node_modules/callsites": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-            "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/camelcase": {
-            "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-            "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/camelcase-css": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
-            "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
-            "dev": true,
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/camelcase-keys": {
-            "version": "6.2.2",
-            "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
-            "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "camelcase": "^5.3.1",
-                "map-obj": "^4.0.0",
-                "quick-lru": "^4.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/caniuse-lite": {
-            "version": "1.0.30001492",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz",
-            "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/browserslist"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ]
-        },
-        "node_modules/chalk": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-            "dev": true,
-            "dependencies": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/chokidar": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-            "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "individual",
-                    "url": "https://paulmillr.com/funding/"
-                }
-            ],
-            "dependencies": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "glob-parent": "~5.1.2",
-                "is-binary-path": "~2.1.0",
-                "is-glob": "~4.0.1",
-                "normalize-path": "~3.0.0",
-                "readdirp": "~3.6.0"
-            },
-            "engines": {
-                "node": ">= 8.10.0"
-            },
-            "optionalDependencies": {
-                "fsevents": "~2.3.2"
-            }
-        },
-        "node_modules/color-convert": {
-            "version": "1.9.3",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "1.1.3"
-            }
-        },
-        "node_modules/color-name": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-            "dev": true
-        },
-        "node_modules/colord": {
-            "version": "2.9.3",
-            "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
-            "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/commander": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-            "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
-            "dev": true,
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/concat-map": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-            "dev": true
-        },
-        "node_modules/convert-source-map": {
-            "version": "1.9.0",
-            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-            "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
-            "dev": true
-        },
-        "node_modules/core-js": {
-            "version": "3.30.2",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz",
-            "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==",
-            "dev": true,
-            "hasInstallScript": true,
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/core-js"
-            }
-        },
-        "node_modules/core-js-compat": {
-            "version": "3.30.2",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz",
-            "integrity": "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==",
-            "dev": true,
-            "dependencies": {
-                "browserslist": "^4.21.5"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/core-js"
-            }
-        },
-        "node_modules/cosmiconfig": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
-            "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "@types/parse-json": "^4.0.0",
-                "import-fresh": "^3.2.1",
-                "parse-json": "^5.0.0",
-                "path-type": "^4.0.0",
-                "yaml": "^1.10.0"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/cross-spawn": {
-            "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-            "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-            "dev": true,
-            "dependencies": {
-                "path-key": "^3.1.0",
-                "shebang-command": "^2.0.0",
-                "which": "^2.0.1"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/css-functions-list": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz",
-            "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=12.22"
-            }
-        },
-        "node_modules/cssesc": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-            "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-            "dev": true,
-            "bin": {
-                "cssesc": "bin/cssesc"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/daterangepicker": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/daterangepicker/-/daterangepicker-3.1.0.tgz",
-            "integrity": "sha512-DxWXvvPq4srWLCqFugqSV+6CBt/CvQ0dnpXhQ3gl0autcIDAruG1PuGG3gC7yPRNytAD1oU1AcUOzaYhOawhTw==",
-            "dev": true,
-            "dependencies": {
-                "jquery": ">=1.10",
-                "moment": "^2.9.0"
-            }
-        },
-        "node_modules/debug": {
-            "version": "4.3.4",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-            "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-            "dev": true,
-            "dependencies": {
-                "ms": "2.1.2"
-            },
-            "engines": {
-                "node": ">=6.0"
-            },
-            "peerDependenciesMeta": {
-                "supports-color": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/decamelize": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-            "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/decamelize-keys": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
-            "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "decamelize": "^1.1.0",
-                "map-obj": "^1.0.0"
-            },
-            "engines": {
-                "node": ">=0.10.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/decamelize-keys/node_modules/map-obj": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-            "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/deep-is": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-            "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-            "dev": true
-        },
-        "node_modules/didyoumean": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
-            "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
-            "dev": true
-        },
-        "node_modules/dir-glob": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "path-type": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/dlv": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
-            "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
-            "dev": true
-        },
-        "node_modules/doctrine": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-            "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-            "dev": true,
-            "dependencies": {
-                "esutils": "^2.0.2"
-            },
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/dom-serializer": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
-            "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
-            "dev": true,
-            "dependencies": {
-                "domelementtype": "^2.0.1",
-                "entities": "^2.0.0"
-            }
-        },
-        "node_modules/dom-serializer/node_modules/domelementtype": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
-            "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/fb55"
-                }
-            ]
-        },
-        "node_modules/dom-serializer/node_modules/entities": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-            "dev": true,
-            "funding": {
-                "url": "https://github.com/fb55/entities?sponsor=1"
-            }
-        },
-        "node_modules/domelementtype": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-            "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-            "dev": true
-        },
-        "node_modules/domhandler": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-            "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
-            "dev": true,
-            "dependencies": {
-                "domelementtype": "1"
-            }
-        },
-        "node_modules/domutils": {
-            "version": "1.7.0",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
-            "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
-            "dev": true,
-            "dependencies": {
-                "dom-serializer": "0",
-                "domelementtype": "1"
-            }
-        },
-        "node_modules/electron-to-chromium": {
-            "version": "1.4.419",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.419.tgz",
-            "integrity": "sha512-jdie3RiEgygvDTyS2sgjq71B36q2cDSBfPlwzUyuOrfYTNoYWyBxxjGJV/HAu3A2hB0Y+HesvCVkVAFoCKwCSw==",
-            "dev": true
-        },
-        "node_modules/emoji-regex": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/entities": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-            "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
-            "dev": true
-        },
-        "node_modules/error-ex": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-            "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-            "dev": true,
-            "dependencies": {
-                "is-arrayish": "^0.2.1"
-            }
-        },
-        "node_modules/escalade": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-            "dev": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/escape-string-regexp": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-            "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.8.0"
-            }
-        },
-        "node_modules/eslint": {
-            "version": "8.42.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz",
-            "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==",
-            "dev": true,
-            "dependencies": {
-                "@eslint-community/eslint-utils": "^4.2.0",
-                "@eslint-community/regexpp": "^4.4.0",
-                "@eslint/eslintrc": "^2.0.3",
-                "@eslint/js": "8.42.0",
-                "@humanwhocodes/config-array": "^0.11.10",
-                "@humanwhocodes/module-importer": "^1.0.1",
-                "@nodelib/fs.walk": "^1.2.8",
-                "ajv": "^6.10.0",
-                "chalk": "^4.0.0",
-                "cross-spawn": "^7.0.2",
-                "debug": "^4.3.2",
-                "doctrine": "^3.0.0",
-                "escape-string-regexp": "^4.0.0",
-                "eslint-scope": "^7.2.0",
-                "eslint-visitor-keys": "^3.4.1",
-                "espree": "^9.5.2",
-                "esquery": "^1.4.2",
-                "esutils": "^2.0.2",
-                "fast-deep-equal": "^3.1.3",
-                "file-entry-cache": "^6.0.1",
-                "find-up": "^5.0.0",
-                "glob-parent": "^6.0.2",
-                "globals": "^13.19.0",
-                "graphemer": "^1.4.0",
-                "ignore": "^5.2.0",
-                "import-fresh": "^3.0.0",
-                "imurmurhash": "^0.1.4",
-                "is-glob": "^4.0.0",
-                "is-path-inside": "^3.0.3",
-                "js-yaml": "^4.1.0",
-                "json-stable-stringify-without-jsonify": "^1.0.1",
-                "levn": "^0.4.1",
-                "lodash.merge": "^4.6.2",
-                "minimatch": "^3.1.2",
-                "natural-compare": "^1.4.0",
-                "optionator": "^0.9.1",
-                "strip-ansi": "^6.0.1",
-                "strip-json-comments": "^3.1.0",
-                "text-table": "^0.2.0"
-            },
-            "bin": {
-                "eslint": "bin/eslint.js"
-            },
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
-        "node_modules/eslint-plugin-template": {
-            "version": "0.7.0",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-template/-/eslint-plugin-template-0.7.0.tgz",
-            "integrity": "sha512-Fo3uxnVcutIgc1a4m2FBZBQdYhtOFvnWJL9XzpOfvt8Wr40oQijrg0kM749i4r+upk5SiSHzTTMKgL4rqjTRpw==",
-            "dev": true,
-            "dependencies": {
-                "htmlparser2": "3"
-            }
-        },
-        "node_modules/eslint-scope": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
-            "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
-            "dev": true,
-            "dependencies": {
-                "esrecurse": "^4.3.0",
-                "estraverse": "^5.2.0"
-            },
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
-        "node_modules/eslint-visitor-keys": {
-            "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
-            "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
-            "dev": true,
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
-        "node_modules/eslint/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/eslint/node_modules/chalk": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-            "dev": true,
-            "dependencies": {
-                "ansi-styles": "^4.1.0",
-                "supports-color": "^7.1.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/chalk?sponsor=1"
-            }
-        },
-        "node_modules/eslint/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/eslint/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
-        },
-        "node_modules/eslint/node_modules/escape-string-regexp": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-            "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/eslint/node_modules/glob-parent": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-            "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-            "dev": true,
-            "dependencies": {
-                "is-glob": "^4.0.3"
-            },
-            "engines": {
-                "node": ">=10.13.0"
-            }
-        },
-        "node_modules/eslint/node_modules/globals": {
-            "version": "13.20.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-            "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
-            "dev": true,
-            "dependencies": {
-                "type-fest": "^0.20.2"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/eslint/node_modules/has-flag": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/eslint/node_modules/supports-color": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-            "dev": true,
-            "dependencies": {
-                "has-flag": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/eslint/node_modules/type-fest": {
-            "version": "0.20.2",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-            "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/espree": {
-            "version": "9.5.2",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
-            "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
-            "dev": true,
-            "dependencies": {
-                "acorn": "^8.8.0",
-                "acorn-jsx": "^5.3.2",
-                "eslint-visitor-keys": "^3.4.1"
-            },
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
-        "node_modules/esquery": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
-            "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
-            "dev": true,
-            "dependencies": {
-                "estraverse": "^5.1.0"
-            },
-            "engines": {
-                "node": ">=0.10"
-            }
-        },
-        "node_modules/esrecurse": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-            "dev": true,
-            "dependencies": {
-                "estraverse": "^5.2.0"
-            },
-            "engines": {
-                "node": ">=4.0"
-            }
-        },
-        "node_modules/estraverse": {
-            "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-            "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-            "dev": true,
-            "engines": {
-                "node": ">=4.0"
-            }
-        },
-        "node_modules/esutils": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/fast-deep-equal": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-            "dev": true
-        },
-        "node_modules/fast-glob": {
-            "version": "3.2.12",
-            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
-            "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
-            "dev": true,
-            "dependencies": {
-                "@nodelib/fs.stat": "^2.0.2",
-                "@nodelib/fs.walk": "^1.2.3",
-                "glob-parent": "^5.1.2",
-                "merge2": "^1.3.0",
-                "micromatch": "^4.0.4"
-            },
-            "engines": {
-                "node": ">=8.6.0"
-            }
-        },
-        "node_modules/fast-json-stable-stringify": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-            "dev": true
-        },
-        "node_modules/fast-levenshtein": {
-            "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-            "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-            "dev": true
-        },
-        "node_modules/fastest-levenshtein": {
-            "version": "1.0.16",
-            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
-            "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">= 4.9.1"
-            }
-        },
-        "node_modules/fastq": {
-            "version": "1.15.0",
-            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-            "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
-            "dev": true,
-            "dependencies": {
-                "reusify": "^1.0.4"
-            }
-        },
-        "node_modules/file-entry-cache": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-            "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-            "dev": true,
-            "dependencies": {
-                "flat-cache": "^3.0.4"
-            },
-            "engines": {
-                "node": "^10.12.0 || >=12.0.0"
-            }
-        },
-        "node_modules/fill-range": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-            "dev": true,
-            "dependencies": {
-                "to-regex-range": "^5.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/find-up": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-            "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-            "dev": true,
-            "dependencies": {
-                "locate-path": "^6.0.0",
-                "path-exists": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/flat-cache": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-            "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-            "dev": true,
-            "dependencies": {
-                "flatted": "^3.1.0",
-                "rimraf": "^3.0.2"
-            },
-            "engines": {
-                "node": "^10.12.0 || >=12.0.0"
-            }
-        },
-        "node_modules/flatted": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-            "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
-            "dev": true
-        },
-        "node_modules/focus-trap": {
-            "version": "6.9.4",
-            "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-6.9.4.tgz",
-            "integrity": "sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw==",
-            "dev": true,
-            "dependencies": {
-                "tabbable": "^5.3.3"
-            }
-        },
-        "node_modules/fs-readdir-recursive": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
-            "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
-            "dev": true
-        },
-        "node_modules/fs.realpath": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-            "dev": true
-        },
-        "node_modules/fsevents": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-            "dev": true,
-            "hasInstallScript": true,
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "engines": {
-                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-            }
-        },
-        "node_modules/function-bind": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-            "dev": true
-        },
-        "node_modules/gensync": {
-            "version": "1.0.0-beta.2",
-            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-            "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-            "dev": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/glob": {
-            "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "dev": true,
-            "dependencies": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.1.1",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
-            },
-            "engines": {
-                "node": "*"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/glob-parent": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-            "dev": true,
-            "dependencies": {
-                "is-glob": "^4.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/global-modules": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
-            "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "global-prefix": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/global-prefix": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
-            "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "ini": "^1.3.5",
-                "kind-of": "^6.0.2",
-                "which": "^1.3.1"
-            },
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/global-prefix/node_modules/which": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "isexe": "^2.0.0"
-            },
-            "bin": {
-                "which": "bin/which"
-            }
-        },
-        "node_modules/globals": {
-            "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/globby": {
-            "version": "11.1.0",
-            "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-            "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "array-union": "^2.1.0",
-                "dir-glob": "^3.0.1",
-                "fast-glob": "^3.2.9",
-                "ignore": "^5.2.0",
-                "merge2": "^1.4.1",
-                "slash": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/globby/node_modules/slash": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/globjoin": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
-            "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/graphemer": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-            "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-            "dev": true
-        },
-        "node_modules/hard-rejection": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
-            "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/has": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "dev": true,
-            "dependencies": {
-                "function-bind": "^1.1.1"
-            },
-            "engines": {
-                "node": ">= 0.4.0"
-            }
-        },
-        "node_modules/has-flag": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/hosted-git-info": {
-            "version": "2.8.9",
-            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-            "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-            "dev": true
-        },
-        "node_modules/html-tags": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
-            "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/htmlparser2": {
-            "version": "3.10.1",
-            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
-            "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
-            "dev": true,
-            "dependencies": {
-                "domelementtype": "^1.3.1",
-                "domhandler": "^2.3.0",
-                "domutils": "^1.5.1",
-                "entities": "^1.1.1",
-                "inherits": "^2.0.1",
-                "readable-stream": "^3.1.1"
-            }
-        },
-        "node_modules/htmx.org": {
-            "version": "1.9.2",
-            "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-1.9.2.tgz",
-            "integrity": "sha512-ZGbucKcalQyXdGUl+4Zt3xdRDPmNy70yNhMyDG1eDYUm/ImxmSo2rhIBDa53XitrAVhA+/CGgry+wJ1SO77wrA==",
-            "dev": true
-        },
-        "node_modules/ignore": {
-            "version": "5.2.4",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
-            "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
-            "dev": true,
-            "engines": {
-                "node": ">= 4"
-            }
-        },
-        "node_modules/ignore-by-default": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
-            "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
-            "dev": true
-        },
-        "node_modules/immutable": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
-            "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
-            "dev": true
-        },
-        "node_modules/import-fresh": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-            "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-            "dev": true,
-            "dependencies": {
-                "parent-module": "^1.0.0",
-                "resolve-from": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=6"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/import-lazy": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
-            "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/imurmurhash": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-            "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.8.19"
-            }
-        },
-        "node_modules/indent-string": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-            "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/inflight": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-            "dev": true,
-            "dependencies": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-            }
-        },
-        "node_modules/inherits": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-            "dev": true
-        },
-        "node_modules/ini": {
-            "version": "1.3.8",
-            "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-            "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/is-arrayish": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-            "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-            "dev": true
-        },
-        "node_modules/is-binary-path": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "dependencies": {
-                "binary-extensions": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/is-core-module": {
-            "version": "2.12.1",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
-            "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
-            "dev": true,
-            "dependencies": {
-                "has": "^1.0.3"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-extglob": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/is-fullwidth-code-point": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/is-glob": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-            "dev": true,
-            "dependencies": {
-                "is-extglob": "^2.1.1"
-            },
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/is-number": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.12.0"
-            }
-        },
-        "node_modules/is-path-inside": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-            "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/is-plain-obj": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-            "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/is-plain-object": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
-            "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/isexe": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-            "dev": true
-        },
-        "node_modules/jiti": {
-            "version": "1.18.2",
-            "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
-            "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
-            "dev": true,
-            "bin": {
-                "jiti": "bin/jiti.js"
-            }
-        },
-        "node_modules/jquery": {
-            "version": "3.7.0",
-            "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
-            "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==",
-            "dev": true
-        },
-        "node_modules/js-tokens": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-            "dev": true
-        },
-        "node_modules/js-yaml": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-            "dev": true,
-            "dependencies": {
-                "argparse": "^2.0.1"
-            },
-            "bin": {
-                "js-yaml": "bin/js-yaml.js"
-            }
-        },
-        "node_modules/jsesc": {
-            "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-            "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-            "dev": true,
-            "bin": {
-                "jsesc": "bin/jsesc"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/json-parse-even-better-errors": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-            "dev": true
-        },
-        "node_modules/json-schema-traverse": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-            "dev": true
-        },
-        "node_modules/json-stable-stringify-without-jsonify": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-            "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-            "dev": true
-        },
-        "node_modules/json5": {
-            "version": "2.2.3",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-            "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-            "dev": true,
-            "bin": {
-                "json5": "lib/cli.js"
-            },
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/kind-of": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-            "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/known-css-properties": {
-            "version": "0.26.0",
-            "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
-            "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/levn": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-            "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-            "dev": true,
-            "dependencies": {
-                "prelude-ls": "^1.2.1",
-                "type-check": "~0.4.0"
-            },
-            "engines": {
-                "node": ">= 0.8.0"
-            }
-        },
-        "node_modules/lilconfig": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
-            "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/lines-and-columns": {
-            "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-            "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-            "dev": true
-        },
-        "node_modules/locate-path": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-            "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-            "dev": true,
-            "dependencies": {
-                "p-locate": "^5.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/lodash.debounce": {
-            "version": "4.0.8",
-            "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
-            "dev": true
-        },
-        "node_modules/lodash.merge": {
-            "version": "4.6.2",
-            "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-            "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-            "dev": true
-        },
-        "node_modules/lodash.truncate": {
-            "version": "4.4.2",
-            "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
-            "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/lru-cache": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-            "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-            "dev": true,
-            "dependencies": {
-                "yallist": "^3.0.2"
-            }
-        },
-        "node_modules/make-dir": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-            "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-            "dev": true,
-            "dependencies": {
-                "pify": "^4.0.1",
-                "semver": "^5.6.0"
-            },
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/make-dir/node_modules/semver": {
-            "version": "5.7.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-            "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-            "dev": true,
-            "bin": {
-                "semver": "bin/semver"
-            }
-        },
-        "node_modules/map-obj": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
-            "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/mathml-tag-names": {
-            "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
-            "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
-            "dev": true,
-            "peer": true,
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/wooorm"
-            }
-        },
-        "node_modules/memorystream": {
-            "version": "0.3.1",
-            "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-            "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
-            "dev": true,
-            "engines": {
-                "node": ">= 0.10.0"
-            }
-        },
-        "node_modules/meow": {
-            "version": "9.0.0",
-            "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
-            "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "@types/minimist": "^1.2.0",
-                "camelcase-keys": "^6.2.2",
-                "decamelize": "^1.2.0",
-                "decamelize-keys": "^1.1.0",
-                "hard-rejection": "^2.1.0",
-                "minimist-options": "4.1.0",
-                "normalize-package-data": "^3.0.0",
-                "read-pkg-up": "^7.0.1",
-                "redent": "^3.0.0",
-                "trim-newlines": "^3.0.0",
-                "type-fest": "^0.18.0",
-                "yargs-parser": "^20.2.3"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/meow/node_modules/hosted-git-info": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
-            "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "lru-cache": "^6.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/meow/node_modules/lru-cache": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-            "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "yallist": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/meow/node_modules/normalize-package-data": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
-            "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "hosted-git-info": "^4.0.1",
-                "is-core-module": "^2.5.0",
-                "semver": "^7.3.4",
-                "validate-npm-package-license": "^3.0.1"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/meow/node_modules/semver": {
-            "version": "7.5.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-            "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "lru-cache": "^6.0.0"
-            },
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/meow/node_modules/type-fest": {
-            "version": "0.18.1",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-            "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/meow/node_modules/yallist": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/merge2": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-            "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-            "dev": true,
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/micromatch": {
-            "version": "4.0.5",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-            "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-            "dev": true,
-            "dependencies": {
-                "braces": "^3.0.2",
-                "picomatch": "^2.3.1"
-            },
-            "engines": {
-                "node": ">=8.6"
-            }
-        },
-        "node_modules/min-indent": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
-            "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/mini-svg-data-uri": {
-            "version": "1.4.4",
-            "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
-            "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
-            "dev": true,
-            "bin": {
-                "mini-svg-data-uri": "cli.js"
-            }
-        },
-        "node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
-        "node_modules/minimist-options": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
-            "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "arrify": "^1.0.1",
-                "is-plain-obj": "^1.1.0",
-                "kind-of": "^6.0.3"
-            },
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/moment": {
-            "version": "2.29.4",
-            "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
-            "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
-            "dev": true,
-            "engines": {
-                "node": "*"
-            }
-        },
-        "node_modules/ms": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-            "dev": true
-        },
-        "node_modules/mz": {
-            "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-            "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
-            "dev": true,
-            "dependencies": {
-                "any-promise": "^1.0.0",
-                "object-assign": "^4.0.1",
-                "thenify-all": "^1.0.0"
-            }
-        },
-        "node_modules/nanoid": {
-            "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-            "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "bin": {
-                "nanoid": "bin/nanoid.cjs"
-            },
-            "engines": {
-                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-            }
-        },
-        "node_modules/natural-compare": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-            "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-            "dev": true
-        },
-        "node_modules/node-releases": {
-            "version": "2.0.12",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
-            "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
-            "dev": true
-        },
-        "node_modules/nodemon": {
-            "version": "2.0.22",
-            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz",
-            "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==",
-            "dev": true,
-            "dependencies": {
-                "chokidar": "^3.5.2",
-                "debug": "^3.2.7",
-                "ignore-by-default": "^1.0.1",
-                "minimatch": "^3.1.2",
-                "pstree.remy": "^1.1.8",
-                "semver": "^5.7.1",
-                "simple-update-notifier": "^1.0.7",
-                "supports-color": "^5.5.0",
-                "touch": "^3.1.0",
-                "undefsafe": "^2.0.5"
-            },
-            "bin": {
-                "nodemon": "bin/nodemon.js"
-            },
-            "engines": {
-                "node": ">=8.10.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/nodemon"
-            }
-        },
-        "node_modules/nodemon/node_modules/debug": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-            "dev": true,
-            "dependencies": {
-                "ms": "^2.1.1"
-            }
-        },
-        "node_modules/nodemon/node_modules/semver": {
-            "version": "5.7.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-            "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-            "dev": true,
-            "bin": {
-                "semver": "bin/semver"
-            }
-        },
-        "node_modules/nopt": {
-            "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
-            "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
-            "dev": true,
-            "dependencies": {
-                "abbrev": "1"
-            },
-            "bin": {
-                "nopt": "bin/nopt.js"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
-        "node_modules/normalize-package-data": {
-            "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-            "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-            "dev": true,
-            "dependencies": {
-                "hosted-git-info": "^2.1.4",
-                "resolve": "^1.10.0",
-                "semver": "2 || 3 || 4 || 5",
-                "validate-npm-package-license": "^3.0.1"
-            }
-        },
-        "node_modules/normalize-package-data/node_modules/semver": {
-            "version": "5.7.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-            "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-            "dev": true,
-            "bin": {
-                "semver": "bin/semver"
-            }
-        },
-        "node_modules/normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/npm-run-all2": {
-            "version": "6.0.5",
-            "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.0.5.tgz",
-            "integrity": "sha512-YfYsybLmMLeHK00shmIrArZbbqSov/0o692j8PAJTqZGpWy2bJMnMO00Xrex8S0ziePJUZy14CueF7rVMYAg/w==",
-            "dev": true,
-            "dependencies": {
-                "ansi-styles": "^5.0.0",
-                "cross-spawn": "^7.0.3",
-                "memorystream": "^0.3.1",
-                "minimatch": "^8.0.2",
-                "pidtree": "^0.6.0",
-                "read-pkg": "^5.2.0",
-                "shell-quote": "^1.7.3"
-            },
-            "bin": {
-                "npm-run-all": "bin/npm-run-all/index.js",
-                "run-p": "bin/run-p/index.js",
-                "run-s": "bin/run-s/index.js"
-            },
-            "engines": {
-                "node": "^14.18.0 || >=16.0.0",
-                "npm": ">= 8"
-            }
-        },
-        "node_modules/npm-run-all2/node_modules/ansi-styles": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-            "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/npm-run-all2/node_modules/brace-expansion": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-            "dev": true,
-            "dependencies": {
-                "balanced-match": "^1.0.0"
-            }
-        },
-        "node_modules/npm-run-all2/node_modules/minimatch": {
-            "version": "8.0.4",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
-            "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
-            "dev": true,
-            "dependencies": {
-                "brace-expansion": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/object-assign": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-            "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/object-hash": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
-            "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
-            "dev": true,
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/once": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-            "dev": true,
-            "dependencies": {
-                "wrappy": "1"
-            }
-        },
-        "node_modules/optionator": {
-            "version": "0.9.1",
-            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-            "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-            "dev": true,
-            "dependencies": {
-                "deep-is": "^0.1.3",
-                "fast-levenshtein": "^2.0.6",
-                "levn": "^0.4.1",
-                "prelude-ls": "^1.2.1",
-                "type-check": "^0.4.0",
-                "word-wrap": "^1.2.3"
-            },
-            "engines": {
-                "node": ">= 0.8.0"
-            }
-        },
-        "node_modules/p-limit": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-            "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-            "dev": true,
-            "dependencies": {
-                "yocto-queue": "^0.1.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/p-locate": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-            "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-            "dev": true,
-            "dependencies": {
-                "p-limit": "^3.0.2"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/p-try": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/parent-module": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-            "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-            "dev": true,
-            "dependencies": {
-                "callsites": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/parse-json": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-            "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/code-frame": "^7.0.0",
-                "error-ex": "^1.3.1",
-                "json-parse-even-better-errors": "^2.3.0",
-                "lines-and-columns": "^1.1.6"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/path-exists": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/path-is-absolute": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-            "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/path-key": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-            "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/path-parse": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-            "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-            "dev": true
-        },
-        "node_modules/path-type": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/picocolors": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-            "dev": true
-        },
-        "node_modules/picomatch": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-            "dev": true,
-            "engines": {
-                "node": ">=8.6"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
-            }
-        },
-        "node_modules/pidtree": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
-            "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
-            "dev": true,
-            "bin": {
-                "pidtree": "bin/pidtree.js"
-            },
-            "engines": {
-                "node": ">=0.10"
-            }
-        },
-        "node_modules/pify": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-            "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
-            "dev": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/pirates": {
-            "version": "4.0.5",
-            "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
-            "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
-            "dev": true,
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/postcss": {
-            "version": "8.4.24",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
-            "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/postcss"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "dependencies": {
-                "nanoid": "^3.3.6",
-                "picocolors": "^1.0.0",
-                "source-map-js": "^1.0.2"
-            },
-            "engines": {
-                "node": "^10 || ^12 || >=14"
-            }
-        },
-        "node_modules/postcss-import": {
-            "version": "15.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
-            "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
-            "dev": true,
-            "dependencies": {
-                "postcss-value-parser": "^4.0.0",
-                "read-cache": "^1.0.0",
-                "resolve": "^1.1.7"
-            },
-            "engines": {
-                "node": ">=14.0.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.0.0"
-            }
-        },
-        "node_modules/postcss-js": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
-            "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
-            "dev": true,
-            "dependencies": {
-                "camelcase-css": "^2.0.1"
-            },
-            "engines": {
-                "node": "^12 || ^14 || >= 16"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/postcss/"
-            },
-            "peerDependencies": {
-                "postcss": "^8.4.21"
-            }
-        },
-        "node_modules/postcss-load-config": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
-            "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
-            "dev": true,
-            "dependencies": {
-                "lilconfig": "^2.0.5",
-                "yaml": "^2.1.1"
-            },
-            "engines": {
-                "node": ">= 14"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/postcss/"
-            },
-            "peerDependencies": {
-                "postcss": ">=8.0.9",
-                "ts-node": ">=9.0.0"
-            },
-            "peerDependenciesMeta": {
-                "postcss": {
-                    "optional": true
-                },
-                "ts-node": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/postcss-load-config/node_modules/yaml": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
-            "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
-            "dev": true,
-            "engines": {
-                "node": ">= 14"
-            }
-        },
-        "node_modules/postcss-media-query-parser": {
-            "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
-            "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
-            "dev": true
-        },
-        "node_modules/postcss-nested": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
-            "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
-            "dev": true,
-            "dependencies": {
-                "postcss-selector-parser": "^6.0.11"
-            },
-            "engines": {
-                "node": ">=12.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/postcss/"
-            },
-            "peerDependencies": {
-                "postcss": "^8.2.14"
-            }
-        },
-        "node_modules/postcss-resolve-nested-selector": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
-            "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
-            "dev": true
-        },
-        "node_modules/postcss-safe-parser": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
-            "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=12.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/postcss/"
-            },
-            "peerDependencies": {
-                "postcss": "^8.3.3"
-            }
-        },
-        "node_modules/postcss-scss": {
-            "version": "4.0.6",
-            "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz",
-            "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/postcss-scss"
-                }
-            ],
-            "engines": {
-                "node": ">=12.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.4.19"
-            }
-        },
-        "node_modules/postcss-selector-parser": {
-            "version": "6.0.13",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
-            "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
-            "dev": true,
-            "dependencies": {
-                "cssesc": "^3.0.0",
-                "util-deprecate": "^1.0.2"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/postcss-value-parser": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-            "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-            "dev": true
-        },
-        "node_modules/prelude-ls": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-            "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-            "dev": true,
-            "engines": {
-                "node": ">= 0.8.0"
-            }
-        },
-        "node_modules/pstree.remy": {
-            "version": "1.1.8",
-            "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
-            "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
-            "dev": true
-        },
-        "node_modules/punycode": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-            "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-            "dev": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/queue-microtask": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-            "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/feross"
-                },
-                {
-                    "type": "patreon",
-                    "url": "https://www.patreon.com/feross"
-                },
-                {
-                    "type": "consulting",
-                    "url": "https://feross.org/support"
-                }
-            ]
-        },
-        "node_modules/quick-lru": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
-            "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/read-cache": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-            "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
-            "dev": true,
-            "dependencies": {
-                "pify": "^2.3.0"
-            }
-        },
-        "node_modules/read-cache/node_modules/pify": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-            "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/read-pkg": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-            "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-            "dev": true,
-            "dependencies": {
-                "@types/normalize-package-data": "^2.4.0",
-                "normalize-package-data": "^2.5.0",
-                "parse-json": "^5.0.0",
-                "type-fest": "^0.6.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/read-pkg-up": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-            "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "find-up": "^4.1.0",
-                "read-pkg": "^5.2.0",
-                "type-fest": "^0.8.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/read-pkg-up/node_modules/find-up": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-            "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "locate-path": "^5.0.0",
-                "path-exists": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/read-pkg-up/node_modules/locate-path": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-            "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "p-locate": "^4.1.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/read-pkg-up/node_modules/p-limit": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-            "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "p-try": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=6"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/read-pkg-up/node_modules/p-locate": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-            "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "p-limit": "^2.2.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/read-pkg-up/node_modules/type-fest": {
-            "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-            "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/readable-stream": {
-            "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-            "dev": true,
-            "dependencies": {
-                "inherits": "^2.0.3",
-                "string_decoder": "^1.1.1",
-                "util-deprecate": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-            "dev": true,
-            "dependencies": {
-                "picomatch": "^2.2.1"
-            },
-            "engines": {
-                "node": ">=8.10.0"
-            }
-        },
-        "node_modules/redent": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
-            "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "indent-string": "^4.0.0",
-                "strip-indent": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/regenerate": {
-            "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
-            "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
-            "dev": true
-        },
-        "node_modules/regenerate-unicode-properties": {
-            "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
-            "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
-            "dev": true,
-            "dependencies": {
-                "regenerate": "^1.4.2"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/regenerator-runtime": {
-            "version": "0.13.11",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-            "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
-            "dev": true
-        },
-        "node_modules/regenerator-transform": {
-            "version": "0.15.1",
-            "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
-            "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
-            "dev": true,
-            "dependencies": {
-                "@babel/runtime": "^7.8.4"
-            }
-        },
-        "node_modules/regexpu-core": {
-            "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-            "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
-            "dev": true,
-            "dependencies": {
-                "@babel/regjsgen": "^0.8.0",
-                "regenerate": "^1.4.2",
-                "regenerate-unicode-properties": "^10.1.0",
-                "regjsparser": "^0.9.1",
-                "unicode-match-property-ecmascript": "^2.0.0",
-                "unicode-match-property-value-ecmascript": "^2.1.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/regjsparser": {
-            "version": "0.9.1",
-            "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-            "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
-            "dev": true,
-            "dependencies": {
-                "jsesc": "~0.5.0"
-            },
-            "bin": {
-                "regjsparser": "bin/parser"
-            }
-        },
-        "node_modules/regjsparser/node_modules/jsesc": {
-            "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-            "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-            "dev": true,
-            "bin": {
-                "jsesc": "bin/jsesc"
-            }
-        },
-        "node_modules/require-from-string": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-            "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/resolve": {
-            "version": "1.22.2",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
-            "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
-            "dev": true,
-            "dependencies": {
-                "is-core-module": "^2.11.0",
-                "path-parse": "^1.0.7",
-                "supports-preserve-symlinks-flag": "^1.0.0"
-            },
-            "bin": {
-                "resolve": "bin/resolve"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/resolve-from": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-            "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/reusify": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-            "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-            "dev": true,
-            "engines": {
-                "iojs": ">=1.0.0",
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/rimraf": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "dev": true,
-            "dependencies": {
-                "glob": "^7.1.3"
-            },
-            "bin": {
-                "rimraf": "bin.js"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/run-parallel": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-            "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/feross"
-                },
-                {
-                    "type": "patreon",
-                    "url": "https://www.patreon.com/feross"
-                },
-                {
-                    "type": "consulting",
-                    "url": "https://feross.org/support"
-                }
-            ],
-            "dependencies": {
-                "queue-microtask": "^1.2.2"
-            }
-        },
-        "node_modules/safe-buffer": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-            "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/feross"
-                },
-                {
-                    "type": "patreon",
-                    "url": "https://www.patreon.com/feross"
-                },
-                {
-                    "type": "consulting",
-                    "url": "https://feross.org/support"
-                }
-            ]
-        },
-        "node_modules/sass": {
-            "version": "1.62.1",
-            "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz",
-            "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==",
-            "dev": true,
-            "dependencies": {
-                "chokidar": ">=3.0.0 <4.0.0",
-                "immutable": "^4.0.0",
-                "source-map-js": ">=0.6.2 <2.0.0"
-            },
-            "bin": {
-                "sass": "sass.js"
-            },
-            "engines": {
-                "node": ">=14.0.0"
-            }
-        },
-        "node_modules/semver": {
-            "version": "6.3.0",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-            "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-            "dev": true,
-            "bin": {
-                "semver": "bin/semver.js"
-            }
-        },
-        "node_modules/shebang-command": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-            "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-            "dev": true,
-            "dependencies": {
-                "shebang-regex": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/shebang-regex": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-            "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/shell-quote": {
-            "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
-            "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
-            "dev": true,
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/signal-exit": {
-            "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/simple-update-notifier": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
-            "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
-            "dev": true,
-            "dependencies": {
-                "semver": "~7.0.0"
-            },
-            "engines": {
-                "node": ">=8.10.0"
-            }
-        },
-        "node_modules/simple-update-notifier/node_modules/semver": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-            "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
-            "dev": true,
-            "bin": {
-                "semver": "bin/semver.js"
-            }
-        },
-        "node_modules/slash": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-            "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
-            "dev": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/slice-ansi": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
-            "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "ansi-styles": "^4.0.0",
-                "astral-regex": "^2.0.0",
-                "is-fullwidth-code-point": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/slice-ansi?sponsor=1"
-            }
-        },
-        "node_modules/slice-ansi/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/slice-ansi/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/slice-ansi/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/source-map-js": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/spdx-correct": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-            "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-            "dev": true,
-            "dependencies": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/spdx-exceptions": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-            "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
-            "dev": true
-        },
-        "node_modules/spdx-expression-parse": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-            "dev": true,
-            "dependencies": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "node_modules/spdx-license-ids": {
-            "version": "3.0.13",
-            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-            "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
-            "dev": true
-        },
-        "node_modules/string_decoder": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-            "dev": true,
-            "dependencies": {
-                "safe-buffer": "~5.2.0"
-            }
-        },
-        "node_modules/string-width": {
-            "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/strip-ansi": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-            "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-            "dev": true,
-            "dependencies": {
-                "ansi-regex": "^5.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/strip-indent": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
-            "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "min-indent": "^1.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/strip-json-comments": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-            "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
-        "node_modules/style-search": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-            "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/stylelint": {
-            "version": "14.16.1",
-            "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
-            "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "@csstools/selector-specificity": "^2.0.2",
-                "balanced-match": "^2.0.0",
-                "colord": "^2.9.3",
-                "cosmiconfig": "^7.1.0",
-                "css-functions-list": "^3.1.0",
-                "debug": "^4.3.4",
-                "fast-glob": "^3.2.12",
-                "fastest-levenshtein": "^1.0.16",
-                "file-entry-cache": "^6.0.1",
-                "global-modules": "^2.0.0",
-                "globby": "^11.1.0",
-                "globjoin": "^0.1.4",
-                "html-tags": "^3.2.0",
-                "ignore": "^5.2.1",
-                "import-lazy": "^4.0.0",
-                "imurmurhash": "^0.1.4",
-                "is-plain-object": "^5.0.0",
-                "known-css-properties": "^0.26.0",
-                "mathml-tag-names": "^2.1.3",
-                "meow": "^9.0.0",
-                "micromatch": "^4.0.5",
-                "normalize-path": "^3.0.0",
-                "picocolors": "^1.0.0",
-                "postcss": "^8.4.19",
-                "postcss-media-query-parser": "^0.2.3",
-                "postcss-resolve-nested-selector": "^0.1.1",
-                "postcss-safe-parser": "^6.0.0",
-                "postcss-selector-parser": "^6.0.11",
-                "postcss-value-parser": "^4.2.0",
-                "resolve-from": "^5.0.0",
-                "string-width": "^4.2.3",
-                "strip-ansi": "^6.0.1",
-                "style-search": "^0.1.0",
-                "supports-hyperlinks": "^2.3.0",
-                "svg-tags": "^1.0.0",
-                "table": "^6.8.1",
-                "v8-compile-cache": "^2.3.0",
-                "write-file-atomic": "^4.0.2"
-            },
-            "bin": {
-                "stylelint": "bin/stylelint.js"
-            },
-            "engines": {
-                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/stylelint"
-            }
-        },
-        "node_modules/stylelint-config-recommended": {
-            "version": "9.0.0",
-            "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz",
-            "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==",
-            "dev": true,
-            "peerDependencies": {
-                "stylelint": "^14.10.0"
-            }
-        },
-        "node_modules/stylelint-config-recommended-scss": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-8.0.0.tgz",
-            "integrity": "sha512-BxjxEzRaZoQb7Iinc3p92GS6zRdRAkIuEu2ZFLTxJK2e1AIcCb5B5MXY9KOXdGTnYFZ+KKx6R4Fv9zU6CtMYPQ==",
-            "dev": true,
-            "dependencies": {
-                "postcss-scss": "^4.0.2",
-                "stylelint-config-recommended": "^9.0.0",
-                "stylelint-scss": "^4.0.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.3.3",
-                "stylelint": "^14.10.0"
-            },
-            "peerDependenciesMeta": {
-                "postcss": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/stylelint-config-standard": {
-            "version": "29.0.0",
-            "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-29.0.0.tgz",
-            "integrity": "sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==",
-            "dev": true,
-            "dependencies": {
-                "stylelint-config-recommended": "^9.0.0"
-            },
-            "peerDependencies": {
-                "stylelint": "^14.14.0"
-            }
-        },
-        "node_modules/stylelint-config-standard-scss": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-6.1.0.tgz",
-            "integrity": "sha512-iZ2B5kQT2G3rUzx+437cEpdcnFOQkwnwqXuY8Z0QUwIHQVE8mnYChGAquyKFUKZRZ0pRnrciARlPaR1RBtPb0Q==",
-            "dev": true,
-            "dependencies": {
-                "stylelint-config-recommended-scss": "^8.0.0",
-                "stylelint-config-standard": "^29.0.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.3.3",
-                "stylelint": "^14.14.0"
-            },
-            "peerDependenciesMeta": {
-                "postcss": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/stylelint-scss": {
-            "version": "4.7.0",
-            "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz",
-            "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==",
-            "dev": true,
-            "dependencies": {
-                "postcss-media-query-parser": "^0.2.3",
-                "postcss-resolve-nested-selector": "^0.1.1",
-                "postcss-selector-parser": "^6.0.11",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "peerDependencies": {
-                "stylelint": "^14.5.1 || ^15.0.0"
-            }
-        },
-        "node_modules/stylelint/node_modules/balanced-match": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-            "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/stylelint/node_modules/resolve-from": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-            "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/sucrase": {
-            "version": "3.32.0",
-            "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
-            "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
-            "dev": true,
-            "dependencies": {
-                "@jridgewell/gen-mapping": "^0.3.2",
-                "commander": "^4.0.0",
-                "glob": "7.1.6",
-                "lines-and-columns": "^1.1.6",
-                "mz": "^2.7.0",
-                "pirates": "^4.0.1",
-                "ts-interface-checker": "^0.1.9"
-            },
-            "bin": {
-                "sucrase": "bin/sucrase",
-                "sucrase-node": "bin/sucrase-node"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/sucrase/node_modules/glob": {
-            "version": "7.1.6",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-            "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-            "dev": true,
-            "dependencies": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.0.4",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
-            },
-            "engines": {
-                "node": "*"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
-        "node_modules/supports-color": {
-            "version": "5.5.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-            "dev": true,
-            "dependencies": {
-                "has-flag": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/supports-hyperlinks": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
-            "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "has-flag": "^4.0.0",
-                "supports-color": "^7.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/supports-hyperlinks/node_modules/has-flag": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/supports-hyperlinks/node_modules/supports-color": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "has-flag": "^4.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/supports-preserve-symlinks-flag": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-            "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-            "dev": true,
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/svg-tags": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
-            "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/tabbable": {
-            "version": "5.3.3",
-            "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz",
-            "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==",
-            "dev": true
-        },
-        "node_modules/table": {
-            "version": "6.8.1",
-            "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
-            "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "ajv": "^8.0.1",
-                "lodash.truncate": "^4.4.2",
-                "slice-ansi": "^4.0.0",
-                "string-width": "^4.2.3",
-                "strip-ansi": "^6.0.1"
-            },
-            "engines": {
-                "node": ">=10.0.0"
-            }
-        },
-        "node_modules/table/node_modules/ajv": {
-            "version": "8.12.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-            "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "fast-deep-equal": "^3.1.1",
-                "json-schema-traverse": "^1.0.0",
-                "require-from-string": "^2.0.2",
-                "uri-js": "^4.2.2"
-            },
-            "funding": {
-                "type": "github",
-                "url": "https://github.com/sponsors/epoberezkin"
-            }
-        },
-        "node_modules/table/node_modules/json-schema-traverse": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/tailwindcss": {
-            "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
-            "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
-            "dev": true,
-            "dependencies": {
-                "@alloc/quick-lru": "^5.2.0",
-                "arg": "^5.0.2",
-                "chokidar": "^3.5.3",
-                "didyoumean": "^1.2.2",
-                "dlv": "^1.1.3",
-                "fast-glob": "^3.2.12",
-                "glob-parent": "^6.0.2",
-                "is-glob": "^4.0.3",
-                "jiti": "^1.18.2",
-                "lilconfig": "^2.1.0",
-                "micromatch": "^4.0.5",
-                "normalize-path": "^3.0.0",
-                "object-hash": "^3.0.0",
-                "picocolors": "^1.0.0",
-                "postcss": "^8.4.23",
-                "postcss-import": "^15.1.0",
-                "postcss-js": "^4.0.1",
-                "postcss-load-config": "^4.0.1",
-                "postcss-nested": "^6.0.1",
-                "postcss-selector-parser": "^6.0.11",
-                "postcss-value-parser": "^4.2.0",
-                "resolve": "^1.22.2",
-                "sucrase": "^3.32.0"
-            },
-            "bin": {
-                "tailwind": "lib/cli.js",
-                "tailwindcss": "lib/cli.js"
-            },
-            "engines": {
-                "node": ">=14.0.0"
-            }
-        },
-        "node_modules/tailwindcss/node_modules/glob-parent": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-            "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-            "dev": true,
-            "dependencies": {
-                "is-glob": "^4.0.3"
-            },
-            "engines": {
-                "node": ">=10.13.0"
-            }
-        },
-        "node_modules/text-table": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-            "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-            "dev": true
-        },
-        "node_modules/thenify": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-            "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-            "dev": true,
-            "dependencies": {
-                "any-promise": "^1.0.0"
-            }
-        },
-        "node_modules/thenify-all": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-            "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
-            "dev": true,
-            "dependencies": {
-                "thenify": ">= 3.1.0 < 4"
-            },
-            "engines": {
-                "node": ">=0.8"
-            }
-        },
-        "node_modules/to-fast-properties": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-            "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/to-regex-range": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-            "dev": true,
-            "dependencies": {
-                "is-number": "^7.0.0"
-            },
-            "engines": {
-                "node": ">=8.0"
-            }
-        },
-        "node_modules/touch": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
-            "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
-            "dev": true,
-            "dependencies": {
-                "nopt": "~1.0.10"
-            },
-            "bin": {
-                "nodetouch": "bin/nodetouch.js"
-            }
-        },
-        "node_modules/trim-newlines": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
-            "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/ts-interface-checker": {
-            "version": "0.1.13",
-            "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
-            "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
-            "dev": true
-        },
-        "node_modules/type-check": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-            "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-            "dev": true,
-            "dependencies": {
-                "prelude-ls": "^1.2.1"
-            },
-            "engines": {
-                "node": ">= 0.8.0"
-            }
-        },
-        "node_modules/type-fest": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-            "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/undefsafe": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
-            "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
-            "dev": true
-        },
-        "node_modules/unicode-canonical-property-names-ecmascript": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
-            "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/unicode-match-property-ecmascript": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
-            "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
-            "dev": true,
-            "dependencies": {
-                "unicode-canonical-property-names-ecmascript": "^2.0.0",
-                "unicode-property-aliases-ecmascript": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/unicode-match-property-value-ecmascript": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
-            "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/unicode-property-aliases-ecmascript": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
-            "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
-            "dev": true,
-            "engines": {
-                "node": ">=4"
-            }
-        },
-        "node_modules/update-browserslist-db": {
-            "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
-            "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
-            "dev": true,
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/browserslist"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/browserslist"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "dependencies": {
-                "escalade": "^3.1.1",
-                "picocolors": "^1.0.0"
-            },
-            "bin": {
-                "update-browserslist-db": "cli.js"
-            },
-            "peerDependencies": {
-                "browserslist": ">= 4.21.0"
-            }
-        },
-        "node_modules/uri-js": {
-            "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-            "dev": true,
-            "dependencies": {
-                "punycode": "^2.1.0"
-            }
-        },
-        "node_modules/util-deprecate": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-            "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-            "dev": true
-        },
-        "node_modules/v8-compile-cache": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-            "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-            "dev": true,
-            "peer": true
-        },
-        "node_modules/validate-npm-package-license": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-            "dev": true,
-            "dependencies": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
-            }
-        },
-        "node_modules/which": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-            "dev": true,
-            "dependencies": {
-                "isexe": "^2.0.0"
-            },
-            "bin": {
-                "node-which": "bin/node-which"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/word-wrap": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-            "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/wrappy": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-            "dev": true
-        },
-        "node_modules/write-file-atomic": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
-            "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "imurmurhash": "^0.1.4",
-                "signal-exit": "^3.0.7"
-            },
-            "engines": {
-                "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
-            }
-        },
-        "node_modules/yallist": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-            "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-            "dev": true
-        },
-        "node_modules/yaml": {
-            "version": "1.10.2",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-            "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/yargs-parser": {
-            "version": "20.2.9",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-            "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/yocto-queue": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-            "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-            "dev": true,
-            "engines": {
-                "node": ">=10"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
+  "name": "Hypha",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "Hypha",
+      "version": "1.0.0",
+      "license": "GPL-2.0",
+      "devDependencies": {
+        "@alpinejs/focus": "^3.12.3",
+        "@babel/cli": "^7.22.6",
+        "@babel/core": "^7.22.8",
+        "@babel/preset-env": "^7.22.7",
+        "@tailwindcss/forms": "^0.5.3",
+        "@tailwindcss/typography": "^0.5.9",
+        "alpinejs": "^3.12.3",
+        "core-js": "^3.31.1",
+        "daterangepicker": "^3.1.0",
+        "eslint": "^8.44.0",
+        "eslint-config-prettier": "^8.8.0",
+        "eslint-plugin-template": "^0.7.0",
+        "htmx.org": "^1.9.2",
+        "nodemon": "^3.0.1",
+        "npm-run-all2": "^6.0.6",
+        "prettier": "3.0.0",
+        "sass": "^1.63.6",
+        "stylelint": "^15.10.2",
+        "stylelint-config-standard": "^34.0.0",
+        "stylelint-config-standard-scss": "^10.0.0",
+        "tailwindcss": "^3.3.2"
+      },
+      "engines": {
+        "node": "18.x"
+      }
+    },
+    "node_modules/@aashutoshrathi/word-wrap": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/@alloc/quick-lru": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+      "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@alpinejs/focus": {
+      "version": "3.12.3",
+      "resolved": "https://registry.npmjs.org/@alpinejs/focus/-/focus-3.12.3.tgz",
+      "integrity": "sha512-kIQwvvUPCfCO2REpceQ3uHNdN3oqDLvvvQNaHVgHoYqk+RrL3EcR6uOHyvHJUgOhaIjN5Uc3b7BaRNrKZbDGew==",
+      "dev": true,
+      "dependencies": {
+        "focus-trap": "^6.6.1"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/cli": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.6.tgz",
+      "integrity": "sha512-Be3/RfEDmkMRGT1+ru5nTkfcvWz5jDOYg1V9rXqTz2u9Qt96O1ryboGvxVBp7wOnYWDB8DNHIWb6DThrpudfOw==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "commander": "^4.0.1",
+        "convert-source-map": "^1.1.0",
+        "fs-readdir-recursive": "^1.1.0",
+        "glob": "^7.2.0",
+        "make-dir": "^2.1.0",
+        "slash": "^2.0.0"
+      },
+      "bin": {
+        "babel": "bin/babel.js",
+        "babel-external-helpers": "bin/babel-external-helpers.js"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "optionalDependencies": {
+        "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
+        "chokidar": "^3.4.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+      "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/highlight": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
+      "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.22.8",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz",
+      "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==",
+      "dev": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.22.5",
+        "@babel/generator": "^7.22.7",
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-module-transforms": "^7.22.5",
+        "@babel/helpers": "^7.22.6",
+        "@babel/parser": "^7.22.7",
+        "@babel/template": "^7.22.5",
+        "@babel/traverse": "^7.22.8",
+        "@babel/types": "^7.22.5",
+        "@nicolo-ribaudo/semver-v6": "^6.3.3",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.22.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz",
+      "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
+      "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
+      "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.22.6",
+        "@babel/helper-validator-option": "^7.22.5",
+        "@nicolo-ribaudo/semver-v6": "^6.3.3",
+        "browserslist": "^4.21.9",
+        "lru-cache": "^5.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz",
+      "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-member-expression-to-functions": "^7.22.5",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@nicolo-ribaudo/semver-v6": "^6.3.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz",
+      "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@nicolo-ribaudo/semver-v6": "^6.3.3",
+        "regexpu-core": "^5.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz",
+      "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0-0"
+      }
+    },
+    "node_modules/@babel/helper-environment-visitor": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
+      "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-function-name": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+      "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/template": "^7.22.5",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-hoist-variables": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz",
+      "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+      "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
+      "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-module-imports": "^7.22.5",
+        "@babel/helper-simple-access": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.5",
+        "@babel/template": "^7.22.5",
+        "@babel/traverse": "^7.22.5",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+      "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-remap-async-to-generator": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz",
+      "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-wrap-function": "^7.22.5",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz",
+      "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-member-expression-to-functions": "^7.22.5",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/template": "^7.22.5",
+        "@babel/traverse": "^7.22.5",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-simple-access": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+      "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
+      "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
+      "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz",
+      "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/template": "^7.22.5",
+        "@babel/traverse": "^7.22.5",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
+      "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/template": "^7.22.5",
+        "@babel/traverse": "^7.22.6",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
+      "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.22.5",
+        "chalk": "^2.0.0",
+        "js-tokens": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.22.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
+      "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
+      "dev": true,
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
+      "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
+      "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-transform-optional-chaining": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.13.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.21.0-placeholder-for-preset-env.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+      "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+      "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-async-generators": {
+      "version": "7.8.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-class-properties": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-class-static-block": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+      "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-dynamic-import": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-assertions": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
+      "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-attributes": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
+      "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-json-strings": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-optional-chaining": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-private-property-in-object": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+      "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-top-level-await": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-arrow-functions": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
+      "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-generator-functions": {
+      "version": "7.22.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz",
+      "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-remap-async-to-generator": "^7.22.5",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-to-generator": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
+      "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-remap-async-to-generator": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
+      "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoping": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz",
+      "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-properties": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
+      "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-static-block": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz",
+      "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-classes": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
+      "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-computed-properties": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
+      "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/template": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-destructuring": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz",
+      "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dotall-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
+      "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-duplicate-keys": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
+      "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dynamic-import": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz",
+      "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
+      "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-export-namespace-from": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz",
+      "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-for-of": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
+      "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-function-name": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
+      "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-json-strings": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz",
+      "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-literals": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
+      "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz",
+      "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-member-expression-literals": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
+      "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-amd": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
+      "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-commonjs": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz",
+      "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-simple-access": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-systemjs": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz",
+      "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-module-transforms": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-umd": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
+      "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+      "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-new-target": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
+      "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz",
+      "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-numeric-separator": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz",
+      "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-rest-spread": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz",
+      "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.22.5",
+        "@babel/helper-compilation-targets": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-super": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
+      "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-catch-binding": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz",
+      "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-chaining": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz",
+      "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-parameters": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
+      "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-methods": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
+      "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-property-in-object": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz",
+      "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-create-class-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-property-literals": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
+      "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regenerator": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz",
+      "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "regenerator-transform": "^0.15.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-reserved-words": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
+      "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-shorthand-properties": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
+      "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-spread": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
+      "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-sticky-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
+      "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-template-literals": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
+      "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typeof-symbol": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
+      "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-escapes": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz",
+      "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-property-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
+      "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
+      "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
+      "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/preset-env": {
+      "version": "7.22.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz",
+      "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.22.6",
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-option": "^7.22.5",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-import-assertions": "^7.22.5",
+        "@babel/plugin-syntax-import-attributes": "^7.22.5",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+        "@babel/plugin-transform-arrow-functions": "^7.22.5",
+        "@babel/plugin-transform-async-generator-functions": "^7.22.7",
+        "@babel/plugin-transform-async-to-generator": "^7.22.5",
+        "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
+        "@babel/plugin-transform-block-scoping": "^7.22.5",
+        "@babel/plugin-transform-class-properties": "^7.22.5",
+        "@babel/plugin-transform-class-static-block": "^7.22.5",
+        "@babel/plugin-transform-classes": "^7.22.6",
+        "@babel/plugin-transform-computed-properties": "^7.22.5",
+        "@babel/plugin-transform-destructuring": "^7.22.5",
+        "@babel/plugin-transform-dotall-regex": "^7.22.5",
+        "@babel/plugin-transform-duplicate-keys": "^7.22.5",
+        "@babel/plugin-transform-dynamic-import": "^7.22.5",
+        "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
+        "@babel/plugin-transform-export-namespace-from": "^7.22.5",
+        "@babel/plugin-transform-for-of": "^7.22.5",
+        "@babel/plugin-transform-function-name": "^7.22.5",
+        "@babel/plugin-transform-json-strings": "^7.22.5",
+        "@babel/plugin-transform-literals": "^7.22.5",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+        "@babel/plugin-transform-member-expression-literals": "^7.22.5",
+        "@babel/plugin-transform-modules-amd": "^7.22.5",
+        "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+        "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+        "@babel/plugin-transform-modules-umd": "^7.22.5",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+        "@babel/plugin-transform-new-target": "^7.22.5",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
+        "@babel/plugin-transform-numeric-separator": "^7.22.5",
+        "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+        "@babel/plugin-transform-object-super": "^7.22.5",
+        "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
+        "@babel/plugin-transform-optional-chaining": "^7.22.6",
+        "@babel/plugin-transform-parameters": "^7.22.5",
+        "@babel/plugin-transform-private-methods": "^7.22.5",
+        "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+        "@babel/plugin-transform-property-literals": "^7.22.5",
+        "@babel/plugin-transform-regenerator": "^7.22.5",
+        "@babel/plugin-transform-reserved-words": "^7.22.5",
+        "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+        "@babel/plugin-transform-spread": "^7.22.5",
+        "@babel/plugin-transform-sticky-regex": "^7.22.5",
+        "@babel/plugin-transform-template-literals": "^7.22.5",
+        "@babel/plugin-transform-typeof-symbol": "^7.22.5",
+        "@babel/plugin-transform-unicode-escapes": "^7.22.5",
+        "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
+        "@babel/plugin-transform-unicode-regex": "^7.22.5",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+        "@babel/preset-modules": "^0.1.5",
+        "@babel/types": "^7.22.5",
+        "@nicolo-ribaudo/semver-v6": "^6.3.3",
+        "babel-plugin-polyfill-corejs2": "^0.4.4",
+        "babel-plugin-polyfill-corejs3": "^0.8.2",
+        "babel-plugin-polyfill-regenerator": "^0.5.1",
+        "core-js-compat": "^3.31.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/preset-modules": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+      "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz",
+      "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==",
+      "dev": true,
+      "dependencies": {
+        "regenerator-runtime": "^0.13.11"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
+      "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.22.5",
+        "@babel/parser": "^7.22.5",
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.22.8",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz",
+      "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.22.5",
+        "@babel/generator": "^7.22.7",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/parser": "^7.22.7",
+        "@babel/types": "^7.22.5",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
+      "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.5",
+        "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@csstools/css-parser-algorithms": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz",
+      "integrity": "sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "@csstools/css-tokenizer": "^2.1.1"
+      }
+    },
+    "node_modules/@csstools/css-tokenizer": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz",
+      "integrity": "sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==",
+      "dev": true,
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/csstools"
+      }
+    },
+    "node_modules/@csstools/media-query-list-parser": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz",
+      "integrity": "sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "@csstools/css-parser-algorithms": "^2.3.0",
+        "@csstools/css-tokenizer": "^2.1.1"
+      }
+    },
+    "node_modules/@csstools/selector-specificity": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
+      "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "engines": {
+        "node": "^14 || ^16 || >=18"
+      },
+      "peerDependencies": {
+        "postcss-selector-parser": "^6.0.13"
+      }
+    },
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+      "dev": true,
+      "dependencies": {
+        "eslint-visitor-keys": "^3.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+      }
+    },
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+      "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/eslintrc": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
+      "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
+      "dev": true,
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "13.20.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+      "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/js": {
+      "version": "8.44.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
+      "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+      "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+      "dev": true,
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^1.2.1",
+        "debug": "^4.1.1",
+        "minimatch": "^3.0.5"
+      },
+      "engines": {
+        "node": ">=10.10.0"
+      }
+    },
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+      "dev": true
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+      "dev": true
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.18",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+      "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
+      }
+    },
+    "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.14",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+      "dev": true
+    },
+    "node_modules/@nicolo-ribaudo/chokidar-2": {
+      "version": "2.1.8-no-fsevents.3",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+      "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
+      "dev": true,
+      "optional": true
+    },
+    "node_modules/@nicolo-ribaudo/semver-v6": {
+      "version": "6.3.3",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+      "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@tailwindcss/forms": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+      "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
+      "dev": true,
+      "dependencies": {
+        "mini-svg-data-uri": "^1.2.3"
+      },
+      "peerDependencies": {
+        "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
+      }
+    },
+    "node_modules/@tailwindcss/typography": {
+      "version": "0.5.9",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz",
+      "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
+      "dev": true,
+      "dependencies": {
+        "lodash.castarray": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.merge": "^4.6.2",
+        "postcss-selector-parser": "6.0.10"
+      },
+      "peerDependencies": {
+        "tailwindcss": ">=3.0.0 || insiders"
+      }
+    },
+    "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "dev": true,
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@types/minimist": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+      "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+      "dev": true
+    },
+    "node_modules/@types/normalize-package-data": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+      "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+      "dev": true
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
+      "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
+      "dev": true,
+      "dependencies": {
+        "@vue/shared": "3.1.5"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
+      "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
+      "dev": true
+    },
+    "node_modules/abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "node_modules/acorn": {
+      "version": "8.10.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+      "dev": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-jsx": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+      "dev": true,
+      "peerDependencies": {
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/alpinejs": {
+      "version": "3.12.3",
+      "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.12.3.tgz",
+      "integrity": "sha512-fLz2dfYQ3xCk7Ip8LiIpV2W+9brUyex2TAE7Z0BCvZdUDklJE+n+a8gCgLWzfZ0GzZNZu7HUP8Z0z6Xbm6fsSA==",
+      "dev": true,
+      "dependencies": {
+        "@vue/reactivity": "~3.1.1"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+      "dev": true
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "dev": true,
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/arg": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+      "dev": true
+    },
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true
+    },
+    "node_modules/array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/astral-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs2": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz",
+      "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.22.6",
+        "@babel/helper-define-polyfill-provider": "^0.4.1",
+        "@nicolo-ribaudo/semver-v6": "^6.3.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs3": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz",
+      "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.4.1",
+        "core-js-compat": "^3.31.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-regenerator": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz",
+      "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.4.1"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.21.9",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
+      "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001503",
+        "electron-to-chromium": "^1.4.431",
+        "node-releases": "^2.0.12",
+        "update-browserslist-db": "^1.0.11"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/camelcase-keys": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
+      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+      "dev": true,
+      "dependencies": {
+        "camelcase": "^6.3.0",
+        "map-obj": "^4.1.0",
+        "quick-lru": "^5.1.1",
+        "type-fest": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/camelcase-keys/node_modules/type-fest": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001515",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz",
+      "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ]
+    },
+    "node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ],
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+      "dev": true
+    },
+    "node_modules/colord": {
+      "version": "2.9.3",
+      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+      "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+      "dev": true
+    },
+    "node_modules/commander": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "dev": true
+    },
+    "node_modules/convert-source-map": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "dev": true
+    },
+    "node_modules/core-js": {
+      "version": "3.31.1",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz",
+      "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/core-js-compat": {
+      "version": "3.31.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz",
+      "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==",
+      "dev": true,
+      "dependencies": {
+        "browserslist": "^4.21.9"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/cosmiconfig": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+      "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+      "dev": true,
+      "dependencies": {
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/d-fischer"
+      }
+    },
+    "node_modules/cosmiconfig/node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "dev": true
+    },
+    "node_modules/cosmiconfig/node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true
+    },
+    "node_modules/cosmiconfig/node_modules/parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/css-functions-list": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz",
+      "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.22"
+      }
+    },
+    "node_modules/css-tree": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+      "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+      "dev": true,
+      "dependencies": {
+        "mdn-data": "2.0.30",
+        "source-map-js": "^1.0.1"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+      }
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true,
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/daterangepicker": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/daterangepicker/-/daterangepicker-3.1.0.tgz",
+      "integrity": "sha512-DxWXvvPq4srWLCqFugqSV+6CBt/CvQ0dnpXhQ3gl0autcIDAruG1PuGG3gC7yPRNytAD1oU1AcUOzaYhOawhTw==",
+      "dev": true,
+      "dependencies": {
+        "jquery": ">=1.10",
+        "moment": "^2.9.0"
+      }
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/decamelize": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
+      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/decamelize-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+      "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+      "dev": true,
+      "dependencies": {
+        "decamelize": "^1.1.0",
+        "map-obj": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/decamelize-keys/node_modules/decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/decamelize-keys/node_modules/map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+      "dev": true
+    },
+    "node_modules/didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "dev": true
+    },
+    "node_modules/dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "dependencies": {
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "dev": true
+    },
+    "node_modules/doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dev": true,
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/dom-serializer": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+      "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+      "dev": true,
+      "dependencies": {
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      }
+    },
+    "node_modules/dom-serializer/node_modules/domelementtype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ]
+    },
+    "node_modules/dom-serializer/node_modules/entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+      "dev": true
+    },
+    "node_modules/domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "dependencies": {
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+      "dev": true,
+      "dependencies": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.4.455",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.455.tgz",
+      "integrity": "sha512-8tgdX0Odl24LtmLwxotpJCVjIndN559AvaOtd67u+2mo+IDsgsTF580NB+uuDCqsHw8yFg53l5+imFV9Fw3cbA==",
+      "dev": true
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
+    "node_modules/entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+      "dev": true
+    },
+    "node_modules/error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "dependencies": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/eslint": {
+      "version": "8.44.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz",
+      "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.4.0",
+        "@eslint/eslintrc": "^2.1.0",
+        "@eslint/js": "8.44.0",
+        "@humanwhocodes/config-array": "^0.11.10",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "ajv": "^6.10.0",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.0",
+        "eslint-visitor-keys": "^3.4.1",
+        "espree": "^9.6.0",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "strip-json-comments": "^3.1.0",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-config-prettier": {
+      "version": "8.8.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
+      "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
+      "dev": true,
+      "bin": {
+        "eslint-config-prettier": "bin/cli.js"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-template": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-template/-/eslint-plugin-template-0.7.0.tgz",
+      "integrity": "sha512-Fo3uxnVcutIgc1a4m2FBZBQdYhtOFvnWJL9XzpOfvt8Wr40oQijrg0kM749i4r+upk5SiSHzTTMKgL4rqjTRpw==",
+      "dev": true,
+      "dependencies": {
+        "htmlparser2": "3"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+      "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+      "dev": true,
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-visitor-keys": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+      "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/eslint/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/eslint/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/eslint/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/eslint/node_modules/globals": {
+      "version": "13.20.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+      "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/espree": {
+      "version": "9.6.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz",
+      "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==",
+      "dev": true,
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/esquery": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+      "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+      "dev": true,
+      "dependencies": {
+        "estraverse": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "dev": true,
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "dev": true
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
+      "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "dev": true
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+      "dev": true
+    },
+    "node_modules/fastest-levenshtein": {
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 4.9.1"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+      "dev": true,
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/file-entry-cache": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+      "dev": true,
+      "dependencies": {
+        "flat-cache": "^3.0.4"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/flat-cache": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+      "dev": true,
+      "dependencies": {
+        "flatted": "^3.1.0",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/flatted": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+      "dev": true
+    },
+    "node_modules/focus-trap": {
+      "version": "6.9.4",
+      "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-6.9.4.tgz",
+      "integrity": "sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw==",
+      "dev": true,
+      "dependencies": {
+        "tabbable": "^5.3.3"
+      }
+    },
+    "node_modules/fs-readdir-recursive": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+      "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+      "dev": true
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "dev": true
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/global-modules": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+      "dev": true,
+      "dependencies": {
+        "global-prefix": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/global-prefix": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+      "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+      "dev": true,
+      "dependencies": {
+        "ini": "^1.3.5",
+        "kind-of": "^6.0.2",
+        "which": "^1.3.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/global-prefix/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
+    "node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/globby/node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/globjoin": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+      "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+      "dev": true
+    },
+    "node_modules/graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+      "dev": true
+    },
+    "node_modules/hard-rejection": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+      "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/hosted-git-info": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
+      "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^7.5.1"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/hosted-git-info/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/html-tags": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "dev": true,
+      "dependencies": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      }
+    },
+    "node_modules/htmx.org": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-1.9.2.tgz",
+      "integrity": "sha512-ZGbucKcalQyXdGUl+4Zt3xdRDPmNy70yNhMyDG1eDYUm/ImxmSo2rhIBDa53XitrAVhA+/CGgry+wJ1SO77wrA==",
+      "dev": true
+    },
+    "node_modules/ignore": {
+      "version": "5.2.4",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/ignore-by-default": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+      "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+      "dev": true
+    },
+    "node_modules/immutable": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
+      "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
+      "dev": true
+    },
+    "node_modules/import-fresh": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+      "dev": true,
+      "dependencies": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/import-lazy": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+      "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.19"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
+      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "dev": true,
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
+    },
+    "node_modules/ini": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+      "dev": true
+    },
+    "node_modules/is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+      "dev": true
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+      "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+      "dev": true,
+      "dependencies": {
+        "has": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-plain-object": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true
+    },
+    "node_modules/jiti": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz",
+      "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==",
+      "dev": true,
+      "bin": {
+        "jiti": "bin/jiti.js"
+      }
+    },
+    "node_modules/jquery": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
+      "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==",
+      "dev": true
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz",
+      "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==",
+      "dev": true,
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
+    },
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+      "dev": true
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/known-css-properties": {
+      "version": "0.27.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz",
+      "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==",
+      "dev": true
+    },
+    "node_modules/levn": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/lilconfig": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz",
+      "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lodash.castarray": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+      "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+      "dev": true
+    },
+    "node_modules/lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "dev": true
+    },
+    "node_modules/lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+      "dev": true
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "dev": true
+    },
+    "node_modules/lodash.truncate": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+      "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+      "dev": true
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/make-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+      "dev": true,
+      "dependencies": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/map-obj": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/mathml-tag-names": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+      "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+      "dev": true,
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/mdn-data": {
+      "version": "2.0.30",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+      "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+      "dev": true
+    },
+    "node_modules/memorystream": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+      "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/meow": {
+      "version": "10.1.5",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
+      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+      "dev": true,
+      "dependencies": {
+        "@types/minimist": "^1.2.2",
+        "camelcase-keys": "^7.0.0",
+        "decamelize": "^5.0.0",
+        "decamelize-keys": "^1.1.0",
+        "hard-rejection": "^2.1.0",
+        "minimist-options": "4.1.0",
+        "normalize-package-data": "^3.0.2",
+        "read-pkg-up": "^8.0.0",
+        "redent": "^4.0.0",
+        "trim-newlines": "^4.0.2",
+        "type-fest": "^1.2.2",
+        "yargs-parser": "^20.2.9"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/hosted-git-info": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/normalize-package-data": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+      "dev": true,
+      "dependencies": {
+        "hosted-git-info": "^4.0.1",
+        "is-core-module": "^2.5.0",
+        "semver": "^7.3.4",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/type-fest": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/min-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mini-svg-data-uri": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+      "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+      "dev": true,
+      "bin": {
+        "mini-svg-data-uri": "cli.js"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minimist-options": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+      "dev": true,
+      "dependencies": {
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0",
+        "kind-of": "^6.0.3"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/moment": {
+      "version": "2.29.4",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+      "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "dev": true
+    },
+    "node_modules/mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "dev": true,
+      "dependencies": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+      "dev": true
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.13",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+      "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+      "dev": true
+    },
+    "node_modules/nodemon": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
+      "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==",
+      "dev": true,
+      "dependencies": {
+        "chokidar": "^3.5.2",
+        "debug": "^3.2.7",
+        "ignore-by-default": "^1.0.1",
+        "minimatch": "^3.1.2",
+        "pstree.remy": "^1.1.8",
+        "semver": "^7.5.3",
+        "simple-update-notifier": "^2.0.0",
+        "supports-color": "^5.5.0",
+        "touch": "^3.1.0",
+        "undefsafe": "^2.0.5"
+      },
+      "bin": {
+        "nodemon": "bin/nodemon.js"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/nodemon"
+      }
+    },
+    "node_modules/nodemon/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/nodemon/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/nodemon/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/nodemon/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/nopt": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+      "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+      "dev": true,
+      "dependencies": {
+        "abbrev": "1"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/normalize-package-data": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz",
+      "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==",
+      "dev": true,
+      "dependencies": {
+        "hosted-git-info": "^6.0.0",
+        "is-core-module": "^2.8.1",
+        "semver": "^7.3.5",
+        "validate-npm-package-license": "^3.0.4"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/normalize-package-data/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/normalize-package-data/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/normalize-package-data/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npm-run-all2": {
+      "version": "6.0.6",
+      "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.0.6.tgz",
+      "integrity": "sha512-Ba31DnJj3aqJ5freRdVIoBuRdGjHDt0Sfc7tduR2wYDbtcxsFlga6Sw2pE5Tn3+kdVttVwqzFlmozcT540wDxw==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "cross-spawn": "^7.0.3",
+        "memorystream": "^0.3.1",
+        "minimatch": "^9.0.0",
+        "pidtree": "^0.6.0",
+        "read-pkg": "^8.0.0",
+        "shell-quote": "^1.7.3"
+      },
+      "bin": {
+        "npm-run-all": "bin/npm-run-all/index.js",
+        "run-p": "bin/run-p/index.js",
+        "run-s": "bin/run-s/index.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0",
+        "npm": ">= 8"
+      }
+    },
+    "node_modules/npm-run-all2/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/npm-run-all2/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/npm-run-all2/node_modules/minimatch": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dev": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/optionator": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+      "dev": true,
+      "dependencies": {
+        "@aashutoshrathi/word-wrap": "^1.2.3",
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "dev": true,
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "dev": true,
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "dev": true,
+      "dependencies": {
+        "callsites": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/parse-json": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz",
+      "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.21.4",
+        "error-ex": "^1.3.2",
+        "json-parse-even-better-errors": "^3.0.0",
+        "lines-and-columns": "^2.0.3",
+        "type-fest": "^3.8.0"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "node_modules/path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pidtree": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+      "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+      "dev": true,
+      "bin": {
+        "pidtree": "bin/pidtree.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.25",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz",
+      "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.6",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "15.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+      "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+      "dev": true,
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-js": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+      "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+      "dev": true,
+      "dependencies": {
+        "camelcase-css": "^2.0.1"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >= 16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.21"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+      "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+      "dev": true,
+      "dependencies": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^2.1.1"
+      },
+      "engines": {
+        "node": ">= 14"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-media-query-parser": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+      "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
+      "dev": true
+    },
+    "node_modules/postcss-nested": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+      "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+      "dev": true,
+      "dependencies": {
+        "postcss-selector-parser": "^6.0.11"
+      },
+      "engines": {
+        "node": ">=12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2.14"
+      }
+    },
+    "node_modules/postcss-resolve-nested-selector": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
+      "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
+      "dev": true
+    },
+    "node_modules/postcss-safe-parser": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+      "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3"
+      }
+    },
+    "node_modules/postcss-scss": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz",
+      "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+        }
+      ],
+      "engines": {
+        "node": ">=12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.19"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.0.13",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+      "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+      "dev": true,
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true
+    },
+    "node_modules/prelude-ls": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz",
+      "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==",
+      "dev": true,
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/pstree.remy": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+      "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
+      "dev": true
+    },
+    "node_modules/punycode": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/quick-lru": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "dev": true,
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/read-cache/node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/read-pkg": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz",
+      "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==",
+      "dev": true,
+      "dependencies": {
+        "@types/normalize-package-data": "^2.4.1",
+        "normalize-package-data": "^5.0.0",
+        "parse-json": "^7.0.0",
+        "type-fest": "^3.8.0"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-pkg-up": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
+      "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+      "dev": true,
+      "dependencies": {
+        "find-up": "^5.0.0",
+        "read-pkg": "^6.0.0",
+        "type-fest": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/hosted-git-info": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "dev": true
+    },
+    "node_modules/read-pkg-up/node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true
+    },
+    "node_modules/read-pkg-up/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/normalize-package-data": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+      "dev": true,
+      "dependencies": {
+        "hosted-git-info": "^4.0.1",
+        "is-core-module": "^2.5.0",
+        "semver": "^7.3.4",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/read-pkg": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
+      "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
+      "dev": true,
+      "dependencies": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^3.0.2",
+        "parse-json": "^5.2.0",
+        "type-fest": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/type-fest": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dev": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/redent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
+      "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
+      "dev": true,
+      "dependencies": {
+        "indent-string": "^5.0.0",
+        "strip-indent": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+      "dev": true
+    },
+    "node_modules/regenerate-unicode-properties": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+      "dev": true,
+      "dependencies": {
+        "regenerate": "^1.4.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "dev": true
+    },
+    "node_modules/regenerator-transform": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+      "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/runtime": "^7.8.4"
+      }
+    },
+    "node_modules/regexpu-core": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/regjsgen": "^0.8.0",
+        "regenerate": "^1.4.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsparser": "^0.9.1",
+        "unicode-match-property-ecmascript": "^2.0.0",
+        "unicode-match-property-value-ecmascript": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regjsparser": {
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "dev": true,
+      "dependencies": {
+        "jsesc": "~0.5.0"
+      },
+      "bin": {
+        "regjsparser": "bin/parser"
+      }
+    },
+    "node_modules/regjsparser/node_modules/jsesc": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+      "dev": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      }
+    },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+      "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.11.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/resolve-from": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dev": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/sass": {
+      "version": "1.63.6",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz",
+      "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
+      "dev": true,
+      "dependencies": {
+        "chokidar": ">=3.0.0 <4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shell-quote": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz",
+      "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/simple-update-notifier": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+      "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+      "dev": true,
+      "dependencies": {
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/simple-update-notifier/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/simple-update-notifier/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/simple-update-notifier/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/slice-ansi": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+      "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "astral-regex": "^2.0.0",
+        "is-fullwidth-code-point": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+      }
+    },
+    "node_modules/slice-ansi/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/slice-ansi/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/slice-ansi/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/spdx-correct": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+      "dev": true,
+      "dependencies": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "node_modules/spdx-exceptions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+      "dev": true
+    },
+    "node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+      "dev": true,
+      "dependencies": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "node_modules/spdx-license-ids": {
+      "version": "3.0.13",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
+      "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
+      "dev": true
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-indent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
+      "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
+      "dev": true,
+      "dependencies": {
+        "min-indent": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/style-search": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
+      "dev": true
+    },
+    "node_modules/stylelint": {
+      "version": "15.10.2",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.2.tgz",
+      "integrity": "sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==",
+      "dev": true,
+      "dependencies": {
+        "@csstools/css-parser-algorithms": "^2.3.0",
+        "@csstools/css-tokenizer": "^2.1.1",
+        "@csstools/media-query-list-parser": "^2.1.2",
+        "@csstools/selector-specificity": "^3.0.0",
+        "balanced-match": "^2.0.0",
+        "colord": "^2.9.3",
+        "cosmiconfig": "^8.2.0",
+        "css-functions-list": "^3.2.0",
+        "css-tree": "^2.3.1",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.3.0",
+        "fastest-levenshtein": "^1.0.16",
+        "file-entry-cache": "^6.0.1",
+        "global-modules": "^2.0.0",
+        "globby": "^11.1.0",
+        "globjoin": "^0.1.4",
+        "html-tags": "^3.3.1",
+        "ignore": "^5.2.4",
+        "import-lazy": "^4.0.0",
+        "imurmurhash": "^0.1.4",
+        "is-plain-object": "^5.0.0",
+        "known-css-properties": "^0.27.0",
+        "mathml-tag-names": "^2.1.3",
+        "meow": "^10.1.5",
+        "micromatch": "^4.0.5",
+        "normalize-path": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.25",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-safe-parser": "^6.0.0",
+        "postcss-selector-parser": "^6.0.13",
+        "postcss-value-parser": "^4.2.0",
+        "resolve-from": "^5.0.0",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "style-search": "^0.1.0",
+        "supports-hyperlinks": "^3.0.0",
+        "svg-tags": "^1.0.0",
+        "table": "^6.8.1",
+        "write-file-atomic": "^5.0.1"
+      },
+      "bin": {
+        "stylelint": "bin/stylelint.mjs"
+      },
+      "engines": {
+        "node": "^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/stylelint"
+      }
+    },
+    "node_modules/stylelint-config-recommended": {
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz",
+      "integrity": "sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==",
+      "dev": true,
+      "peerDependencies": {
+        "stylelint": "^15.5.0"
+      }
+    },
+    "node_modules/stylelint-config-recommended-scss": {
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-12.0.0.tgz",
+      "integrity": "sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==",
+      "dev": true,
+      "dependencies": {
+        "postcss-scss": "^4.0.6",
+        "stylelint-config-recommended": "^12.0.0",
+        "stylelint-scss": "^5.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3",
+        "stylelint": "^15.5.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/stylelint-config-standard": {
+      "version": "34.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz",
+      "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==",
+      "dev": true,
+      "dependencies": {
+        "stylelint-config-recommended": "^13.0.0"
+      },
+      "engines": {
+        "node": "^14.13.1 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^15.10.0"
+      }
+    },
+    "node_modules/stylelint-config-standard-scss": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-10.0.0.tgz",
+      "integrity": "sha512-bChBEo1p3xUVWh/wenJI+josoMk21f2yuLDGzGjmKYcALfl2u3DFltY+n4UHswYiXghqXaA8mRh+bFy/q1hQlg==",
+      "dev": true,
+      "dependencies": {
+        "stylelint-config-recommended-scss": "^12.0.0",
+        "stylelint-config-standard": "^33.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3",
+        "stylelint": "^15.5.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/stylelint-config-standard-scss/node_modules/stylelint-config-standard": {
+      "version": "33.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-33.0.0.tgz",
+      "integrity": "sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg==",
+      "dev": true,
+      "dependencies": {
+        "stylelint-config-recommended": "^12.0.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^15.5.0"
+      }
+    },
+    "node_modules/stylelint-config-standard/node_modules/stylelint-config-recommended": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz",
+      "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==",
+      "dev": true,
+      "engines": {
+        "node": "^14.13.1 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^15.10.0"
+      }
+    },
+    "node_modules/stylelint-scss": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.0.1.tgz",
+      "integrity": "sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ==",
+      "dev": true,
+      "dependencies": {
+        "postcss-media-query-parser": "^0.2.3",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-selector-parser": "^6.0.13",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^14.5.1 || ^15.0.0"
+      }
+    },
+    "node_modules/stylelint/node_modules/balanced-match": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+      "dev": true
+    },
+    "node_modules/stylelint/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/sucrase": {
+      "version": "3.32.0",
+      "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
+      "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "commander": "^4.0.0",
+        "glob": "7.1.6",
+        "lines-and-columns": "^1.1.6",
+        "mz": "^2.7.0",
+        "pirates": "^4.0.1",
+        "ts-interface-checker": "^0.1.9"
+      },
+      "bin": {
+        "sucrase": "bin/sucrase",
+        "sucrase-node": "bin/sucrase-node"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/sucrase/node_modules/glob": {
+      "version": "7.1.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/sucrase/node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true
+    },
+    "node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/supports-hyperlinks": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
+      "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=14.18"
+      }
+    },
+    "node_modules/supports-hyperlinks/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-hyperlinks/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+      "dev": true
+    },
+    "node_modules/tabbable": {
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz",
+      "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==",
+      "dev": true
+    },
+    "node_modules/table": {
+      "version": "6.8.1",
+      "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
+      "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+      "dev": true,
+      "dependencies": {
+        "ajv": "^8.0.1",
+        "lodash.truncate": "^4.4.2",
+        "slice-ansi": "^4.0.0",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/table/node_modules/ajv": {
+      "version": "8.12.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+      "dev": true,
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/table/node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "dev": true
+    },
+    "node_modules/tailwindcss": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
+      "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
+      "dev": true,
+      "dependencies": {
+        "@alloc/quick-lru": "^5.2.0",
+        "arg": "^5.0.2",
+        "chokidar": "^3.5.3",
+        "didyoumean": "^1.2.2",
+        "dlv": "^1.1.3",
+        "fast-glob": "^3.2.12",
+        "glob-parent": "^6.0.2",
+        "is-glob": "^4.0.3",
+        "jiti": "^1.18.2",
+        "lilconfig": "^2.1.0",
+        "micromatch": "^4.0.5",
+        "normalize-path": "^3.0.0",
+        "object-hash": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.23",
+        "postcss-import": "^15.1.0",
+        "postcss-js": "^4.0.1",
+        "postcss-load-config": "^4.0.1",
+        "postcss-nested": "^6.0.1",
+        "postcss-selector-parser": "^6.0.11",
+        "postcss-value-parser": "^4.2.0",
+        "resolve": "^1.22.2",
+        "sucrase": "^3.32.0"
+      },
+      "bin": {
+        "tailwind": "lib/cli.js",
+        "tailwindcss": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/tailwindcss/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+      "dev": true
+    },
+    "node_modules/thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+      "dev": true,
+      "dependencies": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "node_modules/thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+      "dev": true,
+      "dependencies": {
+        "thenify": ">= 3.1.0 < 4"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/touch": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+      "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+      "dev": true,
+      "dependencies": {
+        "nopt": "~1.0.10"
+      },
+      "bin": {
+        "nodetouch": "bin/nodetouch.js"
+      }
+    },
+    "node_modules/trim-newlines": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
+      "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ts-interface-checker": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+      "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+      "dev": true
+    },
+    "node_modules/type-check": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/type-fest": {
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.0.tgz",
+      "integrity": "sha512-Gur3yQGM9qiLNs0KPP7LPgeRbio2QTt4xXouobMCarR0/wyW3F+F/+OWwshg3NG0Adon7uQfSZBpB46NfhoF1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/undefsafe": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+      "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+      "dev": true
+    },
+    "node_modules/unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+      "dev": true,
+      "dependencies": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-value-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-property-aliases-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+      "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
+      ],
+      "dependencies": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+      "dev": true,
+      "dependencies": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "dev": true
+    },
+    "node_modules/validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "dependencies": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "dev": true
+    },
+    "node_modules/write-file-atomic": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+      "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+      "dev": true,
+      "dependencies": {
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true
+    },
+    "node_modules/yaml": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
+      "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     }
+  }
 }
diff --git a/package.json b/package.json
index a2ffa756cbdf3f41529867e27b2cdcfa5989468e..5ccda56dbbec8c2dcf7dfefe6e6f0e9ec578bdce 100644
--- a/package.json
+++ b/package.json
@@ -1,78 +1,86 @@
 {
-    "name": "Hypha",
-    "version": "1.0.0",
-    "description": "The node.js requirements to build this project.",
-    "author": "Fredrik Jonsson",
-    "license": "GPL-2.0",
-    "babel": {
-        "exclude": [
-            "**/*.min.js",
-            "**/esm/*.js"
-        ],
-        "presets": [
-            [
-                "@babel/preset-env",
-                {
-                    "useBuiltIns": "entry",
-                    "corejs": "3"
-                }
-            ]
-        ]
-    },
-    "browserslist": [
-        "> 0.5%",
-        "last 2 versions",
-        "Firefox ESR",
-        "not dead"
+  "name": "Hypha",
+  "version": "1.0.0",
+  "description": "The node.js requirements to build this project.",
+  "author": "Fredrik Jonsson",
+  "license": "GPL-2.0",
+  "prettier": {
+    "trailingComma": "es5"
+  },
+  "babel": {
+    "exclude": [
+      "**/*.min.js",
+      "**/esm/*.js"
     ],
-    "devDependencies": {
-        "@alpinejs/focus": "^3.12.0",
-        "@babel/cli": "^7.20.7",
-        "@babel/core": "^7.20.12",
-        "@babel/preset-env": "^7.20.2",
-        "@tailwindcss/forms": "^0.5.3",
-        "alpinejs": "^3.12.0",
-        "core-js": "^3.27.2",
-        "daterangepicker": "^3.1.0",
-        "eslint": "^8.33.0",
-        "eslint-plugin-template": "^0.7.0",
-        "htmx.org": "^1.8.6",
-        "nodemon": "^2.0.20",
-        "npm-run-all2": "^6.0.4",
-        "sass": "^1.57.1",
-        "stylelint-config-standard-scss": "^6.1.0",
-        "stylelint-scss": "^4.3.0",
-        "tailwindcss": "^3.3.2"
-    },
-    "scripts": {
-        "heroku-postbuild": "npm run build",
-        "build": "npx npm-run-all --print-label --parallel build:*",
-        "watch": "npx npm-run-all --print-label --parallel watch:*",
-        "lint": "npx npm-run-all --parallel lint:*",
-        "build:js": "npx babel ./hypha/static_src/src/javascript --out-dir ./hypha/static_compiled/js",
-        "build:sass": "sass ./hypha/static_src/src/sass:./hypha/static_compiled/css --load-path ./hypha/static_src/src/sass --no-source-map",
-        "build:tailwind": "tailwindcss -i ./hypha/static_src/src/tailwind/main.css -o ./hypha/static_compiled/css/tailwind-output.css --minify",
-        "build:images": "npx babel ./hypha/static_src/src/images --out-dir ./hypha/static_compiled/images --copy-files",
-        "build:fonts": "npx babel ./hypha/static_src/src/fonts --out-dir ./hypha/static_compiled/fonts --copy-files",
-        "watch:js": "npx babel --watch ./hypha/static_src/src/javascript --out-dir ./hypha/static_compiled/js",
-        "watch:sass": "sass --watch ./hypha/static_src/src/sass:./hypha/static_compiled/css --load-path ./hypha/static_src/src/sass",
-        "watch:tailwind": "tailwindcss -i ./hypha/static_src/src/tailwind/main.css -o ./hypha/static_compiled/css/tailwind-output.css --watch",
-        "watch:static": "nodemon --delay 3 --exec \"npm run collectstatic\" --watch ./hypha/static_compiled --ext css,js,json,png,svg",
-        "watch:lint": "nodemon --exec \"npm run lint\" --watch ./hypha/static_src/src/sass --watch ./hypha/static_src/src/javscript --ext scss,js",
-        "dev:build": "npx npm-run-all --print-label --serial clean --parallel dev:build:* --serial collectstatic",
-        "dev:build:js": "npm run build:js",
-        "dev:build:sass": "sass ./hypha/static_src/src/sass:./hypha/static_compiled/css --load-path ./hypha/static_src/src/sass",
-        "dev:build:lint": "npm run lint",
-        "dev:build:tailwind": "tailwindcss -i ./hypha/static_src/src/tailwind/main.css -o ./hypha/static_compiled/css/tailwind-output.css",
-        "dev:build:images": "npm run build:images",
-        "dev:build:fonts": "npm run build:fonts",
-        "lint:sass": "stylelint \"hypha/static_src/src/sass/**/*.scss\"",
-        "lint:js": "eslint \"hypha/static_src/src/javascript/**/*.js\"",
-        "collectstatic": "python manage.py collectstatic --no-post-process --noinput --verbosity 0 --settings=hypha.settings.dev",
-        "clean": "rm -rf ./static ./hypha/static_compiled"
-    },
-    "engines": {
-        "node": "18.x"
-    },
-    "private": true
+    "presets": [
+      [
+        "@babel/preset-env",
+        {
+          "useBuiltIns": "entry",
+          "corejs": "3"
+        }
+      ]
+    ]
+  },
+  "browserslist": [
+    "> 0.5%",
+    "last 2 versions",
+    "Firefox ESR",
+    "not dead"
+  ],
+  "devDependencies": {
+    "@alpinejs/focus": "^3.12.3",
+    "@babel/cli": "^7.22.6",
+    "@babel/core": "^7.22.8",
+    "@babel/preset-env": "^7.22.7",
+    "@tailwindcss/forms": "^0.5.3",
+    "@tailwindcss/typography": "^0.5.9",
+    "alpinejs": "^3.12.3",
+    "core-js": "^3.31.1",
+    "daterangepicker": "^3.1.0",
+    "eslint": "^8.44.0",
+    "eslint-config-prettier": "^8.8.0",
+    "eslint-plugin-template": "^0.7.0",
+    "htmx.org": "^1.9.2",
+    "nodemon": "^3.0.1",
+    "npm-run-all2": "^6.0.6",
+    "prettier": "3.0.0",
+    "sass": "^1.63.6",
+    "stylelint": "^15.10.2",
+    "stylelint-config-standard": "^34.0.0",
+    "stylelint-config-standard-scss": "^10.0.0",
+    "tailwindcss": "^3.3.2"
+  },
+  "scripts": {
+    "heroku-postbuild": "npm run build",
+    "build": "npx npm-run-all --print-label --parallel build:*",
+    "watch": "npx npm-run-all --print-label --parallel watch:*",
+    "lint": "npx npm-run-all --parallel lint:*",
+    "build:js": "npx babel ./hypha/static_src/src/javascript --out-dir ./hypha/static_compiled/js",
+    "build:sass": "sass ./hypha/static_src/src/sass:./hypha/static_compiled/css --load-path ./hypha/static_src/src/sass --no-source-map",
+    "build:tailwind": "tailwindcss -i ./hypha/static_src/src/tailwind/main.css -o ./hypha/static_compiled/css/tailwind-output.css --minify",
+    "build:images": "npx babel ./hypha/static_src/src/images --out-dir ./hypha/static_compiled/images --copy-files",
+    "build:fonts": "npx babel ./hypha/static_src/src/fonts --out-dir ./hypha/static_compiled/fonts --copy-files",
+    "watch:js": "npx babel --watch ./hypha/static_src/src/javascript --out-dir ./hypha/static_compiled/js",
+    "watch:sass": "sass --watch ./hypha/static_src/src/sass:./hypha/static_compiled/css --load-path ./hypha/static_src/src/sass",
+    "watch:tailwind": "tailwindcss -i ./hypha/static_src/src/tailwind/main.css -o ./hypha/static_compiled/css/tailwind-output.css --watch",
+    "watch:static": "nodemon --delay 3 --exec \"npm run collectstatic\" --watch ./hypha/static_compiled --ext css,js,json,png,svg",
+    "watch:lint": "nodemon --exec \"npm run lint\" --watch ./hypha/static_src/src/sass --watch ./hypha/static_src/src/javscript --ext scss,js",
+    "dev:build": "npx npm-run-all --print-label --serial clean --parallel dev:build:* --serial collectstatic",
+    "dev:build:js": "npm run build:js",
+    "dev:build:sass": "sass ./hypha/static_src/src/sass:./hypha/static_compiled/css --load-path ./hypha/static_src/src/sass",
+    "dev:build:lint": "npm run lint",
+    "dev:build:tailwind": "tailwindcss -i ./hypha/static_src/src/tailwind/main.css -o ./hypha/static_compiled/css/tailwind-output.css",
+    "dev:build:images": "npm run build:images",
+    "dev:build:fonts": "npm run build:fonts",
+    "lint:prettier": "prettier . --check",
+    "lint:sass": "stylelint \"hypha/static_src/src/sass/**/*.scss\"",
+    "lint:js": "eslint \"hypha/static_src/src/javascript/**/*.js\"",
+    "collectstatic": "python manage.py collectstatic --no-post-process --noinput --verbosity 0 --settings=hypha.settings.dev",
+    "clean": "rm -rf ./static ./hypha/static_compiled"
+  },
+  "engines": {
+    "node": "18.x"
+  },
+  "private": true
 }
diff --git a/public/sandbox_db.dump b/public/sandbox_db.dump
index 5a3ab1c9342e06170f8d68385540ab5aa6284263..95411895d25941e8dec1394c8bd666f067fa2aa6 100644
Binary files a/public/sandbox_db.dump and b/public/sandbox_db.dump differ
diff --git a/pyproject.toml b/pyproject.toml
index 377e8b4731ba9da662b4f7a9e0757e20babc3619..bb863ac598256b8cdf9d8025b86b0d196369d4ef 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -36,7 +36,6 @@ ignore = [
     # 'F821',
     # 'W605',
 ]
-line-length = 88
 select = [
     'C',  # flake8-comprehensions
     'B',  # flake8-bugbear
diff --git a/requirements-dev.txt b/requirements-dev.txt
index daaefac1f08a6ac2e2455aef211af9c9a33abdbe..9299effe6f78c5aa0ae0b22ded44f5c3ad5758fb 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,17 +1,20 @@
 -r requirements.txt
 
+black==23.7.0
 coverage==6.4.4
 django-browser-reload==1.6.0
 django-coverage-plugin==2.0.3
 django-debug-toolbar==3.8.1
+djhtml==3.0.6
 dslr==0.4.0
 factory_boy==3.2.1
-ruff==0.0.263
 model-bakery==1.10.1
+pre-commit==3.3.3
 pytest-cov==4.0.0
 pytest-django==4.5.2
 pytest-split==0.8.0
 pytest-xdist[psutil]==3.1.0
 responses==0.22.0
+ruff==0.0.263
 wagtail-factories==2.1.0
 Werkzeug==2.2.3
diff --git a/requirements.txt b/requirements.txt
index ed00d267e32c88ae14c7551696a77c1ab385ae98..77e819a24a3616be3e77bf724136de06409313fa 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -32,7 +32,7 @@ django-tables2==2.5.1
 django-tinymce==3.5.0
 django-two-factor-auth==1.14.0
 django-web-components==0.1.1
-django==3.2.20
+django==3.2.21
 djangorestframework-api-key==2.3.0
 djangorestframework==3.14.0
 drf-nested-routers==0.93.4
@@ -49,7 +49,7 @@ phonenumberslite==8.13.4
 Pillow==9.4.0
 psycopg2-binary
 qrcode==7.4.2
-reportlab==3.6.12
+reportlab==3.6.13
 social_auth_app_django==5.0.0
 tablib==3.3.0
 tomd==0.1.3
diff --git a/tailwind.config.js b/tailwind.config.js
index 7cdf744c75ab68ff852003a5d73b0906cd72c1c0..0151c3c73c73f20b442931cc1eb00c9a44b371d7 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -8,11 +8,18 @@ module.exports = {
     theme: {
         extend: {
             colors: {
-                'light-blue' : '#0d7db0',
-                'tomato': '#f05e54',
-                'mid-grey': '#cfcfcf',
+                "light-blue": "#0d7db0",
+                "dark-blue": "#0c72a0",
+                tomato: "#f05e54",
+                "mid-grey": "#cfcfcf",
+                arsenic: "#404041",
+                "fg-muted": "var(--color-fg-muted)",
+                "fg-default": "var(--color-fg-default)",
             },
         },
     },
-    plugins: [require("@tailwindcss/forms")],
+    plugins: [
+        require("@tailwindcss/forms"),
+        require("@tailwindcss/typography"),
+    ],
 };